3. Helm Chart 基础:Chart 结构、模板引擎、Values 文件与 Release 管理
在深入多租户网络策略之前,必须掌握 Helm 的核心抽象——Chart。Chart 是 Helm 应用的打包格式,它定义了 Kubernetes 资源的模板、默认配置和依赖关系。理解 Chart 的内部结构、模板渲染机制以及 Release 生命周期,是后续编写可复用的网络策略 Chart 的基础。
3.1 Chart 目录结构
一个标准的 Helm Chart 遵循固定的目录布局。下表列出了核心文件和目录的作用:
| 路径 / 文件 | 必需 | 说明 |
|---|---|---|
Chart.yaml |
是 | Chart 元数据:名称、版本、API 版本、描述、关键字等。 |
values.yaml |
是 | 默认配置值,供模板引擎引用。多租户场景下常在此定义租户标识、网络策略参数。 |
templates/ |
是 | 存放 Go 模板文件(.yaml、.tpl),渲染后生成 Kubernetes 资源清单。 |
charts/ |
否 | 子 Chart 依赖(如网络插件、监控组件)。 |
crds/ |
否 | 自定义资源定义(CRD),在模板渲染前安装。 |
templates/NOTES.txt |
否 | 安装成功后输出的使用说明。 |
多租户实践: 在
values.yaml 中为每个租户定义独立的 networkPolicy 块,通过模板循环生成隔离策略,避免重复编写 YAML。
3.2 模板引擎与渲染流程
Helm 使用 Go 模板引擎将 values.yaml 中的值注入到 templates/ 目录下的文件中。核心概念包括:
- 对象引用:
{{ .Values.replicaCount }}从 values 中取值。 - 管道函数:
{{ .Values.image.tag | default "latest" }}提供默认值。 - 控制结构:
range循环遍历列表,if-else条件判断。 - 命名模板:在
_helpers.tpl中定义可复用的模板片段,通过include引入。
下图展示了从 Chart 源文件到 Kubernetes 资源的完整渲染链路:
关键命令: 使用
helm template . --debug 可以在不安装的情况下预览渲染后的 YAML,便于调试网络策略模板。
3.3 Values 文件与作用域
Values 文件支持多层覆盖,这是实现多租户配置隔离的关键机制:
- 全局默认值:
values.yaml中的顶层键。 - 环境覆盖:通过
--values prod.yaml或--set key=value注入。 - 子 Chart 作用域:子 Chart 的 values 需放在父 Chart 的
values.yaml的子Chart名键下。 - 全局键:以
global.为前缀的值可穿透到所有子 Chart。
以下是一个多租户场景下的 values 示例:
# values.yaml
global:
clusterDomain: cluster.local
tenants:
- name: tenant-alpha
namespace: ns-alpha
networkPolicy:
ingress:
- from:
- namespaceSelector:
matchLabels:
tenant: tenant-alpha
- name: tenant-beta
namespace: ns-beta
networkPolicy:
ingress:
- from:
- namespaceSelector:
matchLabels:
tenant: tenant-beta
3.4 Release 管理
Release 是 Chart 的一次部署实例。每次 helm install 或 helm upgrade 都会生成一个新的 Release 版本。核心管理操作包括:
| 命令 | 作用 | 多租户场景示例 |
|---|---|---|
helm install |
首次部署,创建 Release | helm install tenant-alpha ./chart --namespace ns-alpha |
helm upgrade |
更新 Release 配置或 Chart 版本 | helm upgrade tenant-alpha ./chart --set tenants[0].networkPolicy.ingress[0].from[0].namespaceSelector.matchLabels.tenant=tenant-alpha-v2 |
helm rollback |
回滚到历史版本 | 网络策略误更新后快速恢复 |
helm list |
查看当前命名空间下的所有 Release | 确认各租户的 Release 状态 |
helm uninstall |
删除 Release 及其管理的资源 | 租户下线时清理网络策略 |
注意: 多租户环境下,务必为每个租户使用独立的 Release 名称和命名空间。避免在同一个 Release 中管理多个租户的网络策略,否则回滚或升级会影响所有租户。
3.5 模板调试与验证
编写网络策略模板时,推荐使用以下调试手段:
helm lint:检查 Chart 语法和最佳实践。helm template --debug:输出渲染后的 YAML 并显示模板上下文。helm get manifest <release>:查看已安装 Release 的最终资源清单。helm get values <release>:查看当前 Release 使用的 values 合并结果。