news 2026/10/14 16:05:40

Devtron 从 OCI 镜像仓库拉取 Helm Chart:Chart Store 多源纳管实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Devtron 从 OCI 镜像仓库拉取 Helm Chart:Chart Store 多源纳管实战指南
  • 云原生
  • DevOps
  • 运维

【免费下载链接】devtron

The only Kubernetes dashboard you need

项目地址:https://gitcode.com/gh_mirrors/dev/devtron
点击查看免费下载

本文围绕 Devtron 官方用例文档《Pull Helm Charts from OCI Registry》展开,完整覆盖从注册 OCI 仓库、开启Use as chart repository、填充 Chart Store,到排查"找不到 Chart"与移除仓库的全流程操作;并结合 Devtron 后端源码剖析oci_registry_config数据模型、Chart Provider 同步 Job 的触发链路,帮助你在实际运维中既会操作、也知其所以然。

1. 核心概念:为什么 OCI Registry 也能当 Helm 仓库用

Devtron 支持从两类来源安装 Helm chart:

  • 传统 Helm repository(基于index.yaml索引文件的仓库);
  • 容器 / OCI registry(Docker Hub、ECR、GCR 等 Container/OCI registry)。

关键差异在于:Helm repo 依赖index.yaml来发现仓库中的全部 chart,而 OCI registry 没有这种索引文件。Devtron 的解决方案是把 OCI registry 也统一纳管为"chart 源",通过配置要拉取的仓库列表(repository list),将多来源的 chart 统一填充(populate)到 Chart Store。这一设计在源码中得到了印证:pkg/chartRepo/ChartRepositoryService.go里对传统 Helm repo 的校验逻辑正是拼接<repo-url>/index.yaml并发起 GET 请求验证可访问性(见ValidateChartRepo方法,ChartRepositoryService.go);而 OCI registry 路径则完全不走 index 校验,走的是docker_artifact_store+oci_registry_config两张表(见第 5 节)。

前置条件

  • 已有一个或多个 Helm Chart,且以 OCI artifact 形式推送到你的仓库中;
  • 一个 OCI 合规的 registry(Docker Hub 及 更多支持的 provider);
  • 必须先把 OCI registry 添加到 Devtron,并开启Use as chart repository选项。

2. 配置 OCI Registry 的关键字段

在Global Configurations → Container/OCI Registry → Add Registry页面,除 Provider、Registry type(Private/Public)外,与"拉取 Chart"直接相关的字段如下(源自 container-registries.md):

字段说明
Name仓库名称,会出现在 Build Configuration 等场景的 Container Registry 下拉列表
Registry URL仓库 URL。注意:不要包含oci://、http://或https://前缀
Authentication Type凭据输入形式随 provider 不同而不同(如 ECR 的 User Auth、GCR 的 JSON key)
Push container images勾选表示用该仓库推送容器镜像(默认勾选)
Push helm packages勾选表示允许向该仓库推送 Helm chart
Use as chart repository核心开关:勾选后 Devtron 会从此仓库拉取 Helm chart 并展示到 Chart Store,且必须提供仓库内的 repository 列表
Set as default registry设为默认 registry

从源码结构看,上述 UI 字段与pkg/pipeline/types/DockerRegistry.go中的DockerArtifactStoreBean一一对应,其中IsOCICompliantRegistry、OCIRegistryConfig、RepositoryList []string三个字段正是"该 registry 能否当 chart 源用"的数据载体(DockerRegistry.go)。

3. 操作教程:把 Chart 拉进 Chart Store

3.1 填充 Chart 到 Chart Store

  1. 进入Global Configurations → Container/OCI Registry。
  2. 在列表中搜索目标 OCI registry,点击进入。
  3. 在List of repositories中添加 chart 仓库,格式必须为username/chartname(username可在 registry provider 的控制台账户信息中找到,例如 Docker Hub 的用户名)。
  4. 点击Save(新增)或Update(修改)。
  5. 从左侧导航进入Chart Store。
  6. 通过搜索栏直接搜索,或在 chart 来源(source)筛选中选择你的 chart 源,即可看到已同步的 chart。

完成后,chart 即出现在 Chart Store 列表中,可用于创建应用或作为模板源。

3.2 找不到你的 Chart?两个排查方向

方向一:deprecated chart 默认被过滤。已被标记废弃的 chart 不会显示在 Chart Store 中,除非你打开Show deprecated charts过滤器。

方向二:手动触发一次 resync。若 registry 中的 chart 有更新而 Store 未反映,可对对应 chart provider 执行 resync。

从源码看,"resync"背后是创建一个 Kubernetes Job:ChartProviderService.SyncChartProvider会把{ChartProviderId, IsOCIRegistry}封装成ChartProviderConfig调用TriggerChartSyncManual(ChartProviderService.go)。后者在 ChartRepositoryService.go 中渲染 ManualAppSyncYaml.go 里的 Job 模板(名为app-manual-sync-job,backoffLimit: 4),并通过CHART_PROVIDER_ID、IS_OCI_REGISTRY两个环境变量告诉 sync 容器"这是哪个源、是不是 OCI 源",随后由K8sUtil.DeleteAndCreateJob在 default cluster 中创建 Job 执行实际的拉取/入库。

对应到前端,resync 动作最终打到 REST 接口SyncChartProvider,该接口会先做登录态校验与 validator 校验,再用 casbin 做 RBAC 检查(ResourceGlobal+ActionGet),见 ChartProviderRestHandler.go;列表/启停接口GetChartProviderList、ToggleChartProvider也在同一文件中。

4. 从 Chart Store 移除 Chart

  1. 进入该 OCI registry 的设置页。
  2. 在List of repositories中删除不想要的 chart 仓库条目。
  3. 点击Update。

移除后,对应 chart 将不再出现在 Chart Store 中。

注意(官方提示):在 OCI registry 上删除 chart 仓库,不会导致该 chart 从 Devtron 的 Chart Store 中被移除——即 Store 中的历史数据不会因为源端删除而自动清理,需要按上述步骤在 Devtron 侧同步移除。

5. 源码纵深:OCI Chart 源是如何被识别与管理的

5.1 数据模型:oci_registry_config表

OCI registry 的"chart 用途"配置独立存储在oci_registry_config表中,模型见 OCIRegistryConfigRepository.go:

字段含义
docker_artifact_store_id关联的 registry(docker_artifact_store表主键)
repository_type取值CONTAINER或CHART(常量OCI_REGISRTY_REPO_TYPE_CONTAINER/OCI_REGISRTY_REPO_TYPE_CHART)
repository_action取值PULL、PUSH或PULL/PUSH(常量STORAGE_ACTION_TYPE_*)
repository_list即 UI 中 List of repositories 的字符串形式,存放username/chartname列表
is_chart_pull_activechart 拉取开关,对应"启用/停用"该 chart 源
is_public/deleted是否公共仓库 / 软删除标记

这些常量定义在 DockerArtifactStoreRepository.go。

5.2 哪些 registry 会被当作"Chart Provider"

查询侧的过滤条件非常明确:FindAllChartProviders只返回active = true且关联配置满足repository_type='CHART'且repository_action为PULL或PULL/PUSH的 registry(DockerArtifactStoreRepository.go)。

服务层再做一道等价判定IsOCIConfigChartProvider:RepositoryType == CHART且 action 为PULL/PULL/PUSH且RepositoryList != ""才认为是有效 chart 源(ChartTemplateService.go)。这也解释了为什么文档强调Use as chart repository必须勾选且必须填写 repository 列表——列表为空时该 registry 根本不会进入 Chart Provider 列表。

5.3 启用/停用:is_chart_pull_active开关

ToggleChartProvider对 OCI 源的处理是:按docker_artifact_store_id查出未删除的OCIRegistryConfig,找到 chart 类型那条记录后更新IsChartPullActive(ChartProviderService.go)。即"停用某 chart 源"并不删除配置,只是把拉取开关置为 false。

5.4 已部署应用对 registry 的反向约束

FindDeploymentCount的 SQL 通过oci_registry_config(条件is_chart_pull_active = true且repository_type='CHART'且 action 为PULL/PULL/PUSH)与installed_app_versions/app_store关联统计该 registry 下已部署应用数(DockerArtifactStoreRepository.go)。结合 Chart Provider 列表中IsEditable的赋值逻辑(存在活跃部署即不可编辑,见 ChartProviderService.go),可以推断:已被应用引用的 chart 源会受到删除/修改保护,这与传统 chart repo "有已部署 chart 则不可改名/改 URL"(ChartRepositoryService.go)的保护策略一脉相承。

5.5 Chart Store 中的 OCI 标记

应用创建后,App Store 服务会依据 chart 来源写入标记:来源是 OCI registry(DockerArtifactStore != nil)时置IsOCICompliantChart = true,否则为 false(AppStoreService.go)。这个标记让 Devtron 能区分同一 Chart Store 中"来自 Helm repo"与"来自 OCI registry"两类应用版本。

6. 小结

事项结论
OCI registry 没有index.yaml,如何发现 chart?依赖Use as chart repository+List of repositories(username/chartname)显式声明
配置存在哪?docker_artifact_store(registry 本体)+oci_registry_config(CHART/PULL用途配置)
手动 resync 的实现?渲染并创建app-manual-sync-jobKubernetes Job,注入CHART_PROVIDER_ID、IS_OCI_REGISTRY环境变量
源端删除 chart 会同步删除 Store 记录吗?不会,需在 Devtron 侧移除 repository 条目并 Update
权限要求?Toggle/Sync 接口经 casbin 校验ResourceGlobal权限,普通用户会被 403 拒绝

掌握以上操作与数据链路后,你可以将团队的私有 chart 资产统一收敛到 OCI registry,并通过 Devtron 的 Chart Store 实现多源 chart 的统一检索、同步与部署,同时利用is_chart_pull_active开关与部署计数保护机制,安全地管理 chart 源的生命周期。

  • 云原生
  • DevOps
  • 运维

【免费下载链接】devtron

The only Kubernetes dashboard you need

项目地址:https://gitcode.com/gh_mirrors/dev/devtron
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 16:05:28

语义分割三大经典架构解析:FCN、UNet与DeepLab实战指南

语义分割这个方向&#xff0c;我从最早一批做遥感影像解译的时候就开始接触&#xff0c;中间踩过的坑、调过的模型、翻过的车&#xff0c;算下来能写好几页纸。FCN、UNet、DeepLab这三兄弟&#xff0c;基本是每一个入行图像分割的人绕不开的经典架构。不管你是做医疗影像、自动…

作者头像 李华
网站建设 2026/10/14 16:04:08

【数字政府】市公共大数据资源中心与能力平台建设项目可研报告:构建基础支撑、数据资源、共享交换、治理、管理、安全和统一门户体系

该项目一期建设目标明确、架构完整、任务清晰&#xff0c;围绕公共大数据资源中心与能力平台&#xff0c;构建基础支撑、数据资源、共享交换、治理、管理、安全和统一门户体系&#xff0c;能够为M区公共数据汇聚、整合、共享、应用、展示、评价奠定基础&#xff0c;支撑政务服务…

作者头像 李华