Kubernetes调度Pod到Kubernetes节点上,节点上的Kubelet运行Pod的容器。如果容器内进程终止运行(容器的主进程崩溃),Kubelet会自动重启容器,这体现了Kubernetes赋予应用的自愈能力。在某些情况下,即使容器内进程没有崩溃,应用程序仍可能处于非正常工作状态。Kubernetes默认只是检查Pod的容器是否正常运行,但容器正常运行并不一定代表应用健康。我们可以通过Kubernetes提供的探针来探测容器应用是否健康,然后决定是否重启恢复应用到正常工作状态,以及决定容器是否能接收请求。
Kubernetes探针有三种类型:
Kubernetes 1.16 引入了启动探针,目的是为了确保在容器内应用启动成功前,存活探针和就绪探针不会执行,以避免在启动过程中探测失败导致容器重启,容器陷入无限重启循环。在不使用启动探针时,做法是设置initialDelaySeconds
的值,这样探针在该时间过后才会开始执行,这个值既不能太短也不能太长。太短,容器可能陷入无限重启循环;太长,不能及时发现应用不可用,流量可能已经被分配到Pod上。而启动时间并不好判断设置多少合适(每次启动时间差异可能较大)。使用启动探针,可以将failureThreshold
和periodSeconds
设置较为宽松,一旦启动探针有一次探测成功,即可将后续的探针交给存活探针和就绪探针。
Kubernetes支持三种探测方式:
通过在目标容器中执行由用户自定义的命令来判断容器的监控状态,若命令状态返回值为 0 则表示“成功”通过检测,其他值则均为“失败”状态。执行命令
例如/bin/sh -c echo liveness-http test > /usr/share/nginx/html/health
基于HTTP的探测(HTTPGetAction)向目标容器发起一个HTTP请求,根据请求响应码进行结果判定,响应码如 2xx 和 3xx 时表示探测成功。
scheme
):默认是HTTP,还可指定HTTPSpath
):请求URL里除服务地址(或域名)和端口外的部分,例如 /health_check。port
):访问的容器的端口名字或者端口号,例如 80、8080等。端口号必须介于1 ~ 65525之间。当然这里还可以引用一个端口资源的名称。httpHeaders
):自定义请求的header,例如 X-Custom-Header=AwsomeKubelet将尝试在指定端口上打开容器的套接字。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。容器端口与HTTPGet里的容器端口一样。
探针还有其他配置项,以便更加精确地控制探针。
initialDelaySeconds
):容器启动后第一次执行探测需要等待的时间。默认值是 0 ,最小值也是 0。periodSeconds
):执行探测的频率。默认是 10 秒,最小 1 秒。timeoutSeconds
):探测超时时间,探测未在改时间内完成将被视为失败。默认 1 秒,最小 1 秒。successThreshold
):探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,最小值是 1。注意:对于存活探针,此项必须是 1。failureThreshold
):探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。错误使用探针会对程序运行造成坏的影响,可能让应用变得不可靠。
1. Configure Liveness, Readiness and Startup Probes 2. Liveness and Readiness Probes
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。