Pod 生命周期重启策略健康检查服务可用性检查
Posted 看,未来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pod 生命周期重启策略健康检查服务可用性检查相关的知识,希望对你有一定的参考价值。
文章目录
生命周期
正常就正常,不正常看日志。下一个
重启策略
Pod 重启策略包括 Always、Never、OnFailure。
kubelet 重启失败容器的时间间隔以 sync-frequency 乘 2n 来计算,如 1、2、4、8 倍等,最长时延 5min,并在重启成功之后的 10 min 后重置该时间。
当前可用于管理 Pod 的控制器包括 RC、Job、DaemonSet,还可以通过 kubelet 管理(静态 Pod),每种控制器对应的 Pod 重启策略要求如下:
- RC 和 DS:必须设置为 Always,需要保证容器的正常运行。
- Job:必须不设置为 Always,确保 Job 执行完毕之后不会重启。
- 对于 kubelet,在 Pod 失效时自动启动它。
Pod 健康检查 & 服务可用性检查
k8s 对 Pod 的检查有三种探针,LivenessProbe、ReadinessProbe、SetupProbe。相对前两种比较常用,kubelet 会定期执行这两种探针来诊断容器的健康状况。
LibenessProbe 用于判断容器是否存活,如果不健康,就杀掉,然后看看要不要重启。如果没有设定该探针,则默认一直是存活的,至于真实是死是活就不好说了。
ReadinessProbe 用于判断容器服务是否可用,对于被 Service 管理的 Pod,如果发现容器不可用,系统将从 Service 的后端 Pod Endpoint 列表中将该 pod 隔离出去,直到它什么时候可用了再放回来。这样可以防止 Service 将业务转发到不可用的 Pod 上。
SetupProbe 探针,用于一些启动比较慢的情况。此时 ReadinessProbe 就不适用了,对于这种有且仅有一次的操作,使用 SetupProbe。
探针实现方式
以上三种探针均可使用以下三种实现方式:
1)execAction,在容器内部运行一个命令,如果命令返回码为0,则表明容器健康。
apiVersion: v1
kind: Pod
meatdate:
name: liveness-exec
spec:
containers:
- name: liveness
image: busybox:latest
args:
- /bin/sh
- -c
- echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
livenessProbe:
exec:
command:
- cat
- /tmp/health
initialDelaySeconds: 15 # 启动容器后首次警醒健康检查的等待时间
timeoutSeconds: 1 # 健康检查发送请求之后等待响应的时间,如果超时,则 kubelet 认为容器已无法提供服务
2)通过 tcpSocket
通过容器的 IP 地址和端口号执行 TCP 检查,如果能够建立连接则说明容器健康。
以下以 localhost:80 为例:
apiVersion: v1
kind: Pod
meatdate:
name: liveness-exec
spec:
containers:
- name: liveness
image: busybox:latest
args:
- /bin/sh
- -c
- echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
livenessProbe:
tcpSocket:
port:80
initialDelaySeconds: 15
timeoutSeconds: 1
3)httpGet 方式
通过容器 IP、端口号以及路径调用 Get 方法,如果返回值结余 200~400 则说明正常。
apiVersion: v1
kind: Pod
meatdate:
name: liveness-exec
spec:
containers:
- name: liveness
image: busybox:latest
args:
- /bin/sh
- -c
- echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
livenessProbe:
httpGet:
path: /_status/healthz
port: 80
initialDelaySeconds: 15
timeoutSeconds: 1
setupProbe 参考
apiVersion: v1
kind: Pod
meatdate:
name: liveness-exec
spec:
containers:
- name: liveness
image: busybox:latest
args:
- /bin/sh
- -c
- echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
startupProbe:
httpGet:
path: /_status/healthz
port: 80
failureThreshold: 20
periodSeconds: 10
这个 Pod 有 20 * 10 = 200s 的启动时间。
以上是关于Pod 生命周期重启策略健康检查服务可用性检查的主要内容,如果未能解决你的问题,请参考以下文章