完全卸载 ArgoCD:级联删除与集群环境重置
This content is not available in your language yet.
核心概念:级联删除 (Cascading Deletion)
Section titled “核心概念:级联删除 (Cascading Deletion)”在 GitOps 架构中,如果需要彻底重置测试环境或完全弃用当前的部署方案,我们需要将 ArgoCD 及其部署的所有业务应用一并清理。
ArgoCD 在创建 Application 资源时,默认会注入 resources-finalizer.argocd.argoproj.io 终结器 (Finalizer)。当执行删除操作时,ArgoCD 控制器会根据该终结器,主动向集群发送指令,依次删除该应用所关联的全部底层资源(如 Deployment、Service、ConfigMap 等)。这就是级联删除。
为了实现彻底卸载,我们必须保留这些终结器,并让 ArgoCD 控制器先完成全部业务资源的回收,然后再卸载 ArgoCD 自身组件。
彻底卸载流程 (Teardown Steps)
Section titled “彻底卸载流程 (Teardown Steps)”步骤 1:触发业务资源的级联删除
Section titled “步骤 1:触发业务资源的级联删除”首先,直接删除 argocd 命名空间下的所有 Application 资源。
警告:此操作不可逆。执行后,由 ArgoCD 管理的所有实际业务(如 Portainer、数据库等集群应用)将立即开始停止并被销毁。
kubectl delete applications --all -n argocd步骤 2:监控资源回收进度
Section titled “步骤 2:监控资源回收进度”由于涉及大量底层资源的终止与销毁,该过程可能需要数分钟。通过以下命令实时监控 Application 的状态:
kubectl get applications -n argocd -w当命令输出为空,或提示 No resources found in argocd namespace. 时,表明所有被托管的业务资源已彻底清理完毕。
步骤 3:卸载 ArgoCD 核心组件
Section titled “步骤 3:卸载 ArgoCD 核心组件”业务资源清理完成后,使用当初部署时相同的官方清单反向卸载 ArgoCD 控制器及相关组件:
kubectl delete -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml步骤 4:清理底层全局资源 (CRD 与命名空间)
Section titled “步骤 4:清理底层全局资源 (CRD 与命名空间)”最后,删除遗留的自定义资源定义 (CRD) 和专属命名空间。
1. 删除专属 CRD: (注意:如果集群内还有其他命名空间在使用 ArgoCD,请勿执行此步骤)
kubectl delete crd applications.argoproj.io applicationsets.argoproj.io appprojects.argoproj.io 2>/dev/null2. 删除命名空间:
kubectl delete namespace argocd进阶排障 (Troubleshooting)
Section titled “进阶排障 (Troubleshooting)”如果在上述流程中遇到命令卡死或资源无法删除的情况,请参考以下处理方案:
1. Application 删除卡死
Section titled “1. Application 删除卡死”如果 kubectl delete applications 长时间无响应,通常是因为某些底层资源(如持久化存储卷)无法正常释放,导致 ArgoCD 控制器无法完成终结器逻辑。
可以通过强制移除 Finalizer 来跳过等待:
kubectl get apps -n argocd -o name | xargs -I {} kubectl patch {} -n argocd -p '{"metadata": {"finalizers": null}}' --type merge2. Namespace 状态卡在 Terminating
Section titled “2. Namespace 状态卡在 Terminating”如果最后一步删除 argocd 命名空间时一直卡在 Terminating 状态,说明 Kubernetes API 垃圾回收遭遇死锁。可使用 API 强制注销指令直接清除(需确保已安装 jq 工具):
kubectl get namespace argocd -o json | \ jq '.spec.finalizers = []' | \ kubectl replace --raw "/api/v1/namespaces/argocd/finalize" -f -完成以上步骤后,执行 kubectl get all -A,确认集群内已无相关组件残留,集群状态重置完成。