删除命名空间卡在 "Terminating" 状态

Deleting namespace was stuck at "Terminating" State

我想删除在 kubernetes 中创建的命名空间。 我执行的命令:

kubectl delete namespaces devops-ui

但是这个过程花费的时间太长(~20 分钟)并且还在计算中。

在检查 minikube 仪表板时,一个 pod 仍然存在,但没有被删除,它处于终止状态。

有什么解决办法吗?

请先使用以下命令删除 pods

kubectl delete pod  pod_name_here --grace-period=0 --force --namespace devops-ui 

现在删除命名空间

kubectl delete namespaces devops-ui
  1. 当您删除命名空间时,它会触发删除该命名空间内的所有实体
  2. 您可以 运行 "kubectl get all -n namespace-name" 并查看命名空间中所有组件的状态
  3. 理想情况下,最好等待所有 pods 被彻底删除(而不是使用 --grace-period=0 强制删除 pod:这只会删除 pod 的 etcd 记录 - 但是相应的容器可以是 运行ning)

参考:https://kubernetes.io/docs/tasks/administer-cluster/namespaces/

一些 CRD 有终结器,这将防止命名空间终止

示例来自此处 https://github.com/kubernetes/kubernetes/issues/60807#issuecomment-408599873

@ManifoldFR , I had the same issue as yours and I managed to make it work by making an API call with json file .
kubectl get namespace annoying-namespace-to-delete -o json > tmp.json
then edit tmp.json and remove"kubernetes"

curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://kubernetes-cluster-ip/api/v1/namespaces/annoying-namespace-to-delete/finalize

注意 - 使用这个 https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/ - 如果你是 运行 测试集群并且需要获得 cluster-api 访问权限

在我的例子中,它抛出了持有的资源(在默认命名空间中)

    {
        "type": "NamespaceContentRemaining",
        "status": "True",
        "lastTransitionTime": "2020-10-09T09:35:11Z",
        "reason": "SomeResourcesRemain",
        "message": "Some resources are remaining: cephblockpools.ceph.rook.io has 2 resource instances, cephclusters.ceph.rook.io has 1 resource instances"
      },
      {
        "type": "NamespaceFinalizersRemaining",
        "status": "True",
        "lastTransitionTime": "2020-10-09T09:35:11Z",
        "reason": "SomeFinalizersRemain",
        "message": "Some content in the namespace has finalizers remaining: cephblockpool.ceph.rook.io in 2 resource instances, cephcluster.ceph.rook.io in 1 resource instances"
      }
    ]