Skip to content

Helm 基础

Helm 是 Kubernetes 的包管理工具。原生 YAML 适合描述单个资源或少量资源,但一个完整应用通常有 Deployment、Service、ConfigMap、Secret、Ingress/Gateway、HPA、ServiceMonitor 等对象。Helm 把这些对象打成 Chart,通过 values 文件区分环境配置,通过 release 记录安装、升级和回滚历史。

Helm 不替代 Kubernetes API。它生成的最终结果仍然是普通 Kubernetes 资源,排查时仍然回到 kubectl getdescribe、Events 和控制器状态。Helm 主要解决“多资源打包、参数化、版本化安装”这件事。

一、几个核心概念

概念说明
Chart应用包,里面包含模板、默认 values、依赖和元数据
ReleaseChart 安装到集群后形成的一次实例
Values渲染模板时使用的参数
RepositoryChart 仓库,保存可下载的 Chart
TemplateGo template 格式的 Kubernetes YAML

同一个 Chart 可以安装成多个 release。比如 redis Chart 可以在 dev namespace 安装一套,也可以在 prod namespace 安装一套,只要 release 名称和 values 不同。

二、仓库和安装

添加仓库并搜索 Chart:

bash
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm search repo bitnami/nginx

安装:

bash
# --create-namespace 在 namespace 不存在时自动创建
helm install web bitnami/nginx \
  -n demo \
  --create-namespace

查看 release:

bash
helm list -n demo
helm status web -n demo
kubectl get all -n demo

Helm 安装成功只说明资源已经提交给 API Server,不等于 Pod 已经 Ready。helm status 后还要看 Deployment、Pod、Service、Events。

三、values 覆盖

查看 Chart 默认 values:

bash
helm show values bitnami/nginx > values.yaml

用 values 文件安装:

bash
helm install web bitnami/nginx \
  -n demo \
  -f values.yaml

也可以用 --set 临时覆盖:

bash
helm upgrade web bitnami/nginx \
  -n demo \
  --set replicaCount=2

--set 适合少量临时参数。生产发布更适合把 values 文件放到部署仓库里,变更记录清楚,也方便 Argo CD 这类 GitOps 工具同步。

四、渲染和检查

在提交到集群前渲染模板:

bash
# 只渲染,不访问集群,适合检查模板结果
helm template web bitnami/nginx \
  -n demo \
  -f values.yaml

配合 dry-run:

bash
# 让 Helm 连接集群,模拟安装过程并输出最终资源
helm install web bitnami/nginx \
  -n demo \
  -f values.yaml \
  --dry-run

升级前查看差异可以安装 helm-diff 插件。没有插件时,至少保留 helm template 输出,和上一版渲染结果做文本对比。

五、升级和回滚

升级:

bash
helm upgrade web bitnami/nginx \
  -n demo \
  -f values-prod.yaml

查看历史:

bash
helm history web -n demo

回滚到上一版:

bash
helm rollback web 1 -n demo

Helm history 记录的是 release 版本,不等于应用数据也能回滚。数据库 schema、PVC 数据、外部配置中心里的配置,都不跟着 Helm 自动恢复。发布包含数据变更时,回滚方案要单独写。

六、卸载和残留资源

bash
helm uninstall web -n demo

卸载会删除 Helm 管理的资源。PVC、CRD、外部云资源是否保留,要看 Chart 模板和资源自身策略。有些 Chart 默认不删除 PVC,避免误删数据;有些 CRD 安装在集群级别,也不会随着 release 卸载。

查看 Helm 管理的资源可以看 label:

bash
kubectl get all -n demo -l app.kubernetes.io/instance=web

多数 Chart 会使用 app.kubernetes.io/nameapp.kubernetes.io/instanceapp.kubernetes.io/managed-by 这组通用标签。监控采集、日志过滤和资源归属也经常依赖这些标签。

七、排查入口

现象查看方式
Chart 下载失败helm repo update、仓库地址、代理和证书
values 不生效helm get values <release> -n <ns>helm template
模板渲染失败错误行号、缺失 values、函数参数类型
Helm 成功但 Pod 异常kubectl describe pod、Events、日志
回滚后仍异常检查 PVC、数据库、外部配置、镜像 tag 是否可追溯

Helm 把安装动作包装得很方便,但问题落点仍然是 Kubernetes 资源。Chart、values、release 历史、最终 YAML、集群当前状态,这几层对起来,问题通常能定位清楚。