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 中的组件副本数、镜像标签、存储类等参数与拓扑图节点属性一一对应,便于回退时精准还原。
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 存储膨胀影响快照回退性能。
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 所处的阶段。
回退演练中的命令组合:
# 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