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

如何让ArgoCD感知镜像更新并同步Kubernetes集群状态?

解决方案:无需提交代码触发ArgoCD更新镜像

针对你遇到的ArgoCD无法感知latest镜像更新、且不想通过提交Kustomization文件变更的问题,以下是几种可行方案:

方案1:使用ArgoCD Image Updater(官方推荐)

ArgoCD Image Updater是专门用于自动检测镜像仓库更新并同步到集群的工具,无需修改Git仓库内容。

配置步骤:

  1. 安装ArgoCD Image Updater:完成工具的集群部署(若尚未安装)。
  2. 给ArgoCD Application添加注解:
    在你的ArgoCD Application资源中添加以下注解,配置镜像跟踪规则:
    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      name: k8s-argocd-app
      annotations:
        # 指定要跟踪的镜像仓库和标签
        argocd-image-updater.argoproj.io/image-list: myapp=[......].dkr.ecr.us-east-1.amazonaws.com/k8s-argocd:latest
        # 设置更新策略为跟踪latest标签的最新镜像
        argocd-image-updater.argoproj.io/myapp.update-strategy: latest
        # 指定拉取ECR镜像的密钥(如果需要)
        argocd-image-updater.argoproj.io/myapp.pull-secret: pullsecret:default/us-east-1-ecr-registry
        # 设置写回方式为直接更新ArgoCD应用,不修改Git仓库
        argocd-image-updater.argoproj.io/write-back-method: argocd
    
  3. 验证配置:
    执行以下命令查看Image Updater的日志,确认是否成功检测到镜像更新:
    kubectl logs -n argocd deployment/argocd-image-updater -f
    

Image Updater会定期轮询ECR仓库,当latest镜像的 digest 发生变化时,自动触发ArgoCD应用同步,滚动更新Pod拉取新镜像。

方案2:在CI流水线中触发ArgoCD同步

在Github Actions流水线完成镜像推送后,直接调用ArgoCD CLI触发应用同步,强制ArgoCD重新校验镜像状态。

配置步骤:

  1. 在Github Secrets中存储ArgoCD凭证:
    添加ARGOCD_SERVER(ArgoCD服务器地址)、ARGOCD_TOKEN(具有同步权限的ArgoCD令牌)到仓库的Secrets中。
  2. 在Github Actions流水线添加同步步骤:
    在镜像推送至ECR的步骤之后,添加以下步骤:
    - name: Install ArgoCD CLI
      run: curl -sSL https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64 -o argocd && chmod +x argocd && sudo mv argocd /usr/local/bin/
    
    - name: Sync ArgoCD App
      run: |
        argocd login ${{ secrets.ARGOCD_SERVER }} --token ${{ secrets.ARGOCD_TOKEN }} --insecure
        argocd app sync k8s-argocd-app --force --prune
    

该方案通过CI主动触发ArgoCD同步,ArgoCD会对比镜像的实际digest与期望状态,发现差异后自动更新Pod。

方案3:使用Kubernetes滚动更新注解(配合ArgoCD忽略注解变更)

如果不想依赖额外工具,可以在CI中给Deployment添加临时注解触发滚动更新,同时配置ArgoCD忽略该注解的差异,避免被回滚。

配置步骤:

  1. 修改ArgoCD Application的忽略规则:
    在Application中添加ignoreDifferences配置,忽略Pod模板注解的变更:
    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      name: k8s-argocd-app
    spec:
      ignoreDifferences:
      - group: apps
        kind: Deployment
        jsonPointers:
        - /spec/template/metadata/annotations
    
  2. 在CI流水线中添加滚动更新命令:
    使用kubectl给Deployment添加重启注解,触发滚动更新:
    - name: Trigger Deployment Rollout
      run: |
        aws eks update-kubeconfig --region us-east-1 --name your-cluster-name
        kubectl patch deployment k8s-argocd-deployment -p '{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt":"'$(date +%Y-%m-%dT%H:%M:%S%z)'"} }}}'
    

由于imagePullPolicy设置为Always,新启动的Pod会拉取ECR中最新的latest镜像。ArgoCD会忽略注解的变更,不会将其回滚到Git中的原始状态。


内容的提问来源于stack exchange,提问作者Stan Loona

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:45:36