避免業(yè)務(wù)中斷,K8s節(jié)點(diǎn)故障排查攻略,速來圍觀!
Kubernetes是一個(gè)強(qiáng)大的容器編排系統(tǒng),但在運(yùn)行過程中,節(jié)點(diǎn)故障可能會(huì)發(fā)生。本教程將引導(dǎo)您深入了解和排查K8S節(jié)點(diǎn)故障的常見問題,以確保集群的可靠性和穩(wěn)定性。
步驟一:檢查節(jié)點(diǎn)狀態(tài)
首先,通過以下命令檢查節(jié)點(diǎn)的整體狀態(tài):
kubectl get nodes
執(zhí)行上述命令,輸入結(jié)果如下圖:
確認(rèn)所有節(jié)點(diǎn)都處于Ready狀態(tài)。如果有節(jié)點(diǎn)處于NotReady狀態(tài),可以運(yùn)行以下命令查看詳細(xì)信息:
kubectl describe node <node-name>
例如,現(xiàn)在要查看node01節(jié)點(diǎn)詳細(xì)信息,如下圖:
步驟二:查看事件
使用以下命令查看集群中的事件,以了解任何異常情況:
kubectl get events
執(zhí)行上述命令,輸入結(jié)果如下圖:
步驟三:系統(tǒng)資源檢查
確保節(jié)點(diǎn)上的系統(tǒng)資源(CPU、內(nèi)存、磁盤空間)足夠。可以通過以下命令檢查:
kubectl describe node <node-name> | grep Allocated -A 5
執(zhí)行上述命令,輸入結(jié)果如下圖:
步驟四:網(wǎng)絡(luò)排查
(1) 確認(rèn)網(wǎng)絡(luò)插件狀態(tài)
檢查網(wǎng)絡(luò)插件是否正常運(yùn)行。常見的網(wǎng)絡(luò)插件有Flannel、Calico等。使用以下命令檢查:
kubectl get pods -n kube-system
執(zhí)行上述命令,輸入結(jié)果如下圖:
(2) 檢查節(jié)點(diǎn)之間的網(wǎng)絡(luò)連通性
確認(rèn)節(jié)點(diǎn)之間的網(wǎng)絡(luò)通信是否正常。使用工具如ping、traceroute等檢查節(jié)點(diǎn)間的連通性。例如,下圖是從node01節(jié)點(diǎn)ping控制節(jié)點(diǎn)controlplane
步驟五:檢查容器運(yùn)行時(shí)狀態(tài)
如果使用Docker作為容器運(yùn)行時(shí),請檢查Docker容器的狀態(tài):
docker ps
docker logs <container-id>
如果使用了containerd為容器運(yùn)行時(shí),請檢查containerd容器的狀態(tài),如下圖:
步驟六:檢查kubelet服務(wù)狀態(tài)
確保kubelet服務(wù)在節(jié)點(diǎn)上正常運(yùn)行。運(yùn)行以下命令:
systemctl status kubelet
檢查輸出以確保kubelet服務(wù)處于激活(active)狀態(tài)。如果kubelet服務(wù)未激活,運(yùn)行以下命令重啟kubelet服務(wù):
sudo systemctl restart kubelet
步驟七:重啟故障節(jié)點(diǎn)
在確保不影響生產(chǎn)負(fù)載的情況下,可以嘗試重啟故障的節(jié)點(diǎn)。使用以下命令:
kubectl drain <node-name> --ignore-daemonsets
kubectl delete node <node-name>
結(jié)論
通過以上步驟,您應(yīng)該能夠診斷并解決Kubernetes節(jié)點(diǎn)故障的常見問題。請注意,在進(jìn)行操作之前,確保已經(jīng)了解操作的潛在風(fēng)險(xiǎn),并在非生產(chǎn)環(huán)境中進(jìn)行測試。保持對(duì)K8S集群的定期監(jiān)控,以及學(xué)習(xí)并熟練使用K8S提供的工具,將有助于更好地管理和維護(hù)您的容器化應(yīng)用程序。
9CKA真題
(1) 真題截圖:
(2) 中文解析
切換 k8s 集群環(huán)境: kubectl config use-context wk8sTask:一個(gè)名為 wk8s-node-0 的節(jié)點(diǎn)狀態(tài)為 NotReady,讓其他恢復(fù)至正常狀態(tài),并確認(rèn)所有的更改開機(jī)自動(dòng)完成。
- 可以使用以下命令,通過 ssh 連接到 wk8s-node-0 節(jié)點(diǎn):ssh wk8s-node-0
- 可以使用以下命令,在該節(jié)點(diǎn)上獲取更高權(quán)限:sudo -i
(3) 官方參考文檔
安全地清空一個(gè)節(jié)點(diǎn):https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/safely-drain-node/
(4) 做題解答
切換k8s集群環(huán)境:
kubectl config use-context wk8s
SSH登錄到wk8s-node-0 的節(jié)點(diǎn),并獲取最高權(quán)限:
ssh wk8s-node-0
sudo -i
檢查kubelet的狀態(tài):
systemctl status kubelet
重啟kubelet,并設(shè)置開機(jī)自啟動(dòng):
systemctl enable kubelet
systemctl status kubelet