Kubernetes无法强制删除处于Terminating状态的InnoDB集群Pod
Kubernetes无法强制删除处于Terminating状态的InnoDB集群Pod
嗨,我太懂这种头疼的感觉了——明明已经用--force参数强制删除Pod,结果它们还是顽固地卡在Terminating状态,完全没动静。先把你遇到的具体现象理清楚,方便排查:
首先,你执行kubectl get all看到的Pod状态:
kubectl get all NAME READY STATUS RESTARTS AGE pod/mycluster-0 0/2 Terminating 0 15h pod/mycluster-1 0/2 Terminating 0 15h pod/mycluster-2 0/2 Terminating 0 15h
尝试强制删除后:
kubectl delete --force --all pods Warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "mycluster-0" force deleted pod "mycluster-1" force deleted pod "mycluster-2" force deleted
结果再次查看,Pod依然卡着不动:
kubectl get all NAME READY STATUS RESTARTS AGE pod/mycluster-0 0/2 Terminating 0 16h pod/mycluster-1 0/2 Terminating 0 16h pod/mycluster-2 0/2 Terminating 0 16h
这种情况在InnoDB集群里挺常见的,大概率是Pod的终结器(Finalizer)没被正常处理,或者节点上的kubelet和API Server状态不同步。给你几个实用的解决步骤,按顺序试试:
第一步:清理Pod的终结器
InnoDB集群通常会给Pod添加自定义终结器,用来保证集群状态一致性。如果集群异常,这些终结器可能会卡住删除流程。先查看Pod的终结器信息:kubectl describe pod mycluster-0 | grep Finalizers要是看到有终结器存在,直接手动移除:
kubectl patch pod mycluster-0 -p '{"metadata":{"finalizers":null}}'把
mycluster-0换成另外两个Pod的名字,重复执行一般就能解决问题。第二步:检查节点状态
如果清理终结器没用,看看Pod所在节点是不是出问题了:kubectl get nodes要是节点显示NotReady,说明kubelet可能离线或异常。可以先尝试重启节点上的kubelet服务:
# 登录到对应节点后执行 systemctl restart kubelet要是节点彻底不可用,先驱逐节点上的其他Pod再删除节点:
kubectl drain <node-name> --ignore-daemonsets kubectl delete node <node-name>第三步:终极强制删除
前面的方法都不行的话,直接跳过kubelet确认,强制删除API Server中的Pod记录:kubectl delete pod mycluster-0 --grace-period=0 --force注意:这个命令只是删除了API Server里的Pod对象,节点上的Pod进程可能还在运行,需要手动登录节点用
ps找到进程后kill掉。
备注:内容来源于stack exchange,提问作者eastwater
相关产品推荐
相关产品推荐

