Kubernetes命名空间Terminating状态不释放

2023年 5月 4日 56.8k 0

Kubernetes中namespace有两种常见的状态,即Active和Terminating状态,其中Terminating状态一般会比较少见,当对应的命名空间下还存在运行的资源,但该命名空间被删除时才会出现所谓的Terminating状态,这种情况下只要等待Kubernetes本身将命名空间下的资源回收后,该命名空间将会被系统自动删除。

之前k8s集群安装过rancher,后面因为资源使用率的问题进行卸载,突然发现在命名空间中,有几个namespace状态一直是Terminating并且在命名空间下并没有Pod和Deployment

☁  ~  kubectl get ns
NAME                          STATUS        AGE
cattle-dashboards             Terminating   108d
cattle-fleet-system           Terminating   114d
cattle-impersonation-system   Terminating   114d
cattle-monitoring-system      Active        108d
cattle-system                 Terminating   114d
ceph                          Active        111d
cephfs                        Active        113d
default                       Active        114d
kube-node-lease               Active        114d
kube-public                   Active        114d
kube-system                   Active        114d
local                         Active        114d
prometheus                    Active        108d
wu-cephfs                     Active        83d

查看是否有pod未被删除

☁  ~  kubectl get pod,deployment -n cattle-system
No resources found.

但是在某些情况下,即使命名空间下没有运行的资源,但依然无法删除Terminating状态的命名空间的情况,它会一直卡在Terminating状态下。

遇到 NS Terminating几种删除办法

1.使用--force --grace-period=0 强制删除

设置优雅删除时间为0(默认为30s)

☁  ~  kubectl delete ns cattle-system --force --grace-period=0

#cattle-system为命名空间

2.但是大部分时候,这些资源也杀不掉,解决办法是使用原生接口删除

1.获取namespace的详情信息
[root@k8s-01 tmp]# kubectl  get ns cattle-system -o json >cattle-system.json

编辑json文件,删除.metadata.finalizers字段及其内容
删除前

删除后

2.开启k8s apiserver的一个http代理,以免必须带上证书才能访问
[root@k8s-01 tmp]# kubectl proxy --port=8081

#开启请单独打开一个窗口,默认前台执行,不可以退出

3.通过curl json提交接口删除
[root@k8s-01 tmp]# curl -k -H "Content-Type: application/json" -X PUT --data-binary @cattle-system.json  http://127.0.0.1:8081/api/v1/namespaces/cattle-system/finalize

例子: curl -k -H "Content-Type: application/json" -X PUT --data-binary @命名空间.json  http://127.0.0.1:8081/api/v1/namespaces/命名空间/finalize

#将cattle-system.json 以及url中的cattle-system命名空间地址进行替换成对应的命名空间

4.查看是否删除
[root@k8s-01 tmp]# kubectl  get ns
NAME                          STATUS        AGE
cattle-dashboards             Terminating   108d
cattle-fleet-system           Terminating   114d
cattle-impersonation-system   Terminating   114d
cattle-monitoring-system      Terminating   108d
ceph                          Active        112d
cephfs                        Active        114d
default                       Active        114d
kube-node-lease               Active        114d
kube-public                   Active        114d
kube-system                   Active        114d
local                         Active        114d
prometheus                    Active        108d
wu-cephfs                     Active        83d

成功截图如下1665567186222.png

相关文章:

  1. Error: failed to create subPath directory for volumeMount “opt-file” of container “platform-file”
  2. Kubenetes 1.13.5 集群二进制安装
  3. Kubernetes RBAC角色权限控制
  4. Kubernetes 亲和性调度

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论