解决同一节点上所有pod都Terminating的排查思路。问题:kubectl的客户端和kubernetes的服务器之间版本问题。

问题发现:查看pod时,意外发现所有pod都显示Terminating,但在此之前并没有执行删除操作。

同一节点上所有pod都无法正常running说明是节点出现了故障,所以先查看节点信息

kubectl describe node wn51

kubelet stopped posting node status,发现报错是kubelet的问题

于是查看kubelet的服务状态:

systemctl status kubelet

 Process: 1939179 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=1/FAILURE)
   Main PID: 1939179 (code=exited, status=1/FAILURE)

错误信息:ExecStart: 这是 kubelet 服务的启动命令,(code=exited, status=1/FAILURE): 这个信息表明,kubelet 进程(PID 1939179)启动失败并退出了,退出状态码是 1 


查看最近的kubelet运行日志:

sudo journalctl -xe -u kubelet

之后将报错信息复制给chat老师,看一下chat老师提供的分析结果。

chat老师给出的解决方案:

说明有可能是kubelet的版本问题,查看一下版本

kubectl version

发现问题:

问题在于kubectl的客户端和kubernetes的服务器之间版本超出了偏差范围。


解决方法:

显示了所有可用版本的 kubelet

apt-cache madison kubelet

安装对应版本的kubelet

 sudo apt-get install kubelet=1.22.4-00

问题解决

错误原因:

可能是不小心升级了kubelet的版本,导致把所有的pod都删除了。


上面仅更新了kubelet的版本,下面将进一步更新kubectl的版本:

查看kubectl version

发现kubectl的版本依然是1.26.0

1,在当前目录下下载1.22.4版本的kubectl

curl -LO "https://dl.k8s.io/release/v1.22.4/bin/linux/amd64/kubectl"

2,下载完成后,需要确保 kubectl 二进制文件具有执行权限。执行以下命令

chmod +x ./kubectl

3,找到现有的文件,并进行替换

 which kubectl

发现原本的kubectl位置在:/usr/bin/kubectl

sudo rm /usr/bin/kubectl  #删除该文件

替换

sudo mv ./kubectl /usr/bin/kubectl

4,再次输入指令查看版本

成功将kubectl的版本降为1.22.4

### 回答1: 在 Kubernetes 集群中删除所有处于 Terminating 状态的 Pod,可以使用以下命令: ``` kubectl delete pod --field-selector=status.phase=Terminating ``` 请注意,这将删除所有处于 Terminating 状态的 Pod,并且无法撤消。因此,应谨慎使用此命令。 ### 回答2: Kubernetes(K8s)是一种用于自动化部署、扩展和管理容器化应用程序的开源平台。要删除所有处于Terminating(终止)状态的Pod,可以使用以下语句: ``` kubectl get pods --field-selector=status.phase=Terminating -o json | kubectl delete -f - ``` 该语句使用了kubectl命令,并结合了一些参数和标志来执行特定的操作。 - `kubectl get pods`:获取当前集群中的所有Pod。 - `--field-selector=status.phase=Terminating`:使用字段过滤器,仅返回状态为TerminatingPod。 - `-o json`:输出格式为JSON,以便用于后续的操作。 - `|`:管道命令符,将前一个命令的输出作为后一个命令的输入。 - `kubectl delete -f -`:从标准输入中读取JSON文件,并根据其内容删除对应的资源。 这样,执行该语句后,Kubernetes将会删除所有处于Terminating状态的Pod。 需要注意的是,使用该语句删除Pod时,确保你有足够的权限执行操作,并且在执行前仔细确认一次,以免误删除正在使用或重要的Pod。同时,建议根据具体情况调整语句,以确保只删除目标Pod。 ### 回答3: 要删除所有Terminating状态的pod,可以使用以下命令: kubectl delete pod --all --grace-period=0 --force 这个命令中的参数含义如下: - "kubectl delete pod":删除pod的命令 - "--all":指定要删除所有的pod - "--grace-period=0":设置pod的终止期为0,即立即终止 - "--force":强制删除pod,即使pod处于Terminating状态 通过使用这个命令,所有处于Terminating状态的pod都会被立即删除,不会等待额外的终止期。 需要注意的是,执行此命令可能会导致数据丢失或应用程序中断,因此在执行之前请谨慎确认。另外,删除操作是不可逆的,无法恢复被删除的pod,所以请确保操作的可行性和必要性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值