翻譯官方文檔
Pod 階段
- Pending 下載鏡像
- Running 全部pod已經綁定節點,全部鏡像已經創建。至少一個容器正在運行或者正在啓動/重啓
- Succedded 全部容器成功終止,不會重啓
- Failed 所有容器都終止了,至少一個容器因故障終止,也就是非零退出或者被系統終止
- Unknown 獲取不到pod的狀態,典型原因是與節點通信錯誤
Pod 狀態(conditions)
- PodScheduled
- Ready
- Inintialized
- ContarinersReady
容器探針
kubelet調用容器實現的handler執行診斷
- ExecAction 執行命令,返回爲0
- TCPSocketAction tcp端口打開
- HTTPGetAction Get請求返回的http狀態碼在200-400之間
探針狀態
- Success
- Failure
- Unknown
三種探針:
- livenessProbe 探測容器是否running,如果失敗,kubelet kill容器,容器根據restart policy策略執行相應動作,不提供這個探針,容器狀態就是Success
- redinessProbe 如果失敗,endpoint controller 將pod的ip從service的endpoints中移除,在initial delay之前是Failure狀態,不提供這個探針,容器狀態就是Success
- startupProbe 如果提供了這個探針,在它成功之前,其他探針都disabled。如果失敗,kubelet kill容器,容器根據restart policy策略執行相應動作,不提供這個探針,容器狀態就是Success
何時使用存活探針?
- 容器裏的進程在遇到問題或變得不正常時能自行崩潰,就不需要。
- 如果容器啓動時需要加載大量數據、配置文件或者遷移,就設置就緒探針,使它不在啓動以後立即接收流量。刪除pod時,它自動進入unready狀態
- 如果容器啓動時間通常超過
initialDelaySeconds + failureThreshold * periodSeconds
,應該指定一個和存活探針檢查相同endpoint的啓動探針
pod和容器 status
上報的pod status依賴於當前的容器 status
容器 states
pod被調度器指定節點後,kebelet開始用容器運行時創建容器。
- Waiting 拉取鏡像或者應用secrets等,Reason有說明信息
- Running postStart鉤子在容器進入running狀態之前執行
- Terminated 正常或者異常終止,preStop鉤子執行後進入這個狀態
pod就緒gate
v1.14 Pod Ready++
重啓策略
針對pod設置,對pod的所有容器生效。重啓延遲倍數增長(10s,20s,40s…),5分鐘封頂,成功執行10分鐘後重置。
- Always
- OnFailure
pod 生命週期
控制平面會清理終止的pod(succeded或者failed的),當pod數超過kube-controller-manager設置的terminated-pod-gc-threshold
以後。
三類控制器可用:
- 期望終止:job的pod的重啓策略必須是Onfailure或者Never
- 不期望終止:ReplicationController, ReplicaSet, or Deployment
- DaemonSet
如果容器success退出,OnFailure重啓策略就不重啓容器了
狀態實例:
- pod running 只有一個容器,容器成功退出
- Log completion event
- Always:重啓容器,pod running
- OnFailure: pod succedded
- Never: pod succedded
- pod running 只有一個容器,容器失敗退出
- Log failure event.
- Always:重啓容器,pod running
- OnFailure: 重啓容器,pod running
- Never: pod Failed
- pod running 有兩個容器,容器1失敗退出
- Log failure event.
- Always:重啓容器,pod running
- OnFailure: 重啓容器,pod running
- Never: 不重啓容器,pod running
- pod running 有兩個容器,容器1 不是running,容器2失敗退出
- Log failure event.
- Always:重啓容器,pod running
- OnFailure: 重啓容器,pod running
- Never: pod Failed
- pod running 有一個容器,容器內存不足
- 容器終止failure
- Log OOM event.
- Always:重啓容器,pod running
- OnFailure: 重啓容器,pod running
- Never: pod Failed
- pod running 磁盤掉了
- 殺死所有容器
- Log appropriate event.
- pod 階段變爲Failed
- 如果由控制器控制,在其他地方重啓pod
- pod running 節點失聯
- 節點控制器等待超時
- 節點控制器置pod階段爲Failed
- 如果由控制器控制,在其他地方重啓pod