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。
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 仓库。两者是独立的网络路径。
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 镜像仓库地址的位置。