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 Chart 模板渲染流程 Chart.yaml 元数据定义 values.yaml 默认配置值 templates/ Go 模板文件 Helm 模板引擎 渲染 + 校验 Kubernetes 资源 NetworkPolicy / Deployment / Service helm install / helm template 触发渲染
关键命令: 使用 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 合并结果。