其他分享
首页 > 其他分享> > k8s配置deployment的 liveness 和 readiness 探针

k8s配置deployment的 liveness 和 readiness 探针

作者:互联网

1.概要

我遇到的问题主要是,在部署的时候老的pod都是正常的,但是新部署的pod由于参数等配置错了,其实启动是有问题的。但是新的pod在启动3秒以后就把老的pod给干掉了,错误判断属于正常启动,然后几秒以后新的pod又挂了,导致运维的时候出现服务无法访问的情况。

同时当你使用 Kubernetes 的时候,有没有遇到过 Pod 在启动后一会就挂掉然后又重新启动这样的恶性循环?你有没有想过 Kubernetes 是如何检测 pod 是否还存活?虽然容器已经启动,但是 Kubernetes 如何知道容器的进程是否准备好对外提供服务了呢?让我们通过 Kubernetes 官网的这篇文章 Configure Liveness and Readiness Probes,来一探究竟。

本文将展示如何配置容器的存活和可读性探针。

2.探针类型

2.1. liveness probe(存活探针)

Kubelet 使用 liveness probe(存活探针)来确定何时重启容器。例如,当应用程序处于运行状态但无法做进一步操作,liveness 探针将捕获到 deadlock,重启处于该状态下的容器,使应用程序在存在 bug 的情况下依然能够继续运行下去(谁的程序还没几个 bug 呢)。

2.2. readiness probe(就绪探针)

Kubelet 使用 readiness probe(就绪探针)来确定容器是否已经就绪可以接受流量。只有当 Pod 中的容器都处于就绪状态时 kubelet 才会认定该 Pod 处于就绪状态。该信号的作用是控制哪些 Pod 应该作为 service 的后端。如果 Pod 处于非就绪状态,那么它们将会被从 service 的 load balancer 中移除。

最关键的是,一个新的pod处于就绪状态以后,老的pod就会被杀掉,所以就绪状态前需要确保真的就绪

3.探针配置参数

Probe 中有很多精确和详细的配置,通过它们你能准确的控制 liveness 和 readiness 检查:

4.配置实例

4.1. liveness probe(存活探针)

等待30s再开始检测是否重启

可以看到新启动的pod在3秒内就已经running并且就绪状态(1/1);这样的话老的pod就被关闭了;但是实际上,新的pod是有问题的,连接不上consul

 

 

4.2. readiness probe(就绪探针)

等待30s再开始检测就绪

由于新的pod是有问题的,连接不上consul,所以当然是不希望能取代已经正常的老的pod;可以看到就绪探针起到效果了,37s的时候还没有就绪,因为内部已经报错了,连接consul异常;这样就导致了一直重启。

这也是我要的状态:新的pod留够缓冲时间来判断是否正常,如果30s还没有正常启动,那么就有问题了

标签:readiness,probe,容器,liveness,探针,deployment,pod,就绪
来源: https://www.cnblogs.com/zhanchenjin/p/16649277.html