
云原生部署 - Helm包管理器入门到实践
为什么选择 Helm
Helm 将 Kubernetes 资源抽象为 Chart(模板 + 默认值),统一安装、升级、回滚与打包分享。对于多环境与可重用需求强的团队,Helm 能显著降低运维与交付复杂度。
安装与基本命令
1 | curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash |
Chart 结构详解
1 | myapp/ |
_helpers.tpl 定义命名规范:
1 | {{- define "myapp.fullname" -}} |
在 deployment.yaml 中复用:
1 | metadata: |
模板与函数
- 条件与循环:
if/range - 内置对象:
.Values.Release.Chart.Capabilities - 常用函数:
defaultquotetoYamlindent
示例(根据开关启用 HPA):
1 | {{- if .Values.hpa.enabled }} |
依赖与子 Chart
在 Chart.yaml 中声明依赖:
1 | dependencies: |
通过 values.yaml 控制开启:
1 | redis: |
多环境管理与 GitOps
分层配置:
values.yaml:基础默认values-dev.yaml/values-prod.yaml:环境覆盖
部署命令:
1 | helm upgrade --install myapp charts/myapp \ |
GitOps:将 Chart 与 values 管理在 Git 仓库,使用 Argo CD/Flux 监听并同步集群状态,实现声明式交付。
Hooks 与发布策略
Helm Hooks(如 pre-install, post-upgrade)可在发布前后执行任务(迁移、数据校验)。谨慎使用,避免失败导致发布卡住。
发布策略:
- 蓝绿/金丝雀配合 Ingress/Service 实现
helm diff预览差异,降低出错率- 通过
--atomic自动回滚失败
安全与合规
- 禁止模板硬编码敏感信息,使用 K8s Secret 或密钥管理(Sealed Secrets/External Secrets)
- 资源限制与安全上下文(securityContext)默认开启
- Chart 签名与 provenance 校验,防止被篡改
踩坑
- 模板渲染缩进:多用
toYaml | nindent - CRD 管理:通过
crds/目录或单独安装,避免升级冲突 - values 过深:拆分子 Chart 或引入 Schema(values.schema.json)
FAQ
- 如何回滚?
helm rollback <release> <rev> - 如何只渲染不安装?
helm template或helm install --dry-run --debug - 是否支持多集群?通过 kubeconfig context 或 GitOps 平台统一管理
结语
Helm 提供了强大的模板与依赖机制,配合 GitOps、差异检查与严格的配置规范,能够显著提升交付效率与发布可靠性。
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自Zelang's Blog
评论 ()




