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修改的规则)都不会被改动。
具体工作流程总结
- 读取当前目录的
kustomization.yaml,获取资源列表、镜像替换规则等配置。 - 加载
resources字段指定的所有Kubernetes资源文件(如Deployment、Service等)。 - 根据
images规则,对所有资源中的spec.template.spec.containers[*].image字段进行匹配替换。 - 将所有处理后的资源YAML合并成一个完整的输出流,传给kubectl应用到集群。
内容的提问来源于stack exchange,提问作者Raz Buchnik
相关产品推荐
相关产品推荐

