k8s强制删除pod、svc、namespace(Terminating)驱逐pod
时间:2024-04-18 12:30:41 来源:网络cs 作者:康由 栏目:建站工具 阅读:
k8s强制删除pod、svc、namespace(Terminating)
一:强制删除pod1、命令加参方法: 二:强制删除pv、pvc三、强制删除ns,以namespace:kubesphere-system为例1、以下强制删除也不好使:2、最终解决方法:1)查看处于“Terminating”状态的namespace:2、查看Terminating namespace中的finalizer。3、导出json格式到文件4、编辑tmp.josn,删除finalizers 字段的值5、开启proxy:8001端口5注:(按顺序无需注意这一步) 6、新开窗口、调用8001--api7、确认namespace删除 四:重启deploy的方式:1. 有yaml文件的重启方式2. 没有yaml文件重启方式2.1 使用scale命令2.2 直接删除重启2.3 使用 "-o yaml"参数导出Pod模板并重建模板(推荐) 五:驱逐pod1、 设置节点不可调用。2、驱逐pod3、可调度4、删除evicted状态pod etcd报错六、docker overaly2占用巨量空间内容删除如果名称空间、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 <your-pod-name> -n <name-space> --force --grace-period=0kubectl 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/《namespace》/《》# 删除需要删除的 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=0kubectl get namespace my-namespace -o json | kubectl delete -f - (未实验)
2、最终解决方法:
1)查看处于“Terminating”状态的namespace:
kubectl get ns -A
2、查看Terminating namespace中的finalizer。
kubectl get ns kubesphere-system -o yaml
3、导出json格式到文件
kubectl get ns kubesphere-system -o json >tmp.json
4、编辑tmp.josn,删除finalizers 字段的值
5行 : 5dd
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
7、确认namespace删除
四:重启deploy的方式:
1. 有yaml文件的重启方式
kubectl replace --force -f xxx.yaml
2. 没有yaml文件重启方式
2.1 使用scale命令
kubectl scale <deployment> --replicas=0 -n {namespace}kubectl scale <deployment> --replicas=1 -n {namespace}
2.2 直接删除重启
此方式只针对使用的deployment对象,并且重启策略为可以重启,则可以尝试删除重启
kubectl delete replicaset {rs_name} -n {namespace}
2.3 使用 "-o yaml"参数导出Pod模板并重建模板(推荐)
kubectl get pod {podname} -n {namespace} -o yaml | kubectl replace --force -f -
五:驱逐pod
1、 设置节点不可调用。
kubectl cordon 192.168.220.131
2、驱逐pod
kubectl drain 192.168.220.131 --delete-local-data --ignore-daemonsets --force
3、可调度
kubectl uncordon 192.168.220.131
4、删除evicted状态pod
kubectl -n kube-system get pods | grep -i evicted | awk '{print$1}'|xargs kubectl -n kube-system delete pods
etcd报错
1 台 master 加入集群后发现忘了修改主机名,而在 k8s 集群中修改节点主机名非常麻烦,将 master 退出集群改名并重新加入集群(前提是用的是高可用集群)。
问题:
k8s现在使用的是etcd v3,必须提供ca、key、cert,否则会出现Error: context deadline exceeded
不加–endpoint参数时,默认访问的127.0.0.1:2379,而使用–endpoint参数时,必须提供ca,key,cert。
Failed to get etcd status for with maintenance client: context deadline exc...code = DeadlineExceded desc = latest balancer error: last connection error: connection closed before server preface received"
查询
etcdctl --write-out=table member listetcdctl --endpoints=$ETCD_ENDPOINTS \--cert=/srv/etcd/etc/ssl/etcd.crt \--key=/srv/etcd/etc/ssl/etcd.key \--cacert=/srv/etcd/etc/ssl/ca.crt \member list --write-out=table
删除
docker exec -it $(docker ps -f name=etcd_etcd -q) /bin/shetcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key member remove <id>
六、docker overaly2占用巨量空间内容删除
#删除所有未使用的镜像:docker image prune -a#删除未使用的Docker数据卷:docker volume prune¥清理overlay2目录中未使用的文件。使用以下命令列出所有未使用的文件:docker system df#使用以下命令删除所有未使用的文件:docker system prune --all --force --volumes
本文链接:https://www.kjpai.cn/news/2024-04-18/160023.html,文章来源:网络cs,作者:康由,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!
下一篇:返回列表