kuberentes 下无法删除命名空间

1. 问题描述

因同事操作失误删除了ingress-nginx命名空间,却一直卡在删除中,状态一直是 Terminating

 2. 解决方法

2.1 方法一:强制删除

kubectl delete ns ingress-nginx  --force --grace-period=0
如删除不掉还是 Terminating

2.2 方法一:调用api servie 删除

kubectl get namespace ingress-nginx -o json > ingress-nginx-ns.json

编辑文件删除其中的spec字段,因为k8s集群是携带认证的

vim ingress-nginx-ns.json

 然后调用api进行删除

可以通过 kubectl proxy 设置 APIServer 的临时 IP 和端口
kubectl proxy --port=8088 

另起一个终端调用api 临时端口删除
curl -k -H "Content-Type:application/json" -X PUT --data-binary @ingress-nginx-ns.json  http://127.0.0.1:8088/api/v1/namespaces/ingress-nginx/finalize

命令解释
curl -k -H "Content-Type:application/json" -X PUT --data-binary @{编辑的json文件} http://127.0.0.1:8081/api/v1/namespaces/命名空间名称/finalize

如还是删除不掉,还是 Terminating

2.3 方法三: etcd数据库删除

2.3.1问题分析:

删除命名空间是kubectl 向apiserver 发送请求删除命名空间, apiserver再把删除操作发送给etcd ,apisever 等待etcd 删除该命名空间。 现结合该流程,我们怀疑是暴力删除命名空间时没有清空命名空间下的资源,导致无法删除命名空间。

现在开始在ETCD数据库中直接删除该命名空间,删除Terminating 的命名空间

2.3.2先查看命名空间

etcdctl  get / --prefix --keys-only |grep /registry/namespaces/ #找到要删除的命名空间 

 2.3.3 删除

etcdctl   del /registry/namespaces/ingress-nginx 

如执行etcdctl需要证书,参考一下命令

export ETCDCTL_API=3
alias edctl ='etcdctl --endpoints=192.168.1.15:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/apiserver-etcd-client.crt --key=/etc/kubernetes/pki/apiserver-etcd-client.key'
查看
edctl get / --prefix --keys-only |grep /registry/namespaces/
删除
edctl  del /registry/namespaces/ingress-nginx 

3. 总结经验:

通过上述分析得到,我们在删除命名空间之前要先清理该命名空间下的资源后再进行操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值