2. Kustomize 基础回顾:工作原理、kustomization.yaml 结构与常用指令

在进入资源配额约束下的缓存性能测试之前,必须牢固掌握 Kustomize 的核心机制。Kustomize 并非模板引擎,而是一种 声明式资源叠加(Overlay) 工具,它通过纯 YAML 的补丁与合并策略,在不破坏上游资源的前提下实现环境差异化定制。本章将拆解其工作原理、配置文件结构以及三个最常用的指令。

2.1 Kustomize 工作原理

Kustomize 的核心思想是 “Base + Overlay = 最终资源”。它不修改原始 YAML,而是通过读取 kustomization.yaml 中声明的资源路径、补丁和配置,在内存中构建出一份完整的、经过定制的 Kubernetes 资源清单。

关键原则: Kustomize 是纯客户端操作,不依赖集群 API Server,所有合并与补丁逻辑在本地完成。这使得它非常适合 CI/CD 流水线中的预渲染环节。
Kustomize 工作原理:Base + Overlay 叠加流程 Kustomize 工作原理:Base + Overlay 叠加流程 Base 层 deployment.yaml service.yaml kustomization.yaml Overlay 层 patches/ replicas_patch.yaml kustomization.yaml 最终输出 合并后的完整 K8s 资源清单 (YAML) 核心逻辑 Kustomize 读取 Base 的 kustomization.yaml, 然后应用 Overlay 中的 patches 和 replacements, 最终输出一份完整的、环境定制的 YAML 清单。

2.2 kustomization.yaml 结构

kustomization.yaml 是 Kustomize 的入口文件,它声明了所有需要处理的资源、补丁和配置。一个典型的文件结构如下:

# kustomization.yaml 示例
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

# 1. 资源引用
resources:
  - ../base/deployment.yaml
  - ../base/service.yaml
  - ../base/ingress.yaml

# 2. 名称前缀/后缀
namePrefix: prod-
nameSuffix: -v2

# 3. 通用标签
commonLabels:
  app.kubernetes.io/env: production
  app.kubernetes.io/team: sre

# 4. 通用注解
commonAnnotations:
  oncall: "sre-team@company.com"

# 5. 镜像替换
images:
  - name: nginx
    newName: myregistry.com/nginx
    newTag: 1.25.3

# 6. 配置映射生成器
configMapGenerator:
  - name: app-config
    files:
      - config/app.properties

# 7. 补丁(Patches)
patches:
  - path: patches/replicas_patch.yaml
    target:
      kind: Deployment
      name: web-app
结构要点: resources 字段是核心入口,所有被引用的 YAML 文件必须存在。补丁(patches)和替换(replacements)是环境定制的关键,它们通过 JSON Patch 或 Strategic Merge Patch 策略修改资源。

关键字段对比表

字段 作用 典型场景
resources 引用基础资源文件 引入 deployment、service、configmap 等
patches 对资源进行局部修改 调整副本数、修改镜像、添加环境变量
images 批量替换镜像名称和标签 CI/CD 中更新镜像版本
configMapGenerator 从文件或字面量生成 ConfigMap 管理配置文件,避免硬编码
namePrefix 为所有资源名称添加前缀 区分不同环境(dev、staging、prod)
commonLabels 为所有资源添加统一标签 资源分组、成本归属、监控筛选

2.3 常用指令:build, edit, cfg

Kustomize 提供了三个核心指令,覆盖了从构建到配置管理的全流程。在性能测试场景中,build 指令的执行效率直接影响缓存命中率。

2.3.1 kustomize build

build 是最常用的指令,它读取 kustomization.yaml,执行所有叠加和补丁逻辑,最终将完整的资源清单输出到标准输出(stdout)。

# 基本用法:构建当前目录
kustomize build .

# 构建指定目录
kustomize build overlays/production/

# 输出到文件
kustomize build overlays/production/ > final-manifest.yaml

# 与 kubectl 配合使用(无需保存中间文件)
kustomize build overlays/production/ | kubectl apply -f -
性能关注点: 在资源配额约束下,kustomize build 的缓存命中率至关重要。如果每次构建都重新解析所有 Base 和 Overlay 文件,将导致大量 I/O 和 CPU 开销。后续章节将专门测试缓存机制如何优化这一过程。

2.3.2 kustomize edit

edit 指令用于以编程方式修改 kustomization.yaml,适合在 CI/CD 脚本中动态调整配置,避免手动编辑 YAML 文件。

# 添加资源引用
kustomize edit add resource ../base/deployment.yaml

# 添加补丁
kustomize edit add patch --path patches/replicas_patch.yaml --kind Deployment

# 设置镜像
kustomize edit set image nginx=myregistry.com/nginx:1.25.3

# 设置名称前缀
kustomize edit set nameprefix prod-

2.3.3 kustomize cfg

cfg 指令是 Kustomize 的配置管理子命令,用于处理 ConfigMap 和 Secret 的生成与验证。在性能测试中,它常用于验证生成的配置是否符合预期。

# 验证 kustomization.yaml 的语法
kustomize cfg validate .

# 列出所有生成的 ConfigMap
kustomize cfg list-setters .

# 创建 ConfigMap 生成器
kustomize cfg create-setter name --value "my-app" --description "应用名称"
Kustomize 三大指令工作流 Kustomize 三大指令工作流 kustomization.yaml kustomize build kustomize edit kustomize cfg build 输出最终清单;edit 修改配置;cfg 管理 ConfigMap/Secret 生成

2.4 小结:Kustomize 在性能测试中的角色

在《资源配额约束下 Kustomize 缓存命中性能测试》课程中,Kustomize 的 build 指令是性能测试的核心对象。理解其工作原理和 kustomization.yaml 的结构,是后续分析缓存命中率、资源消耗和优化策略的基础。接下来的章节将深入探讨缓存机制如何影响 kustomize build 的执行效率。