一、Helm 是什么

Helm 是 Kubernetes 的 包管理工具,类似于 Linux 的 aptyum
它用于将一组 Kubernetes YAML 文件打包成一个可重用、可版本化的“Chart”,实现一键安装、升级与回滚操作。

一句话概括:

Helm = Kubernetes 的应用管理器。


二、Helm 的核心功能

功能描述
应用打包(Chart)将多个 YAML 文件封装为一个可重用包
版本管理管理应用不同版本并支持快速回滚
参数化部署通过 values.yaml 自定义配置
依赖管理支持多 Chart 嵌套与依赖
模板化渲染使用 Go 模板动态生成 YAML
远程仓库管理类似于 Docker Hub 的 Chart 仓库
CI/CD 集成可与 Jenkins、GitLab、ArgoCD 自动部署结合

三、Helm 的架构


+-------------------------------------------------------+ | Helm CLI | +-------------------------------------------------------+ | Charts (应用包定义) | +-------------------------------------------------------+ | Tiller / Kubernetes API Server | +-------------------------------------------------------+ | Kubernetes Cluster | +-------------------------------------------------------+

Helm 3 版本后已移除 Tiller,更安全、更简洁,直接通过 Kubernetes API 操作集群。


四、安装与配置

1. 安装 Helm

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

2. 验证版本

helm version

输出:


version.BuildInfo{Version:"v3.15.0", GitCommit:"...", GoVersion:"go1.22"}


五、添加与管理仓库

添加官方仓库:


helm repo add stable https://charts.helm.sh/stable helm repo update

查看仓库列表:


helm repo list

搜索可用 Chart:


helm search repo mysql


六、安装与卸载应用

安装 MySQL:


helm install mydb bitnami/mysql

查看部署状态:


helm list kubectl get pods

卸载:


helm uninstall mydb


七、Chart 的基本结构


mychart/ ├── Chart.yaml # Chart 元信息 ├── values.yaml # 默认配置 ├── templates/ # 模板文件 │ ├── deployment.yaml │ ├── service.yaml │ ├── _helpers.tpl ├── charts/ # 子依赖 Chart └── README.md


八、创建自定义 Chart

创建:


helm create myapp

目录结构自动生成。
修改 values.yaml


replicaCount: 2 image: repository: nginx tag: "1.25" service: type: NodePort port: 80

安装:


helm install webapp ./myapp

验证:


kubectl get svc,pods


九、模板语法基础

Helm 使用 Go Template 语法动态渲染 Kubernetes 配置文件。

示例 deployment.yaml


apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Release.Name }}-deploy spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: app: {{ .Chart.Name }} template: metadata: labels: app: {{ .Chart.Name }} spec: containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" ports: - containerPort: 80

Helm 会自动替换模板中的变量。


十、模板函数与管道

Helm 模板可使用 Go 的函数与管道:


{{ default "latest" .Values.image.tag }} {{ upper .Chart.Name }} {{ toYaml .Values | indent 4 }}

支持条件逻辑:


{{- if .Values.service.enabled }} apiVersion: v1 kind: Service ... {{- end }}


十一、values.yaml 参数化部署

可通过命令行自定义参数:


helm install webapp ./myapp --set image.tag=1.26 --set replicaCount=3

或使用独立文件:

prod-values.yaml


replicaCount: 5 image: tag: "stable"

执行:


helm install webapp ./myapp -f prod-values.yaml

参考案例:www.rzrsh.cn


十二、Chart 依赖管理

Chart.yaml 中定义依赖:


dependencies: - name: redis version: "17.3.0" repository: "https://charts.bitnami.com/bitnami"

下载依赖:


helm dependency update

安装时会自动部署 Redis。


十三、升级与回滚

升级:


helm upgrade webapp ./myapp --set image.tag=1.27

查看版本历史:


helm history webapp

回滚:


helm rollback webapp 1


十四、模板调试与渲染预览


helm template ./myapp

可输出渲染后的 YAML,不实际部署。
验证渲染:


helm lint ./myapp


十五、Helm Hooks(钩子机制)

钩子用于在部署生命周期执行特定任务。

示例:
job-cleanup.yaml


apiVersion: batch/v1 kind: Job metadata: name: cleanup annotations: "helm.sh/hook": pre-delete spec: template: spec: containers: - name: cleaner image: alpine command: ["sh", "-c", "echo 清理旧数据"] restartPolicy: Never

在卸载前执行。


十六、Chart 打包与分发

打包:


helm package ./myapp

生成:


myapp-0.1.0.tgz

上传到仓库或自建服务器。

添加自定义仓库:


helm repo index .

部署时直接安装:


helm install myapp myrepo/myapp


十七、Helm 与 CI/CD 集成

GitLab CI 示例

stages: - deploy deploy: stage: deploy image: alpine/helm:3.15.0 script: - helm upgrade --install webapp ./chart --values values-prod.yaml

Jenkins Pipeline

stage('Deploy') { steps { sh 'helm upgrade --install webapp ./chart' } }


十八、Helm 与 ArgoCD 自动化部署

Helm Chart 可直接作为 ArgoCD 应用模板。
ArgoCD 自动同步 Git 仓库的 Chart 版本,实现 GitOps 模式。


apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: webapp spec: source: repoURL: 'https://github.com/company/helm-charts' path: myapp targetRevision: HEAD destination: server: 'https://kubernetes.default.svc' namespace: production


十九、Helm 安全与最佳实践

  1. 不要在 Chart 中直接写入密码,使用 Secret 管理。

  2. 将所有环境变量参数化至 values.yaml

  3. 使用 .helmignore 忽略临时文件。

  4. Chart 版本与应用版本分开管理。

  5. 发布前使用 helm lint 校验。

  6. 对生产环境启用签名验证:

    
    

    helm package --sign --key "devops-key" --keyring ~/.gnupg/pubring.gpg helm verify myapp-0.1.0.tgz


二十、企业级实战场景

场景实践方案
多环境部署开发、测试、生产共用一套 Chart
微服务管理每个服务独立 Chart,支持版本独立升级
自动化运维Helm + Jenkins 实现自动部署与回滚
云原生应用发布使用 Helm Charts 管理 Kubernetes 资源
分布式系统打包如 ELK、Prometheus、Kafka 一键部署
GitOps 流程Helm + ArgoCD 自动同步 Git 配置
混合云支持Helm Chart 统一管理多集群配置
安全可追溯部署签名验证、Chart 版本控制与审计日志

更多推荐