目录题
- 5.4 容器重启策略
- 示例
- (1)Always 策略
- (2)OnFailure 策略
- (3)Never 策略
5.4 容器重启策略
在 Pod 的 YAML 清单的 spec
中包含一个 restartPolicy
字段,其可能取值包括
- Always(总是重启)
- OnFailure(只有失败才会重启)
- Never(从不重启)
默认值是 Always
。
restartPolicy
适用于 Pod 中的所有容器。restartPolicy
仅针对同一节点上 kubelet
的容器重启动作。当 Pod 中的容器退出时,kubelet
会按指数回退方式计算重启的延迟(10s、20s、40s、…),其最长延迟为 5 分钟。 一旦某容器执行了 10 分钟并且没有出现问题,kubelet
对该容器的重启回退计时器执行重置操作。
示例
(1)Always 策略
编辑 pod-restartPolicy.yaml,内容如下所示
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod-restart
myname: pod-restart
name: pod-restart
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
command: ["sh","-c","sleep 10"]
name: pod-restart
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always #将重启策略定义为:Always
status: {}
创建 pod-restartPolicy,并查看其状态
kubectl apply -f pod-restartPolicy.yaml
kubectl get pod -w
可以看到当容器执行完 sleep 10
命令后,会显示完成(Completed),因为重启策略,该Pod会反复重启执行 sleep 10
命令。
完成上述操作后请删除该 Pod。
(2)OnFailure 策略
编辑 pod-OnFailure.yaml,内容如下所示
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod-onfailure
myname: pod-OnFailure
name: pod-onfailure
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
command: ["sh","-c","sleep 10"]
name: pod-onfailure
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: OnFailure #将重启策略定义为:OnFailure
status: {}
创建 pod-OnFailure,并查看其状态
kubectl apply -f pod-OnFailure.yaml
kubectl get pod -w
该状态是sleep 10
命令执行完成,并不是 Pod 启动失败,所以会一直保持completed状态。
如果将command中的参数改为"sh","-c","sleep 10 ; XXXX"
,Pod会反复重启,因为xxxx是一条无效命令。
完成上述操作后请删除该 Pod。
(3)Never 策略
编辑 pod-nerver.yaml,内容如下所示
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod-nerver
myname: pod-nerver
name: pod-nerver
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
command: ["sh","-c","XXXX"] #将命令修改为无效命令来查看 Never 策略。
name: pod-nerver
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Never #将重启策略定义为:Never
status: {}
即使sleep 10 ; XXXX
命令执行失败,Pod 也不会重启,一直停留在 error
状态。
完成上述操作后请删除该 Pod。