天天看點

k8s基礎篇 pod(八)Pod常見的狀态和重新開機政策

8.1 常見的pod狀态

Pod的status定義在PodStatus對象中,其中有一個phase字段。它簡單描述了Pod在其生命周期的階段。熟悉Pod的各種狀态對我們了解如何設定Pod
的排程政策、重新開機政策是很有必要的。下面是 phase 可能的值,也就是pod常見的狀态:
1、挂起(Pending):我們在請求建立pod時,條件不滿足,排程沒有完成,沒有任何一個節點能滿足排程條件,已經建立了pod但是沒有适合它運作
的節點叫做挂起,排程沒有完成,處于pending的狀态會持續一段時間:包括排程Pod的時間和通過網絡下載下傳鏡像的時間。 
2、運作中(Running):Pod已經綁定到了一個節點上,Pod 中所有的容器都已被建立。至少有一個容器正在運作,或者正處于啟動或重新開機狀态。
3、成功(Succeeded):Pod 中的所有容器都被成功終止,并且不會再重新開機。
4、失敗(Failed):Pod 中的所有容器都已終止了,并且至少有一個容器是因為失敗終止。也就是說,容器以非0狀态退出或者被系統終止。
5、未知(Unknown):未知狀态,所謂pod是什麼狀态是apiserver和運作在pod節點的kubelet進行通信擷取狀态資訊的,如果節點之上的kubelet
本身出故障,那麼apiserver就連不上kubelet,得不到資訊了,就會看Unknown

擴充:還有其他狀态,如下:
6、Evicted狀态:出現這種情況,多見于系統記憶體或硬碟資源不足,可df-h檢視docker存儲所在目錄的資源使用情況,如果百分比大于85%,就要及
時清理下資源,尤其是一些大檔案、docker鏡像。
7、CrashLoopBackOff:容器曾經啟動了,但可能又異常退出了
8、Error 狀态:Pod 啟動過程中發生了錯誤      

8.2 pod重新開機政策

Pod的重新開機政策(RestartPolicy)應用于Pod内的所有容器,并且僅在Pod所處的Node上由kubelet進行判斷和重新開機操作。當某個容器異常退出或者
健康檢查失敗時,kubelet将根據 RestartPolicy 的設定來進行相應的操作。

Pod的重新開機政策包括 Always、OnFailure和Never,預設值為Always。
Always:當容器失敗時,由kubelet自動重新開機該容器。
OnFailure:當容器終止運作且退出碼不為0時,由kubelet自動重新開機該容器。
Never:不論容器運作狀态如何,kubelet都不會重新開機該容器。

[root@xianchaomaster1 ~]# vim pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
  namespace: default
  labels:
    app: myapp
spec:
  restartPolicy: Always
  containers:
  - name:  tomcat-pod-java
    ports:
    - containerPort: 8080
    image: tomcat:8.5-jre8-alpine
    imagePullPolicy: IfNotPresent