📋 问题现象

尝试删除 Kubernetes 命名空间后,长时间停留在Terminating状态。

kubectl delete ns <namespacename>
kubectl describe ns <namespacename>

  1. ---
  2. Status: Terminating

🏷 可能原因

通常是因为从集群中删除的这些namespace下存在资源。

🔨 解决方案

删除命名空间的 finalizers

该选项将会快速清除处于终止状态的 namespace,但可能会导致属于该 namespace 的资源留在集群中,因为无法自动删除它们。在 finalizers 数组为空并且状态为终止之后,Kubernetes 将删除命名空间。

  • 打开 任意 Node 节点 终端,为您的 Kubernetes 集群创建一个反向代理。
    kubectl proxy
  1. Starting to serve on 127.0.0.1:8001
  • 打开另一个终端,获取 Namespace 定义的内容

kubectl get namespace kubesphere-system -o json > kubesphere-system.json

  • 将 finalizers 数组置为空,并重新保存文件。
  1. "spec": {
  2. "finalizers": [
  3. ]
  4. },
  • 执行以下命令去除 finalizers
    curl -X PUT --data-binary @kubesphere-system.json http://localhost:8001/api/v1/namespaces/kubesphere-system/finalize -H "Content-Type: application/json" --header "Authorization: Bearer $TOKEN" --insecure

删除处于 Terminating 状态的其他资源(pod 等)

以删除 pod 为例

强制删除--force --grace-period=0

kubectl -n $namespace delete pod $pod --force --grace-period=0