2. Kustomize 基础回顾:工作原理、kustomization.yaml 结构与常用指令
在进入资源配额约束下的缓存性能测试之前,必须牢固掌握 Kustomize 的核心机制。Kustomize 并非模板引擎,而是一种 声明式资源叠加(Overlay) 工具,它通过纯 YAML 的补丁与合并策略,在不破坏上游资源的前提下实现环境差异化定制。本章将拆解其工作原理、配置文件结构以及三个最常用的指令。
2.1 Kustomize 工作原理
Kustomize 的核心思想是 “Base + Overlay = 最终资源”。它不修改原始 YAML,而是通过读取 kustomization.yaml 中声明的资源路径、补丁和配置,在内存中构建出一份完整的、经过定制的 Kubernetes 资源清单。
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 "应用名称"
2.4 小结:Kustomize 在性能测试中的角色
在《资源配额约束下 Kustomize 缓存命中性能测试》课程中,Kustomize 的 build 指令是性能测试的核心对象。理解其工作原理和 kustomization.yaml 的结构,是后续分析缓存命中率、资源消耗和优化策略的基础。接下来的章节将深入探讨缓存机制如何影响 kustomize build 的执行效率。