介紹
一旦容器探測出現了問題,k8s 就會對容器所在的 pod 進行重啟,其實這是由 pod 的重啟策略決定的,pod 的重啟策略有三種,分別如下
- Always:容器失效時,自動重啟該容器,這也是默認值
- OnFailure:容器終止運行且退出碼不為 0 時重啟
- Never:不論狀態為何,都不重啟該容器
重啟策略適應於 pod 對象中的所有容器,首次需要重啟的容器,將在其需要時立即進行重啟,隨后需要重啟的操作將由 kubelet 延遲一段時間后進行,且反復的重啟操作的延遲時長依次為 10s、20s、40s、80s、160s、300s。300s 是最大延遲時長
Always
創建 pod-restartpolicy.yaml,內容如下:
apiVersion: v1
kind: Pod
metadata:
name: pod-restartpolicy
namespace: zouzou
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- name: nginx-port
containerPort: 80
livenessProbe: # 探針,沒有 /hello 的路徑
httpGet:
scheme: HTTP
port: 80
path: /hello
restartPolicy: Always # 設置重啟策略,默認就為 Always
啟動 pod
kubectl apply -f pod-restartpolicy.yaml
查看 pod
# 發現 pod 在重啟,RESTARTS
[root@dce-10-6-215-215 tmp]# kubectl get pod pod-restartpolicy -n zouzou
NAME READY STATUS RESTARTS AGE
pod-restartpolicy 1/1 Running 2 77s
Never
上面設置了 restartPolicy: Always ,這也是默認策略,發現容器啟動不了就一直在重啟,我們將 restartPolicy 改為 Never,看下效果
先刪除上面創建的 pod
# 刪除 pod
kubectl delete pod pod-restartpolicy -n zouzou
修改 pod-restartpolicy.yaml,內容如下
apiVersion: v1
kind: Pod
metadata:
name: pod-restartpolicy
namespace: zouzou
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- name: nginx-port
containerPort: 80
livenessProbe: # 探針,沒有 /hello 的路徑
httpGet:
scheme: HTTP
port: 80
path: /hello
restartPolicy: Never # 設置重啟策略,改為 Never
啟動 pod
# 啟動 pod
kubectl apply -f pod-restartpolicy.yaml
查看 pod 和 event
# 查看 pod,發現容器沒有運行,也沒有 RESTARTS
[root@dce-10-6-215-215 tmp]# kubectl get pod pod-restartpolicy -n zouzou
NAME READY STATUS RESTARTS AGE
pod-restartpolicy 0/1 Completed 0 84s
# 查看 event,發現容器存活性探測失敗了,停止了容器,這是因為設置的 restartPolicy: Never
[root@dce-10-6-215-215 tmp]# kubectl describe pod pod-restartpolicy -n zouzou
Name: pod-restartpolicy
Namespace: zouzou
Priority: 0
Node: dce-10-6-215-200/10.6.215.200
Start Time: Fri, 15 Apr 2022 20:15:43 +0800
......
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 104s default-scheduler Successfully assigned zouzou/pod-restartpolicy to dce-10-6-215-200
Normal Pulled 101s kubelet Container image "nginx:1.14" already present on machine
Normal Created 101s kubelet Created container nginx
Normal Started 100s kubelet Started container nginx
Warning Unhealthy 77s (x3 over 97s) kubelet Liveness probe failed: HTTP probe failed with statuscode: 404
Normal Killing 77s kubelet Stopping container nginx