專案

一般

配置概況

Pod的生命週期

Pod按照預先定義好的生命週期,起始於 Pending 階段,如果Pod中至少有一個主要容器正常啟動,則進入 Running 階段,之後取決於Pod中是否有容器以失敗狀態結束而進入 Succeeded 或者 Failed 階段。在一個Pod的生命週期中,只會被調度一次,一旦被K8s調度(分派)到某個節點上,Pod就會一直在該節點上運行,直到Pod停止或被終止。

在Pod運行期間,K8s跟蹤不同容器的狀態,必要時 kubelet 能夠重啟容器以處理一些失敗的狀況。

Pod壽命

和單獨的應用容器一樣,Pod也被認為是相對臨時存在的實體,Pod被創建時會被賦予一個唯一的UID,並被調度到節點上,在終止(根據重啟策略)或刪除之前會一直運行在該節點上,如果該節點死掉了,調度到該節點上的Pod也會在超時期限結束後被刪除,類似的情況,例如Pod無法在該節點因資源耗盡或者維護期間繼續存活,因此K8s使用了一種較高級的抽象管理方式來管理這些可能隨時會死亡的Pod,稱作PodController(控制器)。

Pod階段

Pod的 status 字段是一個 PodStatus 對象,其中包含一個 phase 字段,下面是 phase 可能的值:

取值 描述
Pending(待定) Pod已被K8s接受,但有一個或多個容器尚未創建或運行,此階段包括等待Pod被調度的時間或是通過網路下載容器Images的時間
Running(運行) Pod已被綁定到某個節點上,同時其中的所有容器以被創建,至少有一個容器正在運行,或者處於啟動、重新啟動的狀態
Succeeded(成功) Pod中的所有容器都已成功終止並且不會在重啟
Failed(失敗) Pod中的所有容器都已終止,並且至少有一個容器是因為失敗而終止,也就是說容器是以非0狀態退出或者被系統終止
Unknown(未知) 某些原因無法取得Pod的狀態,通常可能是因為與Pod所在的主機有網路連接上的問題

Pod狀態

K8s會追蹤Pod中每個容器的狀態,一旦調度器將Pod分派給某個節點,kubelet 就會通過Container runtime開始為Pod創建容器,容器的狀態有三種:Waiting(等待)、Running(運行中)和 Terminated(已終止),要檢查Pod中容器的狀態,你可以使用 kubectl describe pod <pod名稱>,其輸出包含Pod中每個容器的狀態,每種狀態都有特定的含義:

Waiting(等待)

如果容器不處在 RunningTerminated 狀態之一,那就是處在 Waiting,這代表容器仍在運行啟動所需要的操作,例如從某個容器鏡像倉庫中拉取鏡像,或者正在應用相關數據等等,當你使用 kubectl 來查詢包含 Waiting 狀態的容器的Pod時,也會看到一個Reason字段,其中會給出容器處於等待狀態的原因。

Running(運行中)

回到頁首