k8s ready 不排程 K8S容器探針

2021-10-11 06:53:41 字數 2468 閱讀 1054

探針是由 kubelet對容器執行的定期診斷。要執行診斷, kubelet 呼叫由容器實現的 handler 。有三種型別的處理程式:execaction:在容器內執行指定命令。如果命令退出時返回碼為 0 則認為診斷成功。tcpsocketaction:對指定埠上的容器的 ip 位址進行 tcp 檢查。如果埠開啟,則診斷被認為是成功的。httpgetaction:對指定的埠和路徑上的容器的 ip 位址執行 http get 請求。如果響應的狀態碼大於等於 200 且小於 400 ,則診斷被認為是成功的每次探測都將獲得以下三種結果之一: 成功:容器通過了診斷。 失敗:容器未通過診斷。 未知:診斷失敗,因此不會採取任何行動

livenessprobe :指示容器是否正在執行。如果存活探測失敗,則 kubelet 會殺死容器,並且容器將受到其 重啟策略 的影響。如果容器不提供存活探針,則預設狀態為 successreadinessprobe :指示容器是否準備好服務請求。如果就緒探測失敗,端點控制器將從與 pod 匹配的所有 service 的端點中刪除該 pod 的 ip 位址。初始延遲之前的就緒狀態預設為 failure 。如果容器不提供就緒探針,則預設狀態為 success。

檢測探針 - 就緒檢測

read.yaml

說明:由於index1.html不存在,會導致他重啟,手動建立後就正常了。

檢測探針 - 存活檢測

[root@k8s-master mnt]# cat live-exec.yamlapiversion: v1kind: podmetadata:  name: liveness-exec-pod  namespace: defaultspec:  containers:  - name: liveness-exec-container    image: busybox    imagepullpolicy: ifnotpresent    command: ["/bin/sh","-c","touch /tmp/live ; sleep 60; rm -rf /tmp/live; sleep 3600"]    livenessprobe:      exec:        command: ["test","-e","/tmp/live"]      initialdelayseconds: 1      periodseconds: 3[root@k8s-master mnt]#
說明:由於 /tmp/live 不存在,會一直重啟

說明:刪除 html,會發現 pod 開始重啟了。

說明:刪除html,會發現pod開始重啟了。

pod hook

pod hook (鉤子)是由 kubernetes 管理的 kubelet 發起的,當容器中的程序啟動前或者容器中的程序終止之前執行,這是包含在容器的生命週期之中。可以同時為 pod 中的所有容器都配置 hookhook 的型別包括兩種:exec:執行一段命令http:傳送 http 請求

重啟策略

podspec 中有乙個 restartpolicy 字段,可能的值為 always 、 onfailure 和 never 。預設為always 。 restartpolicy 適用於 pod 中的所有容器。 restartpolicy 僅指通過同一節點上的kubelet 重新啟動容器。失敗的容器由 kubelet 以五分鐘為上限的指數退避延遲( 10 秒, 20 秒, 40秒 ... )重新啟動,並在成功執行十分鐘後重置。如 pod 文件 中所述,一旦繫結到乙個節點, pod 將永遠不會重新繫結到另乙個節點。

pod phase

pod 的 status 欄位是乙個 podstatus 物件, podstatus 中有乙個 phase 字段。pod 的相位( phase )是 pod 在其生命週期中的簡單巨集觀概述。該階段並不是對容器或 pod 的綜合彙總,也不是為了做為綜合狀態機pod 相位的數量和含義是嚴格指定的。除了本文件中列舉的狀態外,不應該再假定 pod 有其他的phase 值幾種常見的值

執行中( running ):該 pod 已經繫結到了乙個節點上, pod 中所有的容器都已被建立。至少有乙個容器正在執行,或者正處於啟動或重啟狀態

成功( succeeded ): pod 中的所有容器都被成功終止,並且不會再重啟

失敗( failed ): pod 中的所有容器都已終止了,並且至少有乙個容器是因為失敗終止。也就是說,容器以非 0 狀態退出或者被系統終止

未知( unknown ):因為某些原因無法取得 pod 的狀態,通常是因為與 pod 所在主機通訊失敗

出處:

k8s排程 原理 K8s排程原理和Pod生命週期

1 k8s排程原理 pod只存在某乙個物理節點上,可以執行多個container 2 pod的生命週期 暫停pod,可以暫停deployment kubectl get depolyment kubectl scale replicas 0 deployment 刪除pod。刪除之後,狀態變成suc...

K8s部署prometheus監控K8s細節

prometheus 一些配置檔案可以再github上找到。部署 root kube prometheus manifests 目錄下所有檔案 部署 root kube prometheus manifests setup 目錄下所有檔案 要注意的是自己要建立乙個工作空間 如果報錯執行下面語句 部署...

k8s 多租戶 k8s 基礎介紹

備註 1 每乙個pod裡執行著乙個特殊的容器 pause容器,其他容器都是業務容器,這些業務容器共享pause容器的網路棧和volume 邏輯卷 掛載卷。因此他們之間的通訊和資料交換更為高效。2 k8s設計了pod物件,將每個服務程序包裝到相應的pod中,使其成為pod中執行的乙個容器 contai...