背景:
直接执行下面的命令删除命名空间ingress-nginx
kubernetes delete namespace ingress-nginx
并不能将命名空间ingress-nginx删除掉
[root@vms41 ~]# kubectl get ns -o wide
NAME STATUS AGE
default Active 7d1h
ingress-nginx Terminating 4m38s
kube-node-lease Active 7d1h
kube-public Active 7d1h
kube-system Active 7d1h
metallb-system Active 110m
[root@vms41 ~]#
解决方法:
这时我们可执行如下步骤来删除这个状态是Terminating的命名空间。
1、NAMESPACE=ingress-nginx
2、kubectl proxy
[root@vms41 ~]# NAMESPACE=ingress-nginx
[root@vms41 ~]#
[root@vms41 ~]# kubectl proxy
3、重新打开一个终端
(1)、安装jq包
yum install jq -y
-bash: jq: 未找到命令
[root@vms41 9-svc]# yum install -y jq
已加载插件:fastestmirror
base | 3.6 kB 00:00:00
docker-ce-stable | 3.5 kB 00:00:00
epel | 4.7 kB 00:00:00
extras | 2.9 kB 00:00:00
kubernetes/signature | 844 B 00:00:00
kubernetes/signature | 1.4 kB 00:00:00 !!!
updates | 2.9 kB 00:00:00
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 jq.x86_64.0.1.6-2.el7 将被 安装
--> 正在处理依赖关系 libonig.so.5()(64bit),它被软件包 jq-1.6-2.el7.x86_64 需要
--> 正在检查事务
---> 软件包 oniguruma.x86_64.0.6.8.2-1.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
..........
已安装:
jq.x86_64 0:1.6-2.el7
作为依赖被安装:
oniguruma.x86_64 0:6.8.2-1.el7
完毕!
[root@vms41 9-svc]# k
(2)、删除命名空间的finalizers相关信息
[root@vms41 9-svc]# kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
[root@vms41 9-svc]#
(3)、删除这个命名空间
[root@vms41 9-svc]#
[root@vms41 9-svc]# curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize
{
"kind": "Namespace",
"apiVersion": "v1",
......
(4)、验证,命名空间ingress-nginx 已经被成功删除
[root@vms41 9-svc]# kubectl get ns -o wide
NAME STATUS AGE
default Active 7d2h
kube-node-lease Active 7d2h
kube-public Active 7d2h
kube-system Active 7d2h
metallb-system Active 126m
[root@vms41 9-svc]#
参考:https://stackoverflow.com/questions/52369247/namespace-stuck-as-terminating-how-do-i-remove-it