3. Helm Chart 基础:核心概念、目录结构、模板引擎与 Values 文件

在 Cilium 网络环境下的性能调优工程中,Helm 是管理 Kubernetes 资源声明与版本控制的核心工具。理解 Helm 的三大核心概念、标准目录布局、模板渲染机制以及 Values 文件的分层设计,是后续进行资源配额调整与性能参数注入的前提。本章将系统梳理这些基础要素,并建立 Helm 与 Cilium 配置之间的映射关系。

3.1 Helm 三大核心概念

Helm 围绕三个抽象层构建:Chart(包定义)、Release(运行实例)、Repository(分发仓库)。三者之间的关系决定了 Helm 如何管理应用生命周期。

概念 定义 在 Cilium 场景中的角色
Chart 一组描述 Kubernetes 资源的模板文件与元数据的集合,以压缩包形式分发。 Cilium 官方 Chart 定义了 DaemonSet、ConfigMap、RBAC 等核心资源模板。
Release Chart 在目标集群中的一次部署实例,每个 Release 拥有独立的名称和版本历史。 同一集群可部署多个 Cilium Release(如 cilium-stable 与 cilium-canary),用于灰度验证性能参数。
Repository Chart 包的远程存储与索引服务,支持版本检索与依赖解析。 Cilium 官方仓库 https://helm.cilium.io/ 提供所有稳定版与预览版 Chart。
实践要点:在性能调优场景中,建议为每个调优参数组合创建独立的 Release,而非反复升级同一 Release。这可以保留历史版本用于回退对比,同时避免 Helm 的升级合并逻辑意外覆盖关键配置。

3.2 Chart 目录结构标准

一个标准的 Helm Chart 目录结构遵循固定约定。Cilium 的 Chart 结构在此基础上增加了大量与 eBPF、网络策略、Hubble 相关的自定义文件。以下是最小化结构及各目录/文件的作用:

cilium/
├── Chart.yaml              # 元数据:名称、版本、API 版本、依赖
├── values.yaml             # 默认配置值,供模板引用
├── values.schema.json      # (可选)Values 的 JSON Schema 校验文件
├── charts/                 # 子 Chart 依赖(如 etcd-operator)
├── templates/              # Go 模板文件,渲染后生成 Kubernetes 资源
│   ├── _helpers.tpl        # 模板辅助函数(命名、标签、选择器)
│   ├── daemonset.yaml      # Cilium Agent DaemonSet
│   ├── deployment.yaml     # Cilium Operator Deployment
│   ├── configmap.yaml      # Cilium 配置(bpf、ipam、kube-proxy 替换)
│   ├── service.yaml        # Hubble 与 Cilium API Service
│   ├── rbac.yaml           # ClusterRole、ClusterRoleBinding
│   ├── psp.yaml            # PodSecurityPolicy(已弃用但部分集群仍用)
│   └── NOTES.txt           # 安装后的使用说明
└── crds/                   # 自定义资源定义(CNP、CCNP、CEGP 等)
    ├── ciliumnetworkpolicies.yaml
    └── ciliumclusterwidenetworkpolicies.yaml
关键目录说明:
  • templates/:所有 YAML 资源文件必须放在此目录下,Helm 会递归渲染其中的 .yaml、.tpl、.txt 文件。
  • crds/:Cilium 的 CRD 文件放在此目录,Helm 会在安装时优先应用 CRD,确保自定义资源类型先于资源实例存在。
  • charts/:Cilium 依赖的子 Chart(如 Hubble UI、etcd)在此目录以压缩包形式存放。

3.3 模板引擎与 Values 文件

Helm 使用 Go 模板引擎(text/template)将 Values 数据注入到模板文件中。模板语法包括指令、管道、变量和函数。Values 文件支持多层嵌套结构,Cilium 的 values.yaml 深度可达 5 层以上。

3.3.1 模板语法核心元素

语法 示例 说明
{{ .Values.key }} {{ .Values.global.clusterPoolIPv4PodCIDR }} 引用 Values 中的值,支持点号路径。
{{- if condition -}} {{- if .Values.ipam.mode -}} 条件判断,- 用于去除多余空白。
{{- range $i, $v := . -}} {{- range .Values.extraConfig -}} 遍历列表或字典。
{{ .Values.key | default "fallback" }} {{ .Values.bpf.masquerade | default true }} 管道函数,default 提供缺省值。
{{ include "helperName" . }} {{ include "cilium.fullname" . }} 引用 _helpers.tpl 中定义的命名模板。

3.3.2 Values 文件分层与覆盖机制

Values 的最终值由多层文件合并决定,优先级从低到高为:Chart 内嵌 values.yaml → 依赖 Chart 的 values.yaml → 父 Chart 的 values.yaml → 用户提供的 --values 文件 → --set 命令行参数。在 Cilium 性能调优中,通常使用 --values 指定一个调优专用的 YAML 文件,避免修改 Chart 原始 values.yaml。

常见陷阱:Cilium 的 values.yaml 中部分参数(如 kubeProxyReplacement、ipam.mode)在安装后不可修改,必须通过 helm upgrade 重新部署。如果直接编辑 ConfigMap 而不更新 Release,Helm 会在下次升级时覆盖手动修改。始终通过 Values 文件驱动配置变更。

3.4 Helm 模板渲染与 Cilium 配置映射

以下 SVG 图展示了 Helm 模板引擎如何将 Values 文件中的性能参数注入到 Cilium Agent 的 DaemonSet 模板中,最终生成可部署的 Kubernetes 资源。

Helm 模板渲染流程:Values → 模板 → Kubernetes 资源 Values 文件 bpf.masquerade: true ipam.mode: "cluster-pool" kubeProxyReplacement: "strict" Go 模板引擎 daemonset.yaml configmap.yaml _helpers.tpl Kubernetes 资源 DaemonSet (Agent) ConfigMap (cilium-config) ClusterRole 注入 渲染 Cilium 性能调优参数注入示例 1. values.yaml 定义: bpf: masquerade: true tproxy: false 2. 模板引用:{{ .Values.bpf.masquerade }} → 渲染为 true

3.5 模板辅助函数与命名规范

_helpers.tpl 是模板复用的核心文件。Cilium 的 _helpers.tpl 定义了资源名称生成、通用标签、选择器表达式等函数。以下是最常用的辅助函数及其在性能调优中的用途:

辅助函数 输出示例 调优场景用途
cilium.fullname cilium-7x9k2 确保 DaemonSet Pod 名称唯一,便于日志聚合时按 Release 过滤。
cilium.labels app.kubernetes.io/name: cilium 为资源添加统一标签,配合 Prometheus 选择器精确抓取指标。
cilium.selectorLabels app.kubernetes.io/instance: cilium Service 与 Pod 的匹配选择器,影响 Hubble 流量可视化准确性。
调优技巧:在 _helpers.tpl 中自定义标签(如 performance-profile: low-latency),然后在 Prometheus 的 relabel_configs 中利用该标签区分不同性能配置的 Cilium Agent 实例,实现指标隔离分析。

3.6 Helm 生命周期命令与 Release 管理

掌握以下命令是进行性能调优实验的基础。每个命令对应一个 Release 操作,直接影响集群中 Cilium 的运行状态。

# 安装 Cilium 并指定调优 Values 文件
helm install cilium cilium/cilium \
  --namespace kube-system \
  --values performance-tuning-values.yaml

# 升级 Release 以应用新的性能参数
helm upgrade cilium cilium/cilium \
  --namespace kube-system \
  --values performance-tuning-values.yaml \
  --reuse-values

# 查看当前 Release 的 Values 实际值(用于审计)
helm get values cilium --namespace kube-system

# 查看 Release 的模板渲染结果(调试用)
helm get manifest cilium --namespace kube-system | grep -A 20 "kind: DaemonSet"

# 回滚到上一个版本(性能回归时使用)
helm rollback cilium 1 --namespace kube-system
性能调优注意事项:
  • --reuse-values 会保留之前手动 --set 的参数,如果调优过程中混合使用 --values 和 --set,务必确认最终合并结果。
  • 回滚操作会触发 DaemonSet 滚动更新,导致 Cilium Agent 重启,期间网络策略可能短暂失效。建议在维护窗口执行。
  • 使用 helm get manifest 验证渲染后的 YAML 是否符合预期,特别是 resources.requests 和 resources.limits 字段是否被正确注入。

3.7 本章小结