Appearance
Helm 基础
Helm 是 Kubernetes 的包管理工具。原生 YAML 适合描述单个资源或少量资源,但一个完整应用通常有 Deployment、Service、ConfigMap、Secret、Ingress/Gateway、HPA、ServiceMonitor 等对象。Helm 把这些对象打成 Chart,通过 values 文件区分环境配置,通过 release 记录安装、升级和回滚历史。
Helm 不替代 Kubernetes API。它生成的最终结果仍然是普通 Kubernetes 资源,排查时仍然回到 kubectl get、describe、Events 和控制器状态。Helm 主要解决“多资源打包、参数化、版本化安装”这件事。
一、几个核心概念
| 概念 | 说明 |
|---|---|
| Chart | 应用包,里面包含模板、默认 values、依赖和元数据 |
| Release | Chart 安装到集群后形成的一次实例 |
| Values | 渲染模板时使用的参数 |
| Repository | Chart 仓库,保存可下载的 Chart |
| Template | Go 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 demoHelm 安装成功只说明资源已经提交给 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 demoHelm 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/name、app.kubernetes.io/instance、app.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、集群当前状态,这几层对起来,问题通常能定位清楚。