ninety wordpress插件湖南網(wǎng)站seo地址
目錄
1.Pod啟動(dòng)階段(相位 phase)
1.1?phase的可能狀態(tài)
2.Pod故障排除步驟
3.總結(jié)
1.Pod啟動(dòng)階段(相位 phase)
Pod 創(chuàng)建完之后,一直到持久運(yùn)行起來(lái),中間有很多步驟,也就有很多出錯(cuò)的可能,因此會(huì)有很多不同的狀態(tài)。
一般來(lái)說(shuō),pod 這個(gè)過(guò)程包含以下幾個(gè)步驟:
(1)調(diào)度到某臺(tái) node 上。kubernetes 根據(jù)一定的優(yōu)先級(jí)算法選擇一臺(tái) node 節(jié)點(diǎn)將其作為 Pod 運(yùn)行的 node
(2)拉取鏡像
(3)掛載 存儲(chǔ)卷 等
(4)容器運(yùn)行起來(lái)。如果有健康檢查,會(huì)根據(jù)檢查的結(jié)果來(lái)設(shè)置其狀態(tài)。
1.1?phase的可能狀態(tài)
Pending:表示APIServer創(chuàng)建了Pod資源對(duì)象并已經(jīng)存入了etcd中,但是它并未被調(diào)度完成(比如還沒有調(diào)度到某臺(tái)node上),或者仍然處于從倉(cāng)庫(kù)下載鏡像的過(guò)程中。(pod調(diào)度失敗、拉取鏡像失敗、掛載存儲(chǔ)卷失敗)
Running:Pod已經(jīng)被調(diào)度到某節(jié)點(diǎn)之上,并且Pod中所有容器都已經(jīng)被kubelet創(chuàng)建。至少有一個(gè)容器正在運(yùn)行,或者正處于啟動(dòng)或者重啟狀態(tài)(也就是說(shuō)Running狀態(tài)下的Pod不一定能被正常訪問(wèn))。
Succeeded:有些pod不是長(zhǎng)久運(yùn)行的,比如job、cronjob,一段時(shí)間后Pod中的所有容器都被成功終止,并且不會(huì)再重啟。需要反饋任務(wù)執(zhí)行的結(jié)果。
Failed:Pod中的所有容器都已終止了,并且至少有一個(gè)容器是因?yàn)槭〗K止。也就是說(shuō),容器以非0狀態(tài)退出或者被系統(tǒng)終止,比如 command 寫的有問(wèn)題。
Unknown:表示無(wú)法讀取 Pod 狀態(tài),通常是 kube-controller-manager 無(wú)法與 Pod 通信。Pod 所在的 Node 出了問(wèn)題或失聯(lián),從而導(dǎo)致 Pod 的狀態(tài)為 Unknown
如何刪除 Unknown 狀態(tài)的 Pod ?
- 從集群中刪除有問(wèn)題的 Node。使用公有云時(shí),kube-controller-manager 會(huì)在 VM 刪除后自動(dòng)刪除對(duì)應(yīng)的 Node。 而在物理機(jī)部署的集群中,需要管理員手動(dòng)刪除 Node(kubectl delete node <node_name>)。
- 被動(dòng)等待 Node 恢復(fù)正常,Kubelet 會(huì)重新跟 kube-apiserver 通信確認(rèn)這些 Pod 的期待狀態(tài),進(jìn)而再?zèng)Q定刪除或者繼續(xù)運(yùn)行這些 Pod。
- 主動(dòng)刪除 Pod,通過(guò)執(zhí)行 kubectl delete pod <pod_name> --grace-period=0 --force 強(qiáng)制刪除 Pod。但是這里需要注意的是,除非明確知道 Pod 的確處于停止?fàn)顟B(tài)(比如 Node 所在 VM 或物理機(jī)已經(jīng)關(guān)機(jī)),否則不建議使用該方法。特別是 StatefulSet 管理的 Pod,強(qiáng)制刪除容易導(dǎo)致腦裂或者數(shù)據(jù)丟失等問(wèn)題。
Worker Node 節(jié)點(diǎn)宕機(jī),請(qǐng)說(shuō)明一下 Pod 的驅(qū)逐流程
- K8S 的節(jié)點(diǎn)生命控制器在超出一定時(shí)間后不能與 kubelet 通信,就會(huì)標(biāo)記該節(jié)點(diǎn)為 unknown 狀態(tài),并自動(dòng)創(chuàng)建 NoExecute 污點(diǎn)防止調(diào)度器調(diào)度新 Pod 到該節(jié)點(diǎn)。
- 而那些已經(jīng)在 Node 節(jié)點(diǎn)上運(yùn)行的 Pod,在經(jīng)過(guò)容忍度時(shí)間后(默認(rèn)tolerationSeconds: 300),會(huì)被 NoExecute 污點(diǎn)自動(dòng)驅(qū)逐。
2.Pod故障排除步驟
查看Pod事件
kubectl describe TYPE NAME_PREFIX ?
查看Pod日志(Failed狀態(tài)下)
kubectl logs <POD_NAME> [-c Container_NAME] [–p]
進(jìn)入Pod(狀態(tài)為running,但是服務(wù)沒有提供)
kubectl exec –it <POD_NAME> bash
kubectl debug -it <POD_NAME> --image=busybox:1.28 --target=${container_name}
查看集群信息
kubectl get nodes
發(fā)現(xiàn)集群狀態(tài)正常
kubectl cluster-info
查看kubelet日志發(fā)現(xiàn)
journalctl -xefu kubelet
3.總結(jié)
pod啟動(dòng)過(guò)程
1.contorller-manager管理的控制器創(chuàng)建pod資源
2.scheduler調(diào)度器根據(jù)調(diào)度算法選擇最適合的node節(jié)點(diǎn)調(diào)度pod
3.kubelet拉取鏡像
4.kubelet掛載存儲(chǔ)卷
5.kubelet創(chuàng)建并運(yùn)行容器
6.kubelet根據(jù)容器探針的探測(cè)結(jié)果設(shè)置pod狀態(tài)
pod生命周期的5種狀態(tài)
Pending:pod已經(jīng)創(chuàng)建,但是pod還處于包括未完成調(diào)度到node節(jié)點(diǎn)或還處于在拉取鏡像的過(guò)程中或存儲(chǔ)卷掛載失敗的情況
Running:pod所有容器都已被創(chuàng)建,且至少有一個(gè)容器正在運(yùn)行
Succeeded:pod所有容器都已經(jīng)成功退出,且不再重啟
Failed:所有容器都已經(jīng)退出且至少有一個(gè)容器是異常退出的
Unknown:master節(jié)點(diǎn)的controller-mannger無(wú)法獲取到pod的狀態(tài)信息,通常是因?yàn)閙aster節(jié)點(diǎn)的apiserver與pod所在節(jié)點(diǎn)的kubelet通信失聯(lián)導(dǎo)致的