云计算运维

Windows Server 2003 - Windows Server 2019 系统工具,Linux系统脚本,Mysql、Nginx、PHP、Redis、K8S、Seafile、Weblogic 、Jenkins、DNS、DHCP、FTP、IIS、Zookeeper、Rabbitmq、Oracle、Tomcat、Mavrn等服务搭建维护,请关注我.

Kubernetes命名空间Terminating状态不释放


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

成功截图如下

  • 分享:
评论
还没有评论
    发表评论 说点什么