pod從創建到最后的創建成功會分別處於不同的階段,在源碼中用PodPhase來表示不同的階段:
運行中(PodRunning):該 Pod 已經綁定到了一個節點上,Pod 中所有的容器都已被創建。至少有一個容器正在運行,或者正處於啟動或重啟狀態。
等待中(PodPending): Pod 已被 Kubernetes 系統接受,但有一個或者多個容器鏡像尚未創建。等待時間包括調度 Pod 的時間和通過網絡下載鏡像的時間,這可能需要花點時間。
創建pod的請求已經被k8s接受,但是容器並沒有啟動成功,可能處在:寫數據到etcd,調度,pull鏡像,啟動容器這四個階段中的任何一個階段,pending伴隨的事件通常會有:ADDED, Modified這兩個事件的產生。
正常終止(PodSucceeded):pod中的所有的容器已經正常的自行退出,並且k8s永遠不會自動重啟這些容器,一般會是在部署job的時候會出現。
異常停止(PodEailed):Pod 中的所有容器都已終止了,並且至少有一個容器是因為失敗終止。也就是說,容器以非0狀態退出或者被系統終止。
未知狀態(PodUnkonwn):出於某種原因,無法獲得Pod的狀態,通常是由於與Pod主機通信時出錯。
api/core/v1
一個pod的完整創建,通常會伴隨着各種事件的產生,k8s種事件的種類總共只有4種:
Added EventType = "ADDED"
Modified EventType = "MODIFIED"
Deleted EventType = "DELETED"
Error EventType = "ERROR"
PodStatus 有一組PodConditions。 PodCondition中的ConditionStatus,它代表了當前pod是否處於某一個階段(PodScheduled,Ready,Initialized,Unschedulable),“true” 表示處於,“false”表示不處於。
PodCondition數組的每個元素都有一個類型字段和一個狀態字段。
類型字段 PodConditionType 是一個字符串,可能的值是
PodScheduled:pod正處於調度中,剛開始調度的時候,hostip還沒綁定上,持續調度之后,有合適的節點就會綁定hostip,然后更新etcd數據
Ready: pod 已經可以開始服務,譬如被加到負載均衡里面
Initialized:所有pod 中的初始化容器已經完成了
Unschedulable:限制不能被調度,譬如現在資源不足
狀態字段 ConditionStatus 是一個字符串,可能的值為True,False和Unknown
------------------------------------------------------pod status--------------------------------------------------------------
CrashLoopBackOff:容器退出,kubelet正在將它重啟
InvalidImageName:無法解析鏡像名稱
ImageInspectError:無法校驗鏡像
ErrImageNeverPull:策略禁止拉取鏡像
ImagePullBackOff:鏡像正在重試拉取
RegistryUnavailable:連接不到鏡像中心
ErrImagePull:通用的拉取鏡像出錯
CreateContainerConfigError:不能創建kubelet使用的容器配置
CreateContainerError:創建容器失敗
m.internalLifecycle.PreStartContainer:執行hook報錯
RunContainerError:啟動容器失敗
PostStartHookError:執行hook報錯
ContainersNotInitialized:容器沒有初始化完畢
ContainersNotReady:容器沒有准備完畢
ContainerCreating:容器創建中
PodInitializing:pod 初始化中
DockerDaemonNotReady:docker還沒有完全啟動
NetworkPluginNotReady:網絡插件還沒有完全啟動