k8s强制删除pod、svc、namespace(Terminating)驱逐pod,coredns

张开发
2026/4/9 19:53:23 15 分钟阅读

分享文章

k8s强制删除pod、svc、namespace(Terminating)驱逐pod,coredns
k8s强制删除pod、svc、namespace(Terminating)一:强制删除pod1、命令加参方法:2、循环删除非运行状态下的pod二:强制删除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状态podetcd报错六、docker overaly2占用巨量空间内容删除七、k8s调度之容器亲和性八、报错Readiness probe failed九、清除未使用镜像,卷,网络,容器1、自行删除镜像,容器2、docker 命令3、时间任务定时清理十、docker镜像容器消失现象:解决:十一、coredns解决访问外网?添加hosts web主机记录十二、网络cni0错误十三、k8s 日志审计进阶十四、coredns问题十五、获取本地k8s所有资源类型保存为yaml文件十六、k8s起audit审计api十七、kube-proxy / iptables 异常或未同步十八、Service 缓存旧的 Pod IP(Endpoint 还在)十九、DNS解析偶尔失败二十、调整pod上限(默认:110)1、查看kubelet.service文件的路径2、确认配置文件方法一:直接修改config.yaml文件添加以下行方法二、建议方法一3、重启kubelet生效二十一、k8s的三种探针存活探针(livenessProbe)就绪探针(readinessProbe)启动探针(startupProbe)检测方式如果名称空间、pod、pv、pvc全部处于“Terminating”状态时,此时的该名称空间下的所有控制器都已经被删除了,之所以出现pod、pvc、pv、ns无法删除,那是因为kubelet 阻塞,有其他的资源在使用该namespace,比如CRD等,尝试重启kubelet,再删除该namespace 也不好使。正确的删除方法:删除pod– 删除pvc — 删除pv -- 删除名称空间一:强制删除pod1、命令加参方法:加参数 --force --grace-period=0,grace-period表示过渡存活期,默认30s,在删除POD之前允许POD慢慢终止其上的容器进程,从而优雅退出,0表示立即终止PODkubectl delete pod your-pod-name -n name-space --force --grace-period=0 kubectl patch pod xxx -n xxx -p '{"metadata":{"finalizers":null}}' kubectl -n namespace exec -it POD -c CONTAINER -- COMMAND kubectl describe pod -n kubesphere-system openpitrix-import-job-lkfdm kubectl delete pod -n namespace $(kubectl get pods -n namespace | grep Evicted | awk '{print $1}') --force --grace-period=0 kubectl delete pod -n namespace $(kubectl get pods -n namespace | grep Completed | awk '{print $1}') --force --grace-period=02、循环删除非运行状态下的pod# 获取非 Running 状态的 Pod 信息,并遍历删除 kubectl get pod-A-owide|grep-v Runn|grep-v NAME|whileread-rnamespacepod rest;doecho"正在删除 Pod: $namespace/$pod"kubectldeletepod-n"$namespace""$pod"done二:强制删除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##设置默认sc取消改falsekubectl patch storageclass managed-nfs-storage-p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'三、强制删除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 -A2、查看Terminating namespace中的finalizer。kubectl get ns kubesphere-system -o yaml3、导出json格式到文件kubectl get ns kubesphere-system -o json tmp.json4、编辑tmp.josn,删除finalizers 字段的值5行 : 5dd5、开启proxy:8001端口kubectl proxy5注:(按顺序无需注意这一步)如果不用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" --insecure6、新开窗口、调用8001–apicurl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/kubesphere-system/finalize7、确认namespace删除四:重启deploy的方式:1. 有yaml文件的重启方式kubectl replace --force -f xxx.yaml2. 没有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 -五:驱逐pod1、 设置节点不可调用。kubectl cordon 192.168.220.1312、驱逐podkubectl drain 192.168.220.131 --delete-local-data --ignore-daemonsets --force3、可调度kubectl uncordon 192.168.220.1314、删除evicted状态podkubectl -n kube-system get pods | grep -i evicted | awk '{print$1}'|xargs kubectl -n kube-system delete podsetcd报错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 list etcdctl --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=ta

更多文章