天天看點

Kubernetes問題排查|POD啟動失敗

作者:leenhem
Kubernetes問題排查|POD啟動失敗

Kubernetes

介紹

POD提供了一種抽象層,可以在同一節點上運作多個容器,這些容器可以共享相同的IP位址和端口空間,也可以通過共享存儲卷實作資料共享。Kubernetes中的POD是最小的可部署單元,它是由一個或多個容器組成的,一個POD中的容器通常是互相關聯的,它們共享同一個環境并一起工作。

例如:一個Web應用程式POD可能包含一個前端容器和一個後端容器,它們共享同一個網絡命名空間和存儲卷,以實作資料的共享和通信。 在Kubernetes中,POD是一個臨時的執行個體,它可能被重建或者遷移,是以POD不應該被視為持久的實體。相反,Kubernetes叢集中的其他元件(如Deployment、ReplicaSet、StatefulSet等)通常會管理POD的生命周期,并確定在需要時重新啟動或替換POD。

POD啟動失敗原因有以下幾種

鏡像拉取失敗

當 Kubernetes 叢集無法拉取容器鏡像時,POD 就無法啟動。這可能是由于網絡不穩定、鏡像倉庫故障、鏡像版本号錯誤等原因導緻的。可以通過檢查鏡像位址、網絡連接配接等進行排查。

資源不足

如果節點資源不足,POD 就無法啟動。資源可以包括 CPU、記憶體、存儲等。可以通過調整 POD 的資源請求和限制來解決。

容器啟動失敗

當容器的啟動指令錯誤、容器中的應用程式無法啟動或容器中的環境變量配置錯誤時,POD 就無法啟動。可以通過檢視容器日志,來确定容器啟動失敗的原因。

端口沖突

當 POD 中的容器端口與節點或其他 POD 中已有的端口沖突時,容器無法啟動。可以通過檢查端口配置、服務配置等來解決。

配置錯誤

當 POD 的配置檔案中存在錯誤時,POD 就無法啟動。例如标簽選擇器錯誤、挂載目錄錯誤等。可以通過檢查配置檔案來解決。

安全限制

當節點上的安全機制限制了 POD 的啟動時,POD 就無法啟動。例如 SELinux 權限限制、節點防火牆等。可以通過檢查節點安全規則來解決這些問題。

POD啟動失敗ContainerCreating

前面文章中我在新添加的節點上運作Jenkins,看到已經被排程到新節點192.168.81.200上了,但是它的狀态不對是ContainerCreating。在K8s中POD狀态最常見的是ContainerCreating狀态。這種狀态通常發生在Pod中的容器無法啟動或初始化的情況下。

去所在的節點上檢視日志發現問題,是POD在mount資料目錄的時候報錯。

Mar  8 18:15:53 192 kubelet: Output: mount: 檔案系統類型錯誤、選項錯誤、192.168.81.183:/data/k8s_nfs/ops-pvc-jenkins-pvc-6b4e08ab-6f90-4d16-ab49-5d78d224db77 上有壞超級塊、
Mar  8 18:15:53 192 kubelet: 缺少代碼頁或助手程式,或其他錯誤
Mar  8 18:15:53 192 kubelet: (對某些檔案系統(如 nfs、cifs) 您可能需要
Mar  8 18:15:53 192 kubelet: 一款 /sbin/mount.<類型> 助手程式)
Mar  8 18:15:53 192 kubelet: 有些情況下在 syslog 中可以找到一些有用資訊- 請嘗試
Mar  8 18:15:53 192 kubelet: dmesg | tail  這樣的指令看看。           

這就屬于上面總結的幾個原因當中的挂載卷失敗了,Pod中的容器可能無法挂載所需的卷。可以通過檢查卷名稱是否正确、卷是否存在以及通路權限是否正确來解決此問題。

我這個是使用的NFS和StorageClass在Kubernetes中配置持久化存儲,它一種靈活且可靠的解決方案,它可以幫助我們在Kubernetes叢集中輕松地管理和配置持久化存儲,這個方案請參考Kubernetes基于NFS實作持久化存儲。

上面這個報錯是挂載PV指定的目錄錯誤,原因是我們新節點沒有安裝nfs元件,nfs-utils是一個提供NFS用戶端和伺服器的工具集,可以用于挂載NFS共享目錄到本地檔案系統,如果您想在Linux系統上使用NFS協定,那麼您需要安裝nfs-utils軟體包。

以下是在不同的Linux發行版上安裝nfs-utils的方法:

#在Ubuntu/Debian上安裝nfs-utils:
sudo apt-get update
sudo apt-get install nfs-common

#在CentOS/RHEL上安裝nfs-utils:
sudo yum install nfs-utils

#在SUSE上安裝nfs-utils:
sudo zypper install nfs-client           

安裝完成後,過1分鐘就可以看到POD可以成功運作了。

Kubernetes問題排查|POD啟動失敗

POD Running

并且在日志裡也可以看到磁盤卷可以正常建立,鏡像正常下載下傳了。

Kubernetes問題排查|POD啟動失敗

POD啟動過程

繼續閱讀