Namespace 无法删除一直处于 Terminating 状态

一、问题

删除 namespace 失败,通过 kubectl 查看 namespace 状态,发现其一直处于 terminating 状态。

$ kubectl get ns kjf121e-acvip
NAME            STATUS        AGE
kjf121e-acvip   Terminating   33m

二、处理思路

1.检查该 namespace 中是否还存在未被清理的资源

# 修改 {namespace} 为实际的 namespace
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n {namespace}

如果依然存在资源未被删除,需等待其被清理。如果没有残留资源,却依然处于 Terminating 状态,可参照后续步骤执行。

2.检查是否存在未 Ready 的 APIService

$ kubectl get APIService
NAME                                   SERVICE                      AVAILABLE   AGE
v1.                                    Local                        True        28h
v1.apps                                Local                        True        28h
v1.authentication.k8s.io               Local                        True        28h
v1.authorization.k8s.io                Local                        True        28h
...
v1beta1.extensions                     Local                        True        28h
v1beta1.metrics.k8s.io                 kube-system/metrics-server   True        28h
v1beta1.networking.k8s.io              Local                        True        28h
v1beta1.node.k8s.io                    Local                        True        28h
...
v2beta2.autoscaling                    Local                        True        28h

三、手动删除namespace

如果处理完未被删除的资源后,问题仍存在,则可按照如下步骤操作:

注意!!万万不可在没有执行上面的检查的情况下执行以下步骤

1.导出 namespace json 文件

 # 替换其中的 <terminating-namespace> 为实际 namespace
 $ kubectl get namespace <terminating-namespace> -o json >tmp.json

2.编辑上一步导出的 json 文件,去除 spec.finalizers 配置

 {
      "apiVersion": "v1",
      "kind": "Namespace",
      "metadata": {
          "creationTimestamp": "2018-11-19T18:48:30Z",
          "deletionTimestamp": "2018-11-19T18:59:36Z",
          "name": "<terminating-namespace>",
          "resourceVersion": "1385077",
          "selfLink": "/api/v1/namespaces/<terminating-namespace>",
          "uid": "b50c9ea4-ec2b-11e8-a0be-fa163eeb47a5"
      },
      "spec": {
         "finalizers": []
      },
      "status": {
          "phase": "Terminating"
      }
  }

3.本地通过 kubectl proxy 开启代理,便于无认证访问 apiserver api

$ kubectl proxy

4.执行如下命令来删除 namespace,其中 tmp.json 为第一步中导出的 json 文件,<terminating-namespace> 需替换为实际的 namespace

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

5.重新查看 namespace 是否被删除,此时应该已经删除了。

四、根本原因

有以下三种原因导致 namespace 处于 terminating 状态:

  1. namespace 中还存在资源未被删除
  2. 存在未 Ready 的 APIService

参考链接

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CN-FuWei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值