Flux自动部署至AWS EKS异常求助:ECR镜像推送后无自动部署
排查Flux CD镜像更新后未自动触发EKS部署的问题
以下是针对你的场景(ECR镜像推送后Flux未自动部署,仅手动kubectl rollout restart deployment "app-name" -n flux-system生效)的核心排查步骤:
1. 镜像检测与自动化更新链验证
- 检查
ImageRepository资源:执行kubectl get imagerepositories -n flux-system,确认目标ECR仓库的STATUS为Ready,查看事件是否有镜像推送的接收记录。如果无记录,说明ECR未配置EventBridge通知将镜像事件发送给Flux的image-reflector-controller。 - 验证
ImagePolicy规则:执行kubectl get imagepolicies -n flux-system,确保STATUS为Ready,且spec.filterTags匹配你推送的镜像标签(比如语义化版本、前缀过滤)。如果LatestImage字段未更新到新推送的镜像,说明镜像过滤规则不匹配。 - 检查
ImageUpdateAutomation配置:确认spec.update.path指向Git仓库中部署清单的镜像字段(如deployment.spec.template.spec.containers[0].image),执行kubectl get imageupdateautomations -n flux-system查看LAST RUN时间是否在镜像推送后更新,同时检查Git仓库是否有Flux自动提交的镜像标签变更记录。
2. Git同步与Kustomization配置检查
- 确认
GitRepository同步周期:spec.interval需设置合理值(如1m),确保Flux能及时拉取ImageUpdateAutomation提交的Git变更。执行kubectl get gitrepositories -n flux-system查看LAST SYNC时间。 - 验证
Kustomization资源:- 确保
spec.interval小于等于GitRepository的同步周期,spec.prune和spec.force开启。 - 检查
spec.images字段是否正确映射镜像仓库到部署清单的镜像字段,或者是否使用了变量替换(如image: ${ECR_REPO}/app:${TAG})。 - 执行
kubectl get kustomizations -n flux-system查看LAST APPLIED时间,如果未在Git变更后更新,说明Flux未检测到配置变更,可能是Kustomize生成的资源哈希未变化。
- 确保
3. 部署清单与滚动更新触发逻辑
- 检查Deployment配置:确保
spec.template.metadata中添加了fluxcd.io/automated: "true"注解,让Flux自动触发滚动更新。如果缺失,Flux即使更新了镜像字段,也不会触发Deployment重启。 - 验证Kustomize的哈希计算:如果使用Kustomization的
images字段替换镜像,确保spec.postBuild没有禁用哈希计算,否则镜像标签变更后Kustomize生成的资源YAML哈希不变,Flux认为资源无需更新。
4. Flux控制器日志排查
- 查看镜像反射控制器日志:
kubectl logs -n flux-system deployment/image-reflector-controller,排查是否有镜像拉取失败、标签过滤错误的信息。 - 查看镜像自动化控制器日志:
kubectl logs -n flux-system deployment/image-automation-controller,检查是否有Git提交失败、路径匹配错误的记录。 - 查看Kustomize控制器日志:
kubectl logs -n flux-system deployment/kustomize-controller,确认是否有同步Git配置时的权限问题、清单格式错误。
内容的提问来源于stack exchange,提问作者Sanmeet Singh
相关产品推荐
相关产品推荐

