介绍
一旦容器探测出现了问题,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