在 Kubernetes 中,Health check 是一种非常重要的机制,它可以用来检查容器是否健康。如果容器不健康,Kubernetes 就会自动重启容器或者调度到其他节点上,以保证应用程序的高可用性。
本文将介绍 Kubernetes 中的 Health check 机制,包括 Liveness Probe 和 Readiness Probe,以及如何在 Kubernetes 中实现容器健康检查。
Liveness Probe
Liveness Probe 用来检查容器是否存活。如果 Liveness Probe 失败,Kubernetes 就会自动重启容器。Liveness Probe 可以使用以下三种方式进行检查:
- HTTP 接口
- TCP 接口
- 容器内的进程
HTTP 接口
使用 HTTP 接口进行 Liveness Probe 检查,需要在容器中启动一个 HTTP 服务,并提供一个 HTTP 接口,返回 HTTP 200 状态码表示容器存活。如果返回的状态码不是 200,那么 Kubernetes 就会认为容器不健康,自动重启容器。
以下是一个使用 HTTP 接口进行 Liveness Probe 检查的示例:
----------- -- ----- --- --------- ----- --------------- ----- ----------- - ----- --------------------- ------ -------- -------------- -------- ----- ------- ----- ---- -------------------- -- -------------- --
在上面的示例中,我们定义了一个 Pod,包含一个容器 my-liveness-container,使用 HTTP 接口进行 Liveness Probe 检查。在容器启动后,Kubernetes 将会每隔 20 秒向容器的 /health 接口发送一个 HTTP GET 请求,如果返回的状态码为 200,那么容器就被认为是存活的。如果容器一直返回非 200 的状态码,那么 Kubernetes 将会在容器启动后的 15 秒后重启容器。
TCP 接口
使用 TCP 接口进行 Liveness Probe 检查,需要在容器中监听一个 TCP 端口,Kubernetes 将会每隔一段时间连接这个 TCP 端口,如果连接成功,那么容器就被认为是存活的。如果连接失败,那么 Kubernetes 就会认为容器不健康,自动重启容器。
以下是一个使用 TCP 接口进行 Liveness Probe 检查的示例:
----------- -- ----- --- --------- ----- --------------- ----- ----------- - ----- --------------------- ------ -------- -------------- ---------- ----- ---- -------------------- -- -------------- --
在上面的示例中,我们定义了一个 Pod,包含一个容器 my-liveness-container,使用 TCP 接口进行 Liveness Probe 检查。在容器启动后,Kubernetes 将会每隔 20 秒连接容器的 8080 端口,如果连接成功,那么容器就被认为是存活的。如果容器一直无法连接,那么 Kubernetes 将会在容器启动后的 15 秒后重启容器。
容器内的进程
使用容器内的进程进行 Liveness Probe 检查,需要在容器中运行一个命令或者脚本,返回码为 0 表示容器存活。如果返回码不是 0,那么 Kubernetes 就会认为容器不健康,自动重启容器。
以下是一个使用容器内的进程进行 Liveness Probe 检查的示例:
----------- -- ----- --- --------- ----- --------------- ----- ----------- - ----- --------------------- ------ -------- -------------- ----- -------- - ------- - -- - -- --- - ---- ---------- -------------------- -- -------------- --
在上面的示例中,我们定义了一个 Pod,包含一个容器 my-liveness-container,使用容器内的进程进行 Liveness Probe 检查。在容器启动后,Kubernetes 将会每隔 20 秒运行一个命令 /bin/sh -c "ps aux | grep my-process",如果命令返回码为 0,那么容器就被认为是存活的。如果命令一直返回非 0 的返回码,那么 Kubernetes 将会在容器启动后的 15 秒后重启容器。
Readiness Probe
Readiness Probe 用来检查容器是否准备好接受流量。如果 Readiness Probe 失败,Kubernetes 就会将容器从 Service 中移除,直到容器准备好接受流量。Readiness Probe 的检查方式和 Liveness Probe 相同,也可以使用 HTTP 接口、TCP 接口或者容器内的进程进行检查。
以下是一个使用 HTTP 接口进行 Readiness Probe 检查的示例:
----------- -- ----- --- --------- ----- ---------------- ----- ----------- - ----- ---------------------- ------ -------- --------------- -------- ----- ------ ----- ---- -------------------- -- -------------- -
在上面的示例中,我们定义了一个 Pod,包含一个容器 my-readiness-container,使用 HTTP 接口进行 Readiness Probe 检查。在容器启动后,Kubernetes 将会每隔 5 秒向容器的 /ready 接口发送一个 HTTP GET 请求,如果返回的状态码为 200,那么容器就被认为是准备好接受流量的。如果容器一直返回非 200 的状态码,那么 Kubernetes 将会将容器从 Service 中移除,直到容器准备好接受流量。
实现容器健康检查
在 Kubernetes 中实现容器健康检查,需要在 Pod 或者 Deployment 中定义 Liveness Probe 和 Readiness Probe。以下是一个使用 HTTP 接口进行 Liveness Probe 和 Readiness Probe 检查的 Deployment 示例:
----------- ------- ----- ---------- --------- ----- ------ ----- --------- - --------- ------------ ---- ------ --------- --------- ------- ---- ------ ----- ----------- - ----- ------------ ------ -------- ------ - -------------- ---- -------------- -------- ----- ------- ----- ---- -------------------- -- -------------- -- --------------- -------- ----- ------ ----- ---- -------------------- -- -------------- -
在上面的示例中,我们定义了一个 Deployment,包含三个副本,使用 HTTP 接口进行 Liveness Probe 和 Readiness Probe 检查。在容器启动后,Kubernetes 将会每隔 20 秒向容器的 /health 接口发送一个 HTTP GET 请求,如果返回的状态码为 200,那么容器就被认为是存活的。在容器启动后,Kubernetes 将会每隔 5 秒向容器的 /ready 接口发送一个 HTTP GET 请求,如果返回的状态码为 200,那么容器就被认为是准备好接受流量的。
总结
在 Kubernetes 中,使用 Health check 机制可以实现容器的健康检查,保证应用程序的高可用性。Liveness Probe 用来检查容器是否存活,Readiness Probe 用来检查容器是否准备好接受流量。Health check 可以使用 HTTP 接口、TCP 接口或者容器内的进程进行检查,通过定义 Liveness Probe 和 Readiness Probe,可以实现容器健康检查。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65d8527c1886fbafa45fda52