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

1.1 Helm 整体架构

Helm 是 Kubernetes 生态中的包管理器,负责将应用打包为 Chart,并通过模板引擎生成 Kubernetes 资源清单,最终部署到集群中。Helm v3 采用客户端-only 架构,不再依赖服务端组件 Tiller。

核心组件: Helm CLI(客户端) + Kubernetes API Server(服务端) + Chart 仓库(存储与分发)
Helm v3 架构图 Helm v3 架构图 Helm CLI helm install / upgrade Chart 仓库 OCI / 索引仓库 Kubernetes API Server 资源创建 / 更新 / 删除 Kubernetes 集群 Pod / Service / ConfigMap ... helm repo add / pull Chart 下载 / 缓存

1.2 Chart 结构详解

一个标准的 Helm Chart 是一个目录,包含以下核心文件和子目录:

文件/目录 用途 是否必须
Chart.yaml Chart 元数据:名称、版本、描述、API 版本等 是
values.yaml 默认配置值,供模板引用 是
templates/ Go 模板文件,生成 Kubernetes 资源清单 是
charts/ 子 Chart 依赖(手动或通过 helm dependency 管理) 否
crds/ 自定义资源定义(CRD),在模板渲染前安装 否
README.md Chart 使用说明 推荐
.helmignore 打包时忽略的文件模式 否
排查要点: 故障排查时优先检查 Chart.yaml 中的 apiVersion(v2 为 Helm 3 格式)、templates/ 下的语法错误、以及 values.yaml 中缺失的必填字段。

1.3 Release 生命周期

Release 是 Chart 的一次部署实例,每个 Release 都有唯一的名称和版本号。Helm 通过 Release 记录(存储在 Secret 中)追踪每次操作。

Release 生命周期状态机 Release 生命周期状态机 pending-install deployed failed pending-upgrade superseded uninstalled helm install → pending-install → deployed/failed | helm upgrade → pending-upgrade → deployed/superseded/failed

Release 状态转换的关键操作:

  • helm install:创建 Release,状态从 pending-install 变为 deployed 或 failed。
  • helm upgrade:创建新版本 Release,旧版本变为 superseded,新版本进入 pending-upgrade 最终变为 deployed 或 failed。
  • helm rollback:回滚到某个 superseded 版本,使其重新变为 deployed。
  • helm uninstall:Release 变为 uninstalled,但历史记录保留(默认)。

1.4 Tiller 与 Helm v3 区别

Helm v2 依赖集群内组件 Tiller,Helm v3 彻底移除 Tiller,改为直接与 Kubernetes API Server 交互。这一变化对安全性和架构有深远影响。

对比维度 Helm v2(Tiller) Helm v3(无 Tiller)
架构 客户端 + 服务端 Tiller 纯客户端,直接调用 API Server
权限模型 Tiller 拥有集群级权限,存在安全风险 使用当前 kubeconfig 用户权限,遵循 RBAC
Release 存储 ConfigMap(默认)或 Secret Secret(默认),支持自定义存储后端
命名空间隔离 Tiller 跨命名空间管理 Release Release 严格绑定到命名空间
Chart 格式 apiVersion v1(旧格式) apiVersion v2(新格式,支持库 Chart)
依赖管理 requirements.yaml + requirements.lock Chart.yaml 中 dependencies 字段 + Chart.lock
CRD 处理 需手动管理或使用 crd-install 钩子 支持 crds/ 目录自动安装
OCI 支持 不支持 原生支持 OCI 镜像仓库存储 Chart
迁移注意: 从 Helm v2 迁移到 v3 时,务必使用 helm 2to3 插件转换 Release 存储和 Chart 格式。直接使用 v3 管理 v2 遗留的 Release 会导致数据不一致。

1.5 关键命令速查

以下命令在故障排查中高频使用:

# 查看 Release 状态
helm status my-release -n my-namespace

# 查看 Release 历史版本
helm history my-release -n my-namespace

# 渲染模板但不安装(调试语法错误)
helm template my-release ./mychart -f custom-values.yaml

# 检查 Chart 依赖
helm dependency list ./mychart

# 获取 Release 的 values
helm get values my-release -n my-namespace

# 获取 Release 的 manifest
helm get manifest my-release -n my-namespace

# 回滚到指定版本
helm rollback my-release 2 -n my-namespace
故障排查起点: 遇到安装失败时,先执行 helm template 检查模板渲染是否正常,再执行 helm install --dry-run --debug 查看 API Server 返回的错误信息。