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