1. Helm 基础回顾:架构、Chart 结构与 Release 生命周期

在深入日志平台根因定位之前,必须先夯实 Helm 的核心概念。Helm 是 Kubernetes 的包管理器,它将应用及其依赖打包为 Chart,通过模板化与参数化实现可重复的部署。本节从架构、Chart 结构和 Release 生命周期三个维度进行回顾。

1.1 Helm 架构:Tiller 已死,v3 直连 API

Helm v3 移除了服务端组件 Tiller,客户端直接通过 kubeconfig 与 Kubernetes API Server 交互。这一变化大幅简化了安全模型与部署流程。

架构要点: Helm v3 客户端 → kubeconfig → Kubernetes API Server → 创建/更新/删除资源对象。不再需要集群内 Tiller 服务,权限控制回归 RBAC。
Helm v3 架构图 Helm v3 架构图 Helm 客户端 (CLI) kubeconfig K8s API Server 说明: • 无 Tiller:Helm v3 直接与 API Server 通信,无需集群内服务端。 • 权限继承:使用当前 kubeconfig 的 RBAC 权限,不再需要 Tiller 的 ServiceAccount。 • 简化运维:升级、回滚、删除操作全部由客户端驱动。

1.2 Chart 结构:标准化的应用包

一个 Helm Chart 是遵循特定目录结构的文件集合。理解每个文件和目录的职责,是编写和调试 Chart 的基础。

路径 / 文件 必需 说明
Chart.yaml 是 Chart 元数据:名称、版本、apiVersion、描述、依赖等。
values.yaml 是 默认配置值,供模板引用。用户可通过 --set 或自定义 values 文件覆盖。
templates/ 是 Go 模板文件目录,渲染后生成 Kubernetes 资源清单(Deployment、Service、ConfigMap 等)。
charts/ 否 子 Chart 依赖目录,存放被依赖的 Chart 包。
crds/ 否 自定义资源定义(CRD)目录,Helm 在安装时优先安装 CRD。
templates/NOTES.txt 否 安装成功后输出的提示信息,如访问地址、默认密码等。
templates/_helpers.tpl 否 模板辅助函数定义,通过 define 和 template 复用逻辑。
实战提示: 在日志平台场景中,values.yaml 通常包含 Elasticsearch 副本数、Loki 存储配置、Fluentd 日志源路径等参数。合理组织 values 层级结构,能大幅提升 Chart 的可维护性。

1.3 Release 生命周期管理

Release 是 Chart 的一次部署实例。Helm 通过 Release 记录(存储在 Secret 中)追踪每次操作,支持安装、升级、回滚和删除。

Release 生命周期状态机 Release 生命周期状态机 pending-install deployed pending-upgrade failed pending-rollback uninstalled 说明:每个 Release 记录包含 revision 编号、Chart 版本、values 快照和操作时间戳,支持回滚到任意历史 revision。

1.4 核心命令速查

以下命令覆盖 Release 生命周期的关键操作,在日志平台排障时经常使用。

# 安装 Chart(生成 Release)
helm install my-release ./log-platform -f values-prod.yaml

# 升级 Release(创建新 revision)
helm upgrade my-release ./log-platform --set replicaCount=3

# 查看 Release 历史
helm history my-release

# 回滚到指定 revision
helm rollback my-release 2

# 卸载 Release(保留历史记录)
helm uninstall my-release

# 查看 Release 状态
helm status my-release
注意: helm uninstall 默认会删除 Release 记录。如需保留历史用于审计,可使用 --keep-history 标志。在日志平台根因定位场景中,保留历史有助于追溯配置变更。

1.5 小结