環境
- kubernetes 1.20.2
- Spring Boot 2.5.0-M1
目標
創建一個 Pod 將其容器的重啟策略設置為:Always,查看容器停止時,Pod 的行為。
pod.yaml
直接創建 Pod 時,如果 restartPolicy 不寫,默認為:Always。
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
spec:
restartPolicy: Always
containers:
- name: pod-demo
image: jiangbo920827/spring-demo:actuator
ports:
- containerPort: 8080
查看 Pod
[root@master pod]# kubectl get -f pod.yaml -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-demo 1/1 Running 0 82s 10.244.1.17 node1 <none> <none>
可以看到 Pod 正常運行,RESTARTS(重啟次數)字段為 0。
停止容器
正常停止
[root@master pod]# curl -X POST 10.244.1.17:8080/actuator/shutdown
{"message":"Shutting down, bye..."}[root@master pod]#
[root@master pod]# kubectl get -f pod.yaml -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-demo 1/1 Running 1 8m4s 10.244.1.17 node1 <none> <none>
可以看到容器被終止了,並且重啟次數增加了一次,Pod 恢復到了正常狀態。
非正常停止
[root@master pod]# kubectl exec pod-demo -- kill 1
[root@master pod]# kubectl get -f pod.yaml -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-demo 0/1 Error 1 10m 10.244.1.17 node1 <none> <none>
[root@master pod]# kubectl get -f pod.yaml -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-demo 1/1 Running 2 10m 10.244.1.17 node1 <none> <none>
重啟的次數再次增加 1,如果查看命令夠快的話,還能看到中間出現了一個 Error 的狀態,重啟后又恢復到正常狀態。
總結
介紹了容器的重啟策略-Always,在創建單個 Pod 的情況下,不管 Pod 中的容器是否正常停止,最終都會恢復。
容器的重啟有一個回退策略,並以指數級增加。如果在 10 分鍾沒有錯誤,則重置重啟計時。
詳細說明見附錄摘抄的官網說明。
附錄
Container restart policy
The spec
of a Pod has a restartPolicy
field with possible values Always, OnFailure, and Never. The default value is Always.
The restartPolicy
applies to all containers in the Pod. restartPolicy
only refers to restarts of the containers by the kubelet on the same node. After containers in a Pod exit, the kubelet restarts them with an exponential back-off delay (10s, 20s, 40s, …), that is capped at five minutes. Once a container has executed for 10 minutes without any problems, the kubelet resets the restart backoff timer for that container.