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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:51:07