1. Helm 与 Chart 基础

Helm 是 Kubernetes 生态中最流行的包管理工具,被形象地称为“Kubernetes 的 apt/yum”。它通过 Chart 将一组相关的 Kubernetes 资源(Deployment、Service、ConfigMap 等)打包、版本化、发布和管理。在镜像拉取加速场景中,理解 Helm 的基础概念是配置 CDN 加速的前提。

1.1 Helm 是什么

Helm 的核心价值在于:

  • 模板化部署:通过 Go 模板引擎,将配置参数与资源定义分离,实现一次编写、多环境复用。
  • 版本管理:每次部署生成一个 Release 版本,支持回滚、升级、历史查看。
  • 依赖管理:Chart 可以依赖其他 Chart,自动解析并安装依赖。
  • 仓库分发:通过 Chart Repository 分发和共享 Chart 包。
💡 镜像拉取加速关联点:Helm 本身不直接管理镜像拉取,但 Chart 中的 values.yaml 通常定义镜像地址和拉取策略。通过 CDN 加速镜像拉取,需要在 Chart 中正确配置镜像仓库地址(如 registry-cdn.example.com)和拉取凭证。

1.2 Chart 结构

一个标准的 Helm Chart 目录结构如下:

mychart/
├── Chart.yaml          # Chart 元数据(名称、版本、描述等)
├── values.yaml         # 默认配置值
├── values.schema.json  # (可选)values 的 JSON Schema 校验
├── charts/             # (可选)子 Chart 依赖
├── templates/          # Kubernetes 资源模板
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── _helpers.tpl    # 模板辅助函数
│   └── NOTES.txt       # 安装后的提示信息
└── crds/               # (可选)CRD 定义
文件/目录 作用 镜像加速相关
Chart.yaml 定义 Chart 名称、版本、API 版本、描述等 无直接关联
values.yaml 默认配置,用户可覆盖 通常在此定义 image.repository、image.tag、image.pullPolicy
templates/deployment.yaml Deployment 资源模板 引用 values 中的镜像地址,决定拉取哪个镜像
charts/ 存放依赖的子 Chart 子 Chart 的镜像地址需单独配置
📌 实战要点:在镜像加速场景中,values.yaml 中的 image.repository 字段是修改为 CDN 镜像仓库地址的关键入口。例如将 docker.io/nginx 改为 cdn-registry.example.com/nginx。
Helm Chart 结构关系图 Helm Chart 结构关系图 Chart 根目录 Chart.yaml values.yaml templates/ charts/ deployment.yaml service.yaml _helpers.tpl NOTES.txt 📌 镜像加速关键字段 • values.yaml → image.repository:镜像仓库地址(CDN 加速入口) • values.yaml → image.pullPolicy:拉取策略(Always / IfNotPresent / Never) • deployment.yaml → {{ .Values.image.repository }}:{{ .Values.image.tag }}

1.3 Helm 三大概念:Chart / Release / Repository

Helm 的核心抽象模型围绕三个概念构建:

概念 定义 类比 镜像加速场景角色
Chart 一个预配置的 Kubernetes 资源包,包含模板和默认值 软件安装包(.deb/.rpm) Chart 中定义镜像地址模板
Release Chart 在集群中的一次运行实例,每个 Release 有唯一名称和版本 软件的一个运行进程 每个 Release 可独立配置镜像 CDN 地址
Repository Chart 包的存储和分发仓库(HTTP/HTTPS 服务器) apt 源 / Docker Registry Repository 本身不涉及镜像加速,但可托管 Chart 包
⚠️ 常见误区:Chart Repository 用于分发 Chart 包(YAML 模板),不是 镜像仓库。镜像拉取加速针对的是 Docker Registry(如 docker.io、gcr.io),而非 Chart 仓库。两者是独立的网络路径。
Helm 三大概念关系图 Helm 三大概念关系图 Chart 打包的 Kubernetes 资源 Release Chart 的运行实例 Repository Chart 存储仓库 安装 从仓库拉取 🔁 工作流程 1. 从 Repository 获取 Chart 包(helm repo add / helm fetch) 2. 使用 Chart 在集群中创建 Release(helm install) 3. 每个 Release 独立管理,可升级、回滚、卸载(helm upgrade / rollback / uninstall)

1.4 Helm v3 vs v2

Helm v3 是当前主流版本,与 v2 有重大架构差异。理解这些差异有助于在镜像加速配置中选择正确的 Helm 版本。

对比维度 Helm v2 Helm v3 镜像加速影响
Tiller 需要服务端组件 Tiller(在集群内运行) 移除 Tiller,纯客户端架构 v3 减少集群内组件,降低安全风险
安全模型 Tiller 拥有集群级权限,存在安全隐患 使用用户本地 kubeconfig 权限,更安全 v3 更适合多租户环境
Release 存储 存储在 ConfigMap 中(默认命名空间) 存储在 Secret 中(默认命名空间) v3 默认加密存储敏感信息
CRD 处理 需手动管理 CRD 支持 crds/ 目录自动安装 CRD 无直接关联
Chart 依赖 requirements.yaml + helm dep Chart.yaml 中 dependencies 字段 无直接关联
命名空间作用域 Release 名称全局唯一 Release 名称在命名空间内唯一 v3 支持同名 Release 在不同命名空间
✅ 推荐:所有新项目应使用 Helm v3。v2 已于 2020 年停止维护,且 Tiller 架构在安全审计中常被标记为风险项。本课程所有实战操作均基于 Helm v3。

1.5 快速验证:Helm 环境检查

在开始镜像加速配置前,请确认 Helm 环境就绪:

# 检查 Helm 版本(应 >= v3.8)
helm version --short

# 添加一个测试仓库
helm repo add bitnami https://charts.bitnami.com/bitnami

# 搜索 Chart
helm search repo nginx

# 查看 Chart 中的 values(确认镜像地址字段)
helm show values bitnami/nginx | grep -A5 "image"
💡 输出示例:helm show values 会输出类似 image: registry: docker.io/bitnami/nginx tag: latest 的内容,这就是后续需要替换为 CDN 镜像仓库地址的位置。