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

如何在ArgoCD中撤销操作?解决Finalizer导致的同步阻塞问题

问题描述

假设你用ArgoCD将Helm Charts部署到Kubernetes集群,之前运行一切正常,但某个资源配置了Kubernetes的Finalizer机制。当有人删除该资源后,ArgoCD陷入“Progressing”或“Deleting”状态,因为Finalizer限制无法完成删除操作(这是保护AWS IAM这类重要资源的有效机制)。现在想知道是否可以终止ArgoCD当前操作,让它恢复正常同步流程,无需清除Finalizer,通过撤销操作规避潜在后果?

解决方案

当然可以,以下几种方法都能让ArgoCD终止卡住的操作,恢复正常同步,且不会触碰Finalizer:

1. 回滚到之前的稳定版本

  • UI操作:打开ArgoCD控制台,找到对应的应用,点击「Sync」按钮的下拉菜单,选择「Rollback」,挑一个状态为Synced的历史版本确认回滚。这会让ArgoCD直接放弃当前卡住的删除操作,回到之前的正常状态。
  • 命令行操作:
    先查看应用的历史版本:
    argocd app history <你的应用名称>
    
    然后回滚到目标版本:
    argocd app rollback <你的应用名称> <目标版本号>
    

2. 暂停再恢复应用同步

先暂停应用的同步策略,强制终止当前运行的操作:

argocd app set <你的应用名称> --sync-policy none

等ArgoCD停止卡住的流程后,再恢复原来的同步策略(比如自动同步):

argocd app set <你的应用名称> --sync-policy automated

恢复后ArgoCD会重新评估期望状态,不会再执着于之前的删除操作。

3. 手动标记应用为已同步

如果前两种方法没效果,可以直接修改ArgoCD应用的状态,强制标记为已同步:

kubectl patch app <你的应用名称> -n argocd --type merge -p '{"status":{"sync":{"status":"Synced","revision":"<你期望的版本号>"}}}'

这里的版本号可以从应用的历史记录或期望配置中获取,操作后ArgoCD会认为当前状态符合预期,停止尝试删除被Finalizer保护的资源。

注意事项
  • 以上所有操作都不会修改目标资源的Finalizer,完全避免了误删重要资源的风险。
  • 恢复后,ArgoCD会以回滚或标记的版本作为新的期望状态,除非你再次主动触发删除,否则不会再去处理那个被Finalizer卡住的资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:30:45