2. Helm 基础回顾:Chart 结构、Release 管理与核心命令

在云原生日志平台的组件拓扑图回退演练中,Helm 是驱动整个部署与回退流程的核心引擎。本节将系统回顾 Helm 的三大基础支柱:Chart 结构、Release 生命周期以及install/upgrade/rollback 命令,为后续的快照回退操作奠定扎实的理论基础。

2.1 Chart 结构:应用打包的标准化蓝图

Helm Chart 是一个预配置的 Kubernetes 资源包,其目录结构遵循严格的约定。理解 Chart 结构是编写和调试部署模板的前提。

核心目录结构示例:
my-logging-chart/
├── Chart.yaml          # Chart 元数据(名称、版本、API 版本)
├── values.yaml         # 默认配置值(用户可覆盖)
├── values.schema.json  # (可选)values 的 JSON Schema 校验
├── charts/             # 子 Chart 依赖(如 Elasticsearch、Kafka)
├── templates/          # Go 模板文件,渲染为 Kubernetes 资源
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── configmap.yaml
│   ├── _helpers.tpl    # 模板辅助函数
│   └── NOTES.txt       # 安装后的使用说明
└── README.md
文件/目录 作用 回退演练中的关键点
Chart.yaml 定义 Chart 名称、版本、apiVersion(v2 必用) 版本号用于追踪快照对应的 Chart 版本
values.yaml 声明所有可配置参数及其默认值 回退时需恢复旧 values 以确保配置一致性
templates/ Go 模板 + YAML 资源定义 模板渲染结果决定组件拓扑的实际状态
charts/ 存放子 Chart 依赖(如日志采集器、消息队列) 子 Chart 版本锁定影响整体回退策略
实践建议:在日志平台项目中,建议将 values.yaml 中的组件副本数、镜像标签、存储类等参数与拓扑图节点属性一一对应,便于回退时精准还原。
Helm Chart 结构分层示意 my-logging-chart/ Chart.yaml values.yaml values.schema.json templates/ (deployment, service, configmap) charts/ (子 Chart 依赖) 渲染结果 → Kubernetes 资源 (Deployment/Service/ConfigMap/StatefulSet) 回退演练中,Chart 结构决定了哪些文件需要被快照和版本化

2.2 Release 管理:版本化的部署实例

Release 是 Helm 的核心抽象,代表一次 Chart 部署的实例。每次 helm install 或 helm upgrade 都会在 Kubernetes 集群中创建一个 Release,并为其分配一个递增的 Revision 号。回退操作的本质就是切换到指定的 Revision。

概念 说明 回退场景中的角色
Release Chart 的一次部署实例,由名称唯一标识 每个日志平台环境(生产/预发)对应一个 Release
Revision Release 的版本号,从 1 开始递增 回退目标由 Revision 号指定(如回退到 rev=3)
Release History 存储所有历史 Revision 的元数据和 values 快照数据来源于 Release History 中的记录
Release Status deployed / failed / superseded / pending-install 等 回退前需确认当前 Release 状态为 deployed
注意:Helm 默认保留最近 256 个 Revision。在长时间运行的日志平台中,建议通过 --history-max 参数控制保留数量,避免 etcd 存储膨胀影响快照回退性能。
Release Revision 链与回退路径 Rev 1 v1.0.0 Rev 2 v1.1.0 Rev 3 v2.0.0 (故障) Rev 4 v2.1.0 Rev 5 v2.2.0 helm rollback my-release 2 回退操作将 Release 状态恢复到指定 Revision 的 Chart 模板和 values 组合 Rev 3 为故障版本,回退到 Rev 2 后,Rev 3 标记为 superseded

2.3 核心命令:install / upgrade / rollback

这三个命令构成了 Helm 部署与回退的完整闭环。在日志平台拓扑图回退演练中,rollback 命令是直接触发回退动作的入口,而 install 和 upgrade 则负责创建和更新 Release 历史。

2.3.1 helm install — 创建初始 Release

命令格式:
helm install [RELEASE_NAME] [CHART] [flags]

# 示例:部署日志平台到 logging 命名空间
helm install logging-platform ./logging-chart \
  --namespace logging \
  --values prod-values.yaml \
  --set global.env=production
  • RELEASE_NAME:用户指定的 Release 名称,全局唯一。
  • CHART:Chart 路径或仓库引用。
  • --values / --set:覆盖默认 values,用于注入环境特定配置。
  • 安装成功后,Revision 号从 1 开始。

2.3.2 helm upgrade — 更新 Release 到新版本

命令格式:
helm upgrade [RELEASE_NAME] [CHART] [flags]

# 示例:升级日志平台组件镜像版本
helm upgrade logging-platform ./logging-chart \
  --namespace logging \
  --set image.tag=v2.1.0 \
  --reuse-values
参数 作用 回退演练注意事项
--reuse-values 复用上一次的 values,仅应用本次 --set 变更 避免未指定的 values 被重置为 Chart 默认值
--reset-values 重置 values 为 Chart 默认值再应用 --set 谨慎使用,可能导致配置漂移
--atomic 升级失败时自动回滚到上一个 Revision 演练中可开启以模拟自动回退场景
--timeout 等待资源就绪的超时时间(默认 5m) 日志平台组件多,建议设置为 10m 以上

2.3.3 helm rollback — 回退到指定 Revision

命令格式:
helm rollback [RELEASE_NAME] [REVISION] [flags]

# 示例:回退日志平台到 Revision 2
helm rollback logging-platform 2 \
  --namespace logging \
  --wait \
  --timeout 10m
  • REVISION:目标 Revision 号,可通过 helm history RELEASE_NAME 查看。
  • --wait:等待所有资源达到 ready 状态后再返回。
  • --force:强制回退,跳过某些校验(生产环境慎用)。
  • 回退后,Helm 会创建一个新的 Revision(如 Rev 6),其内容与目标 Revision 一致。
演练关键命令:
# 查看 Release 历史
helm history logging-platform -n logging

# 查看指定 Revision 的 values 和模板
helm get values logging-platform --revision 2 -n logging
helm get manifest logging-platform --revision 2 -n logging

# 执行回退
helm rollback logging-platform 2 -n logging --wait

2.4 命令执行流程与状态转换

理解 install → upgrade → rollback 之间的状态转换,有助于在拓扑图回退演练中准确判断当前 Release 所处的阶段。

Helm 命令状态转换流程 pending-install helm install 执行中 deployed 安装/升级成功 pending-upgrade helm upgrade 执行中 failed 升级/回退失败 rollback 成功 → 回到 deployed failed 状态可通过 rollback 恢复到上一个 deployed Revision
回退演练中的命令组合:
# 1. 查看当前 Release 状态
helm status logging-platform -n logging

# 2. 查看历史 Revision 及对应的 Chart 版本
helm history logging-platform -n logging

# 3. 执行回退到指定 Revision
helm rollback logging-platform 2 -n logging --wait --timeout 10m

# 4. 验证回退结果
helm status logging-platform -n logging
kubectl get pods -n logging -l app.kubernetes.io/instance=logging-platform