1

避免业务中断,K8s节点故障排查攻略,速来围观!

 1 month ago
source link: https://www.51cto.com/article/783522.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

避免业务中断,K8s节点故障排查攻略,速来围观!

作者:didiplus 2024-03-12 15:47:12
本教程将引导您深入了解和排查K8S节点故障的常见问题,以确保集群的可靠性和稳定性。

Kubernetes是一个强大的容器编排系统,但在运行过程中,节点故障可能会发生。本教程将引导您深入了解和排查K8S节点故障的常见问题,以确保集群的可靠性和稳定性。

987a79a9296f979e5ab672c370c78c9f5ae5c2.png

步骤一:检查节点状态

首先,通过以下命令检查节点的整体状态:

kubectl get nodes

执行上述命令,输入结果如下图:

453788f9035135ec37259609c37abb468aae42.png

确认所有节点都处于Ready状态。如果有节点处于NotReady状态,可以运行以下命令查看详细信息:

kubectl describe node <node-name>

例如,现在要查看node01节点详细信息,如下图:

28e716c76721db9e5674112a7b7072b86ea9f2.png

步骤二:查看事件

使用以下命令查看集群中的事件,以了解任何异常情况:

kubectl get events

执行上述命令,输入结果如下图:

12f9d07145f955a75959443eaebb32d4a565fb.png

步骤三:系统资源检查

确保节点上的系统资源(CPU、内存、磁盘空间)足够。可以通过以下命令检查:

kubectl describe node <node-name> | grep Allocated -A 5

执行上述命令,输入结果如下图:

3931d04981b275bf8b93682454c15d61a51e12.png

步骤四:网络排查

(1) 确认网络插件状态

检查网络插件是否正常运行。常见的网络插件有Flannel、Calico等。使用以下命令检查:

kubectl get pods -n kube-system

执行上述命令,输入结果如下图:

83927ba47331cbe3fc6209b0b6947a8cdc3771.png

(2) 检查节点之间的网络连通性

确认节点之间的网络通信是否正常。使用工具如ping、traceroute等检查节点间的连通性。例如,下图是从node01节点ping控制节点controlplane

987967820b1cefabe299758e6413779ec61a4a.png

步骤五:检查容器运行时状态

如果使用Docker作为容器运行时,请检查Docker容器的状态:

docker ps
docker logs <container-id>

如果使用了containerd为容器运行时,请检查containerd容器的状态,如下图:

c229d382754a5078725496708178ab3ba56733.png

步骤六:检查kubelet服务状态

确保kubelet服务在节点上正常运行。运行以下命令:

systemctl status kubelet

检查输出以确保kubelet服务处于激活(active)状态。如果kubelet服务未激活,运行以下命令重启kubelet服务:

sudo systemctl restart kubelet

步骤七:重启故障节点

在确保不影响生产负载的情况下,可以尝试重启故障的节点。使用以下命令:

kubectl drain <node-name> --ignore-daemonsets
kubectl delete node <node-name>

通过以上步骤,您应该能够诊断并解决Kubernetes节点故障的常见问题。请注意,在进行操作之前,确保已经了解操作的潜在风险,并在非生产环境中进行测试。保持对K8S集群的定期监控,以及学习并熟练使用K8S提供的工具,将有助于更好地管理和维护您的容器化应用程序。

9CKA真题

(1) 真题截图:

d6e08bf73a9b99cc57f97938f832db2a0195e2.png

(2) 中文解析

切换 k8s 集群环境: kubectl config use-context wk8sTask:一个名为 wk8s-node-0 的节点状态为 NotReady,让其他恢复至正常状态,并确认所有的更改开机自动完成。

  • 可以使用以下命令,通过 ssh 连接到 wk8s-node-0 节点:ssh wk8s-node-0
  • 可以使用以下命令,在该节点上获取更高权限:sudo -i

(3) 官方参考文档

安全地清空一个节点:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/safely-drain-node/

(4) 做题解答

切换k8s集群环境:

kubectl config use-context wk8s

SSH登录到wk8s-node-0 的节点,并获取最高权限:

ssh wk8s-node-0
sudo -i

检查kubelet的状态:

systemctl status kubelet

重启kubelet,并设置开机自启动:

systemctl enable kubelet
systemctl status kubelet

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK