k8s强制删除pod、svc、namespace(Terminating)

如果名称空间、pod、pv、pvc全部处于“Terminating”状态时,此时的该名称空间下的所有控制器都已经被删除了,之所以出现pod、pvc、pv、ns无法删除,那是因为kubelet 阻塞,有其他的资源在使用该namespace,比如CRD等,尝试重启kubelet,再删除该namespace 也不好使。

正确的删除方法:删除pod–> 删除pvc —> 删除pv --> 删除名称空间

一:强制删除pod

1、命令加参方法:

加参数 --force --grace-period=0,grace-period表示过渡存活期,默认30s,在删除POD之前允许POD慢慢终止其上的容器进程,从而优雅退出,0表示立即终止POD

kubectl delete pod  -n  --force --grace-period=0

kubectl patch pod xxx -n  xxx -p '{"metadata":{"finalizers":null}}'

二:强制删除pv、pvc

直接删除k8s etcd数据库中的记录!

# 删除 namespace下的pod名为pod-to-be-deleted-0
    export ETCDCTL_API=3 
etcdctl del /registry/pods/default/pod-to-be-deleted-0
# 删除需要删除的
    etcdctl del /registry/namespaces/NAMESPACENAME

命令,将PV的状态设置为“released”。

kubectl patch pv xxx -p '{"metadata":{"finalizers":null}}'
kubectl patch pvc xxx -p '{"metadata":{"finalizers":null}}'
kubectl delete pv my-pv

三、强制删除ns,以namespace:kubesphere-system为例

1、以下强制删除也不好使:

kubectl delete ns kubesphere-system --force --grace-period=0

kubectl get namespace my-namespace -o json | kubectl delete -f -  (未实验)

2、最终解决方法:

1)查看处于“Terminating”状态的namespace:

kubectl get ns -A

k8s强制删除pod、svc、namespace(Terminating)_第1张图片

2、查看Terminating namespace中的finalizer。

kubectl get ns kubesphere-system -o yaml

k8s强制删除pod、svc、namespace(Terminating)_第2张图片

3、导出json格式到文件

kubectl get ns kubesphere-system -o json >tmp.json

4、编辑tmp.josn,删除finalizers 字段的值

5行 : 5dd
k8s强制删除pod、svc、namespace(Terminating)_第3张图片

5、开启proxy:8001端口

kubectl proxy

在这里插入图片描述

5注:

如果不用Proxy 模式, 要想用curl直接访问API,则需要自带密码认证信息:

APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d ":" | tr -d " ")
SECRET_NAME=$(kubectl get secrets | grep ^default | cut -f1 -d ' ')
TOKEN=$(kubectl describe secret $SECRET_NAME | grep -E '^token' | cut -f2 -d':' | tr -d " ")
 
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure

6、新开窗口、调用8001–api

curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/kubesphere-system/finalize

k8s强制删除pod、svc、namespace(Terminating)_第4张图片

7、确认namespace删除

k8s强制删除pod、svc、namespace(Terminating)_第5张图片

你可能感兴趣的:(kubernetes,linux,容器)