无需根Helm Chart,如何批量安装升级多个依赖Chart?
这个方案完全可行,用helmfile就能完美实现你的需求——它就是专门为批量管理多个Helm Release设计的工具,不需要依赖主/根Chart,仅通过单个YAML文件就能维护所有组件的版本、仓库和配置,支持一键安装/升级。
具体实现步骤
安装helmfile
用官方脚本快速安装:curl -fsSL https://raw.githubusercontent.com/helmfile/helmfile/main/scripts/get-helmfile | bash(网络受限的话,也可以从GitHub Releases下载二进制包手动安装)
编写
helmfile.yaml清单
把所有需要管理的Chart信息集中在这个文件里,示例如下:repositories: - name: bitnami url: https://charts.bitnami.com/bitnami - name: my-custom-charts url: https://my-chart-repo.example.com/ releases: # RabbitMQ - name: rabbitmq namespace: messaging chart: bitnami/rabbitmq version: 12.1.3 createNamespace: true values: - replicaCount: 1 # Redis - name: redis namespace: cache chart: bitnami/redis version: 17.3.1 createNamespace: true # PostgreSQL - name: postgres namespace: database chart: bitnami/postgresql version: 12.5.0 createNamespace: true # 自定义Chart - name: my-app namespace: app chart: my-custom-charts/my-app version: 2.1.0 createNamespace: true一键批量安装
执行以下命令,helmfile会自动同步所有定义的Release:helmfile sync它会检查每个Chart的状态,不存在的自动安装,已存在的对比配置,有变更就更新。
修改版本后一键升级
直接编辑helmfile.yaml里对应Chart的version字段,再次执行helmfile sync,工具会自动识别版本变化,仅升级对应Chart,其他无变更的保持原样。
如果不想用helmfile,还有以下几种选择:
1. 自定义Shell脚本
自己编写脚本维护版本变量,循环执行Helm命令。示例脚本片段:
#!/bin/bash # 版本列表 RABBITMQ_VERSION="12.1.3" REDIS_VERSION="17.3.1" POSTGRES_VERSION="12.5.0" MY_APP_VERSION="2.1.0" # 安装/升级RabbitMQ helm upgrade --install rabbitmq bitnami/rabbitmq \ --namespace messaging --create-namespace \ --version $RABBITMQ_VERSION # 同理处理Redis、PostgreSQL和自定义Chart...
缺点:需要自己处理依赖检查、错误重试、状态判断,维护成本高,不如helmfile健壮。
2. Argo CD(持续部署场景)
如果你的环境已经部署了Argo CD,可以用ApplicationSet或者多个Application资源来管理这些Chart。把版本信息写在Argo CD的Application清单里,修改版本后,Argo CD会自动同步升级对应的Chart。适合需要持续部署、多环境管理的场景,但需要额外维护Argo CD集群。
3. Kustomize + Helm
用Kustomize的helmCharts字段引用各个Helm Chart,把版本和配置定义在Kustomize的overlay里。示例kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization helmCharts: - name: rabbitmq repo: https://charts.bitnami.com/bitnami version: 12.1.3 releaseName: rabbitmq namespace: messaging includeCRDs: true # 其他Chart同理...
执行kustomize build | kubectl apply -f -来部署,修改版本后重新执行即可。缺点是需要处理Helm渲染后的Kubernetes资源,调试不如直接用Helm工具方便。
内容的提问来源于stack exchange,提问作者prosto.vint

