如何在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
相关产品推荐
相关产品推荐

