Kubernetes 中如何使用 livenessProbe 和 readinessProbe?

在 Kubernetes 中,我们可以使用 livenessProbe 和 readinessProbe 来检查容器的状态。这两个探针都是 Kubernetes 中的重要概念,它们可以确保容器正常运行并且健康。

livenessProbe

livenessProbe 用于检查容器是否仍在运行。如果容器崩溃或死锁,livenessProbe 将会发现并重启容器。使用 livenessProbe 可以避免容器长时间运行但实际上已经停止工作的情况。

检查容器是否存活

我们可以使用 livenessProbe 的 httpGet 检查容器是否存活。通过向容器的 HTTP 端点发送 GET 请求,如果响应码为 200,则认为容器存活,否则认为容器崩溃或死锁,需要重启容器。

上述示例中,我们定义了一个 Pod,其中包含一个名为 liveness 的容器。这个容器的镜像是 k8s.gcr.io/liveness,我们使用了 httpGet 方式进行容器存活检测。在检测时会向容器的 /healthz 端点发送 GET 请求,同时还会添加一个名为 X-Custom-Header 的自定义 HTTP 头。initialDelaySeconds 和 periodSeconds 分别指定了容器启动后多少秒开始检测和每隔多少秒进行一次检测。

检查容器是否存活(命令方式)

除了 httpGet 方式,我们也可以使用 exec 方式执行命令来检查容器是否存活。在容器中运行的命令需要返回 0,否则认为容器崩溃或死锁,需要重启容器。

上述示例中,我们使用了 exec 方式进行容器存活检测。在检测时会执行 cat /tmp/health 命令,如果命令返回 0,则认为容器存活,否则认为容器崩溃或死锁,需要重启容器。

readinessProbe

readinessProbe 用于检查容器是否准备好接收流量。如果容器没有准备好接收流量,Kubernetes 将不会将流量路由到该容器。使用 readinessProbe 可以确保应用程序在接收流量之前已经准备好。

检查容器是否准备好接收流量

我们可以使用 readinessProbe 的 httpGet 检查容器是否准备好接收流量。通过向容器的 HTTP 端点发送 GET 请求,如果响应码为 200,则认为容器准备好接收流量,否则认为容器没有准备好接收流量。

上述示例中,我们定义了一个 Pod,其中包含一个名为 readiness 的容器。这个容器的镜像是 k8s.gcr.io/readiness,我们使用了 httpGet 方式进行容器准备就绪检测。在检测时会向容器的 /healthz 端点发送 GET 请求,同时还会添加一个名为 X-Custom-Header 的自定义 HTTP 头。initialDelaySeconds 和 periodSeconds 分别指定了容器启动后多少秒开始检测和每隔多少秒进行一次检测。

检查容器是否准备好接收流量(命令方式)

除了 httpGet 方式,我们也可以使用 exec 方式执行命令来检查容器是否准备好接收流量。在容器中运行的命令需要返回 0,否则认为容器没有准备好接收流量。

上述示例中,我们使用了 exec 方式进行容器准备就绪检测。在检测时会执行 cat /tmp/ready 命令,如果命令返回 0,则认为容器准备好接收流量,否则认为容器没有准备好接收流量。

总结

在 Kubernetes 中,使用 livenessProbe 和 readinessProbe 可以确保容器正常运行并且健康。livenessProbe 用于检查容器是否仍在运行,如果容器崩溃或死锁,livenessProbe 将会发现并重启容器。readinessProbe 用于检查容器是否准备好接收流量,如果容器没有准备好接收流量,Kubernetes 将不会将流量路由到该容器。我们可以使用 httpGet 方式或者 exec 方式来检查容器的状态。在定义 Pod 或 Deployment 时,我们可以使用 livenessProbe 和 readinessProbe 来设置容器的探针。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6571a35cd2f5e1655da542ad


纠错
反馈