You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kustomize如何定位Deployment YAML文件及GKE部署中的镜像修改?

Kustomize 修改镜像与工作原理详解

1. Kustomize 怎么找到Deployment的YAML文件?

Kustomize不会盲目扫描目录里的所有文件,它核心依赖当前目录下的kustomization.yaml配置文件。这个文件里的resources字段会明确列出需要处理的所有Kubernetes资源文件路径(比如./deploy/deployment.yaml),Kustomize只会加载这里指定的资源,包括Deployment的YAML。

2. 它如何确定要修改哪个文件中的镜像?

kustomize edit set image这条命令,本质是在kustomization.yaml里添加或更新images字段的镜像替换规则,不会直接修改Deployment原文件。

比如你执行的命令:

./kustomize edit set image gcr.io/PROJECT_ID/IMAGE:TAG=gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA

会在kustomization.yaml里生成类似这样的配置:

images:
- name: gcr.io/PROJECT_ID/IMAGE
  newTag: $GITHUB_SHA

当执行kustomize build时,它会遍历所有resources里指定的资源,只要资源里的镜像名和规则中的旧镜像名(gcr.io/PROJECT_ID/IMAGE:TAG)匹配,就会自动替换成新的镜像地址(带SHA的版本)。不管这个镜像在哪个Deployment或者其他资源(比如StatefulSet)里,只要匹配就会替换。

3. 是不是搜索文件后直接修改并应用?

完全不是。Kustomize的工作模式是**“构建输出,不修改原文件”**:

  • 执行kustomize build .时,它会加载所有指定的资源文件,结合kustomization.yaml里的所有规则(镜像替换、字段修改、资源合并等),在内存中生成最终的Kubernetes YAML内容。
  • 然后通过管道| kubectl apply -f -把生成的YAML传给kubectl去应用,原有的Deployment文件和kustomization.yaml(除了刚才edit set image修改的规则)都不会被改动。

具体工作流程总结

  1. 读取当前目录的kustomization.yaml,获取资源列表、镜像替换规则等配置。
  2. 加载resources字段指定的所有Kubernetes资源文件(如Deployment、Service等)。
  3. 根据images规则,对所有资源中的spec.template.spec.containers[*].image字段进行匹配替换。
  4. 将所有处理后的资源YAML合并成一个完整的输出流,传给kubectl应用到集群。

内容的提问来源于stack exchange,提问作者Raz Buchnik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:40:17