使用Terraform卸载Helm版Argo CD时Pod与Namespace卡在Terminating状态
Terraform销毁Argo CD时Pod和命名空间卡在Terminating状态的解决方法
问题场景
我通过以下Terraform配置,先单独创建argocd命名空间,再用Helm Chart部署Argo CD:
resource "kubernetes_namespace" "ns_argocd" { metadata { annotations = { name = "argocd" } name = "argocd" } } resource "helm_release" "argocd" { name = "argocd" repository = "https://argoproj.github.io/argo-helm" chart = "argo-cd" namespace = kubernetes_namespace.ns_argocd.metadata.0.name create_namespace = false version = "5.13.1" depends_on = [kubernetes_namespace.ns_argocd] }
由于处于测试阶段,我需要多次执行销毁重建操作,但每次运行terraform destroy都会超时,原因是Pod和命名空间卡在Terminating状态(详情如下)。目前我只能通过kubectl delete [pod] -n argocd --force手动强制删除Pod和命名空间。请问是否可以通过配置Helm values文件中的参数来避免这个问题?
命名空间状态:
NAME STATUS AGE argocd Terminating 3h58m default Active 4h4m kube-node-lease Active 4h4m kube-public Active 4h4m kube-system Active 4h4m
Pod状态:
NAME READY STATUS RESTARTS AGE argocd-application-controller-0 1/1 Terminating 0 3h55m argocd-applicationset-controller-7bb6d6d68c-p52j7 1/1 Terminating 0 3h55m argocd-dex-server-6bc5f5689c-ps6wk 1/1 Terminating 0 3h55m argocd-notifications-controller-57bd8dbc87-msdnw 1/1 Terminating 0 3h55m argocd-redis-77df65946d-fhb46 1/1 Terminating 0 3h55m argocd-repo-server-6984b7475d-b2625 1/1 Terminating 0 3h55m argocd-server-548dffcdcc-nbrhc 1/1 Terminating 0 3h55m
解决方案:Helm Values配置优化
以下是几个可在Argo CD Helm values中配置的参数,能有效避免销毁时资源卡住:
1. 缩短Pod终止宽限期
部分Argo CD组件默认终止宽限期较长,或优雅终止逻辑等待过久。可针对各组件调整terminationGracePeriodSeconds,让Kubernetes更快终止Pod:
applicationController: terminationGracePeriodSeconds: 30 repoServer: terminationGracePeriodSeconds: 30 server: terminationGracePeriodSeconds: 30 dex: terminationGracePeriodSeconds: 30 notificationsController: terminationGracePeriodSeconds: 30 redis: terminationGracePeriodSeconds: 10
2. 禁用不必要的Finalizer
Argo CD的application-controller会给资源添加Finalizer,删除时需等待其完成清理。测试环境可临时关闭该功能:
applicationController: extraArgs: - --enable-finalizer=false
注意:关闭Finalizer会影响Argo CD正常的资源清理逻辑,仅建议测试场景使用。
3. 配置Redis优雅关闭
Redis Pod卡住是常见问题,可关闭持久化并调整探针参数,加快销毁速度:
redis: command: - redis-server - --save "" - --appendonly no livenessProbe: enabled: true initialDelaySeconds: 5 periodSeconds: 5 readinessProbe: enabled: true initialDelaySeconds: 5 periodSeconds: 5
Terraform层面补充优化
除了Helm配置,还可在Terraform中调整以下内容:
- 给
helm_release资源延长销毁超时时间,避免Terraform提前报错:resource "helm_release" "argocd" { # 原有配置... timeouts { delete = "10m" } } - 无需额外调整销毁顺序,Terraform会自动反向执行依赖链(先删Helm Release,再删命名空间)。
测试环境应急方案
若上述配置仍无法解决,可在Terraform中添加null_resource,销毁时自动执行强制删除命令:
resource "null_resource" "force_delete_argocd" { depends_on = [helm_release.argocd] provisioner "local-exec" { when = destroy command = "kubectl delete namespace argocd --force --grace-period=0" } }
内容的提问来源于stack exchange,提问作者everspader
相关产品推荐
相关产品推荐

