10.5、重启策略(restartPolicy)

在上一节中,一旦容器探测出现了问题,kubernetes就会对容器所在的Pod进行重启,其实这是由pod的重启策略决定的,pod的重启策略有 3 种,分别如下:

  • Always :容器失效时,自动重启该容器,这也是默认值。
  • OnFailure : 容器终止运行且退出码不为0时重启
  • Never : 不论状态为何,都不重启该容器

重启策略适用于pod对象中的所有容器,首次需要重启的容器,将在其需要时立即进行重启,随后再次需要重启的操作将由kubelet延迟一段时间后进行,且反复的重启操作的延迟时长以此为10s、20s、40s、80s、160s和300s,300s是最大延迟时长。

创建 pod-restartpolicy.yaml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: v1
kind: Pod
metadata:
name: pod-restartpolicy
namespace: dev
spec:
containers:
- name: nginx
image: registry.cn-hangzhou.aliyuncs.com/zznn/mycentos:nginx-latest
# nginx:1.17.1
ports:
- name: nginx-port
containerPort: 80
livenessProbe: # 容器探测
httpGet:
scheme: HTTP
port: 80
path: /hello
restartPolicy: Never # 设置重启策略为Never

运行Pod测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建Pod
kubectl create -f pod-restartpolicy.yaml

# 查看Pod详情,发现nginx容器失败
kubectl describe pods pod-restartpolicy -n dev
......
Warning Unhealthy 15s (x3 over 35s) kubelet, node1 Liveness probe failed: HTTP probe failed with statuscode: 404
Normal Killing 15s kubelet, node1 Container nginx failed liveness probe

# 多等一会,再观察pod的重启次数,发现一直是0,并未重启
kubectl get pods pod-restartpolicy -n dev

NAME READY STATUS RESTARTS AGE
pod-restartpolicy 0/1 Running 0 5min42s