Kustomize 与 -k 参数
Kustomize 用目录结构和补丁描述多环境差异,不需要模板语法,也不需要在清单里写变量占位符。kubectl 已经内置它:apply、diff、delete 都支持 -k 直接指向某个 overlay 目录。base 存放公共清单,overlay 只写差异,公共部分改一次就能同步到所有环境。
基本信息
| 适用平台 | kubectl 1.21+,内置版本随 kubectl 发布 |
|---|---|
| 入口文件 | 每个目录一个 kustomization.yaml |
| 常用字段 | resources、patches、namePrefix、images、commonLabels |
| 调用方式 | kubectl apply -k <目录> |
| 仅渲染 | kubectl kustomize <目录> |
典型使用场景
- 同一套清单用于测试与生产,只有副本数、镜像标签与资源上限不同
- 给全部资源统一加名称前缀或公共标签,避免与其他团队的对象重名
- 流水线只替换镜像标签:改 images 字段即可,业务清单保持不动
- 发布前先渲染成完整 YAML 做评审并归档,留下可追溯的变更记录
- 把上游开源组件的清单当 base,本地只覆盖必要字段
目录结构
目录结构
k8s/
base/
kustomization.yaml
deployment.yaml
service.yaml
overlays/
prod/
kustomization.yaml
replicas-patch.yamlkustomization 与命令
kustomization 与命令
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../base # 引用公共清单
patches:
- path: replicas-patch.yaml # 只覆盖差异字段
namePrefix: prod- # 统一加前缀避免重名
images:
- name: app
newTag: "1.26.0"渲染与发布
渲染与发布
kubectl kustomize ./k8s/overlays/prod > rendered.yaml # 先渲染审查
kubectl diff -k ./k8s/overlays/prod # 对比集群现状
kubectl apply -k ./k8s/overlays/prod # 确认后再提交常用字段读法
| 字段 | 作用 | 使用提示 |
|---|---|---|
| resources | 引用基础清单或目录 | overlay 里通常指向 ../base |
| patches | 对目标对象做局部修改 | 路径写错可能静默不生效,渲染后要核对 |
| namePrefix | 给所有资源名加前缀 | 先确认名称长度不超过限制 |
| images | 批量替换镜像与标签 | 流水线最常用的注入点 |
| commonLabels | 给全部资源加统一标签 | 注意不要与选择器冲突 |
内置的 Kustomize 版本跟随 kubectl 发布,不同开发机可能渲染出细微差异。CI 中固定 kubectl 版本可以避免本地渲染正常、流水线报错的尴尬。
补丁的字段路径或目标选择器写错时,渲染结果往往只是没改到字段而不报错。渲染后要用文本检索确认目标字段确实变化,再执行发布。