我正在使用 Terraform 中的 helm 将
argocd
安装到我的 Kubernetes 集群中,如下所示:
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"
version = "3.27.1"
create_namespace = false
namespace = kubernetes_namespace.ns_argocd.0.metadata.0.name
depends_on = [kubernetes_namespace.ns_argocd]
}
它工作得非常好,我可以创建应用程序、部署资源等等。但是,如果我尝试运行
terraform destroy
,命名空间 argocd
的删除就会陷入状态 terminating
。这是因为 argocd 命名空间中定义的应用程序未正确删除,我必须采取一些解决方法来手动删除它,主要是从定义中删除终结器。
有没有办法在删除命名空间时运行
destroy
命令会删除argocd
命名空间中定义的应用程序?
我也遇到过同样的问题,我发现解决这个问题的唯一方法是在销毁 ArgoCD 本身之前明确销毁应用程序。我创建了一个 bash 脚本,如下所示:
#!/bin/bash
set -eu
# remove apps deployed by argocd
terraform destroy -auto-approve -target kubectl_manifest.apps_dev
terraform destroy -auto-approve -target kubectl_manifest.apps_staging
terraform destroy -auto-approve -target kubectl_manifest.apps_prod
terraform destroy -auto-approve -target kubernetes_namespace.complex_app
# remove argocd itself
terraform destroy -auto-approve -target kubernetes_namespace.argocd
# destroy everything else
terraform destroy -auto-approve
注意我知道 Terraform 不应该这样使用。