Pod 生命週期

翻譯官方文檔

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章