(1)pod物件的生命週期從開始建立到終止退出的時間範圍稱為生命週期。
(2)其中建立主容器是必須的操作,初始化init容器,啟動後鉤子,存活性探測,就緒性探測,停止前鉤子為可選執行。
(3)pod在整個生命週期的過程中總會處於以下幾個狀態:
pending:建立了pod資源並存入etcd中,但尚未完成排程。
containercreating:pod 的排程完成,被分配到指定 node 上。處於容器建立的過程中。通常是在拉取映象的過程中。
running:pod 包含的所有容器都已經成功建立,並且成功執行起來。
succeeded:pod中的所有容器都已經成功終止並且不會被重啟
failed:所有容器都已經終止,但至少有乙個容器終止失敗,也就是說容器返回了非0值的退出狀態或已經被系統終止。
unknown:因為某些原因無法取得 pod 的狀態。這種情況通常是因為與 pod 所在主機通訊失敗。
(4)pod生命週期的重要行為:
1.初始化容器:
乙個pod可以擁有任意數量的init容器。init容器時順序執行的,並且僅當最後乙個init容器執行完畢才會去啟動容器。換句話說,init容器也可以用來延遲pod的主容器的啟動。
2.生命週期鉤子:
pod允許定義兩種型別的生命週期鉤子,啟動後(post-start)鉤子和停止前(pre-stop)鉤子
這些生命週期鉤子是基於每個容器來指定的,和init容器不同的是,init容器時應用到整個pod。而這些鉤子是針對容器的,是在容器啟動後和停止前執行的。
3.容器探針:
他是kubectl對容器週期性執行的健康狀態診斷。分為兩種: liveness(存活性探測), readiness(就緒性檢測)
liveness(存活性探測):判斷容器是否處於runnning狀態,策略是重啟容器
readiness(就緒性檢測):判斷容器是否準備就緒並對外提供服務,將容器設定為不可用,不接受service**的請求
三種處理器用於pod檢測:
execaction:在容器中執行乙個命令,並根據返回的狀態碼進行診斷1,只有返回0為成功,
tcpsocketaction:通過與容器的某tcp埠嘗試建立連線金慈寧宮診斷
4.容器的重啟策略:
定義是否重啟pod物件
always:但凡pod物件終止就重啟,預設設定
onfailure:僅在pod出現錯誤時才重啟
never:從不
注:一旦pod繫結到乙個節點上,就不會被重新繫結到另乙個節點上,要麼重啟,要麼終止
5.pod的終止過程
終止過程主要分為如下幾個步驟:
(1)使用者發出刪除 pod 命令
(2)pod 物件隨著時間的推移更新,在寬限期(預設情況下30秒),pod 被視為「dead」狀態
(3)將 pod 標記為「terminating」狀態
(4)第三步同時執行,監控到 pod 物件為「terminating」狀態的同時啟動 pod 關閉過程
(5)第三步同時進行,endpoints 控制器監控到 pod 物件關閉,將pod與service匹配的 endpoints 列表中刪除
(6)如果 pod 中定義了 prestop 鉤子處理程式,則 pod 被標記為「terminating」狀態時以同步的方式啟動執行;若寬限期結束後,prestop 仍未執行結束,第二步會重新執行並額外獲得乙個2秒的小寬限期
(7)pod 內物件的容器收到 term 訊號
(8)寬限期結束之後,若存在任何乙個執行的程序,pod 會收到 sigkill 訊號
(9)kubelet 請求 api server 將此 pod 資源寬限期設定為0從而完成刪除操作
k8s排程 原理 K8s排程原理和Pod生命週期
1 k8s排程原理 pod只存在某乙個物理節點上,可以執行多個container 2 pod的生命週期 暫停pod,可以暫停deployment kubectl get depolyment kubectl scale replicas 0 deployment 刪除pod。刪除之後,狀態變成suc...
k8s集群建立pod,執行pod
k8s集群搭建好後,各個node的狀態變成了ready,就可以建立pod,建立完成後,就會預設的執行其中的container。使用乙個簡單yaml檔案描述pod apiversion v1 必選,版本號,例如v1,版本號必須可以用 kubectl api versions 查詢到 kind pod ...
k8s檢視pod的命令
引數解析 name pod名 ready 準備好的副本數 status 狀態 restarts 重啟 age 已經執行的時間 kubectl get pod o wide 引數解析 ip ip位址 node 執行節點 nominated node 指定節點 kubectl describe pod ...