解决删除 Kubernetes 中 namespace 时一直处于 Terminating 状态
后知后觉 暂无评论

过程

使用命令删除 namespace,大写 NAMESPACE 为要删除的命名空间:

kubectl delete namespace NAMESPACE

然后发现一直处于 “Terminating”状态,使用强制删除再试一次:

kubectl delete namespace NAMESPACE --force --grace-period=0

稍等片刻还是一样。

解决

这时就无法通过常见渠道进行删除,需要使用特殊方法。

方法一

执行命令编辑命名空间配置

kubectl edit namespace NAMESPACE

可以看到以下类似内容,示例名是一个名为 lanucher 的命名空间:

apiVersion: v1
kind: Namespace
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"name":"lanucher"}}
  creationTimestamp: "2023-12-22T11:55:22Z"
  finalizers:
  - finalizers.kubesphere.io/namespaces
  name: lanucher
  resourceVersion: "9782441"
  selfLink: /api/v1/namespaces/lanucher
  uid: 
spec:
  finalizers:
  - kubernetes
status:
  phase: Active

删除第十行的键 - finalizers.kubesphere.io/namespaces

保存退出即可。

方法二

如果上述方法中没有所在行,那么就需要调用 API 进行删除。

  1. 将命名空间配置内容导出:

    kubectl get namespace NAMESPACE -o json | tee tmp.json
  2. 修改 JSON 配置,删除以下部分:

    {
     "spec": {
         "finalizers": [
             "kubernetes"
         ]
     },
    
     "status": {
         "phase": "Terminating"
     }
    }
  3. 开启代理暴露请求接口

    kubectl proxy
  4. 调用接口进行强制删除(使用上一步暴露的接口地址)

    curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/NAMESPACE/finalize

附录

参考链接

如果遇到问题或者对文章内容存疑,请在下方留言,博主看到后将及时回复,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。