【Kubernetes】容器重啟策略-Never


環境

  1. kubernetes 1.20.2
  2. Spring Boot 2.5.0-M1

目標

創建一個 Pod 將其容器的重啟策略設置為:Never,查看容器停止時,Pod 的行為。

pod.yaml

直接創建 Pod 時,如果 restartPolicy 不寫,默認為:Always。

apiVersion: v1
kind: Pod
metadata:
  name: pod-demo

spec:
  restartPolicy: Never
  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          14s   10.244.1.19   node1   <none>           <none>

可以看到 Pod 正常運行,RESTARTS(重啟次數)字段為 0。

停止容器

正常停止

[root@master pod]# curl -X POST 10.244.1.19: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   0/1     Completed   0          66s   10.244.1.19   node1   <none>           <none>

狀態變成了 Completed,READY 字段也變成了 0/1,也沒有再次重啟。

非正常停止

刪除容器,再次創建,並且非正常停止。

[root@master pod]# kubectl delete -f pod.yaml
pod "pod-demo" deleted
[root@master pod]# kubectl apply -f pod.yaml
pod/pod-demo created
[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          4s    10.244.1.20   node1   <none>           <none>
[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    0          34s   10.244.1.20   node1   <none>           <none>

狀態變成了 Error,READY 字段也變成了 0/1,也沒有再次重啟。

總結

介紹了容器的重啟策略-Never,在創建單個 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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM