天天看點

Pod 狀态管理

Downward API有提供了兩種方式來實作從容器内部擷取POD資訊的方法:

環境變量的方式

Downward API 卷檔案挂載

通過這兩種方式,可以将pod的标簽資訊,資源資訊,狀态資訊傳遞到Pod内部。

參考連結

1、使用pod參數方式

使用如下檔案:

建立pod之後,通過logs檢視:

登入pod,可以直接檢視,發現環境變量中已經加載了這些參數:

通過yaml檔案中指定的valueFrom這種方式的Downward文法擷取相關Pod資訊。

2、 使用容器參數方式

如下檔案:

運作此pod,檢視日志:

1、使用Pod 參數

建立如下檔案:

通過downward API的volume方式,将pod的labels中的所有參數和annotations中的所有參數傳遞給了pod内。

在對應的路徑下,有一個隐藏的檔案目錄,存放了這兩個檔案。

2、通容器參數傳遞資源配額

如下Pod檔案:

通過如下方式,檢視pod中傳遞的參數:

Downward API的應用主要是在某些場景中,叢集中的每個節點将需要将自身的辨別(ID)及程序綁定IP位址等資訊事先寫入配置檔案中,程序啟動時讀取這些資訊釋出到服務的注冊中心,實作叢集節點的自動發現功能。

當我們執行<code>kubectl describe pod &amp;lt;pod-name&amp;gt;</code>時,會發現Pod都會有一個狀态值,下面列舉了Pod的5中狀态:

Pending: API server 已經建立該Pod,但是Pod内還有一個或多個容器鏡像沒有建立,一般是在下載下傳鏡像。

Running: Pod内的所有容器均已經建立,且至少有一個容器處于運作狀态、正在啟動或重新開機狀态。

Succeeded: Pod内所有容器均已經成功執行退出,且不再重新開機

Failed: Pod内所有容器均已退出,但至少有一個容器退出為失敗狀态。

Unknown: 由于某種原因無法擷取Pod狀态,可能由于網絡通信不暢導緻。

Pod的重新開機政策應用于Pod中的所有容器,并且僅在Pod所處的Node上由Kubelet進行判斷和重新開機操作。

RestartPolicy包含三個設定:

Always: 當容器失效時,由kubelet自動重新開機該容器。

OnFailure: 當容器終止運作且退出碼不為0時,由Kubelet自動重新開機該容器。

Never: 不論容器的運作狀态如何,Kubelet都不會重新開機該容器。

當管理Pod的控制包括ReplicationController、Job、DaemonSet以及直接通過Kubelet管理(靜态Pod),對應的控制器對Pod的重新開機政策要求如下:

RC和DaemonSet,ReplicaSet,Deployment: 必須設定為Always,需要保證容器的持續運作

Job: OnFailure 或Never,確定容器不再執行

kubelet: 在Pod失效時自動重新開機它,不論将RestartPolicy設定為什麼值,也不會對Pod進行健康檢查。

對Pod的健康狀态檢查可以通過兩類探針來檢查:LivenessProbe和ReadinessProbe。

livenessProbe: 判斷容器是否存活(running),如果檢測到容器不健康,則kubelet将殺掉該容器,并根據容器的重新開機政策做相應的處理。如果容器不包含LivenessProbe探針,則傳回永遠是Success。

readinessProbe: 用于判斷容器是否啟動完成(ready),可以接受請求。如果ReadinessProbe探針檢測到失敗,則Pod的狀态将被修改。Endpoint Controller将從Service的EndPoint中删除包含該容器所在的Pod的EndPoint。

容器的探針對容器有3中實作方式:

ExecAction: 在容器内執行一條指令,如果指令的傳回碼為0,則表示容器健康。

TCPSocketAction: 通過容器的端口号和IP位址執行TCP檢測,如果能夠建立TCP連接配接表示容器健康。

HTTPGetAction: 通過容器的IP位址、端口号及路徑調用HTTP Get方法,如果相應的狀态碼大于等于200且小于400,則認為容器狀态健康。

下面是對應的三個示例,闡述了這3中實作方式:

1、使用ExecAction方式:

通過如下指令,可以檢視到pod的健康狀态和重新開機次數:

2、使用TCPSockAction

如下檔案示例:

3、使用HTTPGetAction

readinessProbe 和livenessProbe 用法十分相似,隻需要把 readinessProbe替換為livenessProbe即可。它們可以同時使用在同一個容器上,來確定流量不會流入未準備好的容器,并且讓容器在失敗的時候重新啟動。

繼續閱讀