如何管理外部Helm Chart依赖并声明式集成第三方贡献Chart
自研Helm Chart集成第三方Chart的实现方案
Helm原生提供依赖管理能力,完全支持声明式配置所有第三方依赖,单次执行helm install/upgrade即可完成全量部署,天然适配CI/CD幂等性要求,具体实现如下:
场景1:添加Bitnami MySQL作为依赖
不需要手动编写MySQL资源配置,直接通过Chart.yaml声明依赖即可:
- 编辑自研Chart根目录下的
Chart.yaml,新增dependencies字段:
# Chart.yaml 示例片段 apiVersion: v2 name: my-backend-chart version: 1.0.0 description: 自研后端应用Chart dependencies: # 声明Bitnami MySQL依赖 - name: mysql version: 9.14.1 # 替换为你需要的具体版本 repository: https://charts.bitnami.com/bitnami condition: mysql.enabled # 可通过values参数灵活控制是否安装该依赖
- 自定义MySQL配置:不需要修改第三方Chart源码,直接在自研Chart的
values.yaml中添加带mysql前缀的配置项即可:
# values.yaml 示例片段 mysql: enabled: true auth: rootPassword: "自定义数据库密码" primary: persistence: size: 20Gi storageClass: "你的集群存储类名"
- 依赖拉取:
- 本地开发可以执行
helm dependency build,会自动将依赖Chart下载到本地charts/目录 - CI/CD场景可以直接在执行安装命令时添加
--dependency-update参数,自动拉取对应版本依赖,无需提前手动操作
- 本地开发可以执行
场景2:声明式集成ArgoCD
根据你的使用需求分两种实现方式:
方式A:将ArgoCD服务作为依赖安装
如果需要和你的应用同时部署ArgoCD服务,和MySQL依赖的配置逻辑一致:
- 在
Chart.yaml的dependencies中添加ArgoCD依赖声明:
dependencies: - name: argo-cd version: 5.51.0 # 替换为你需要的ArgoCD Chart版本 repository: https://argoproj.github.io/argo-helm condition: argo-cd.enabled
- 在
values.yaml中添加argo-cd前缀的自定义配置,比如修改管理员密码、调整资源配额、开关内置组件等。
方式B:声明ArgoCD Application资源
如果集群已有ArgoCD服务,仅需要通过你的Chart声明应用交付规则,直接在自研Chart的templates/目录下添加ArgoCD Application资源模板即可:
# templates/argocd-app.yaml apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-application namespace: argocd spec: project: default source: repoURL: "你的应用代码仓库地址" targetRevision: HEAD path: "代码仓库中Chart的路径" destination: server: "https://kubernetes.default.svc" namespace: 应用部署的目标命名空间 syncPolicy: automated: prune: true selfHeal: true
CI/CD幂等部署方式
直接使用以下命令即可完成全量组件的幂等部署,不需要提前执行helm repo add等操作:
helm upgrade --install <你的发布名称> <你的Chart路径> --dependency-update -f values.yaml
重复执行上述命令只会对比集群现有资源和Chart配置的差异,仅更新变更部分,完全符合CI/CD场景的幂等性要求。
内容的提问来源于stack exchange,提问作者Bas van der Heijden
相关产品推荐
相关产品推荐

