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

k8s配置deployment的 liveness 和 readiness 探针

时间:2022-09-02 12:00:46浏览次数:92  
标签:readiness probe liveness 探针 deployment pod 就绪

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 检查:

  • initialDelaySeconds:容器启动后第一次执行探测是需要等待多少秒。
  • periodSeconds:执行探测的频率。默认是 10 秒,最小 1 秒。
  • timeoutSeconds:探测超时时间。默认 1 秒,最小 1 秒。
  • successThreshold:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1。对于 liveness 必须是 1。最小值是 1。
  • failureThreshold:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3。最小值是 1。

4.配置实例

4.1. liveness probe(存活探针)

  • deployment配置

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

  • restart以后情况

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

 

 

4.2. readiness probe(就绪探针)

  • deployment配置

等待30s再开始检测就绪

  • restart以后情况

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

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

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

相关文章

  • 就绪探针(Readiness Probe)
    一个新Pod创建后,Service就能立即选择到它,并会把请求转发给Pod,那问题就来了,通常一个Pod启动是需要时间的,如果Pod还没准备好(可能需要时间来加载配置或数据,或者可能需要执行一......
  • 存活探针(Liveness Probe)
    存活探针Kubernetes提供了自愈的能力,具体就是能感知到容器崩溃,然后能够重启这个容器。但是有时候例如Java程序内存泄漏了,程序无法正常工作,但是JVM进程却是一直运行的,对于......
  • # flask_socket_io中报错RuntimeError: You need to use the eventlet server. See th
    flask_socket_io中报错RuntimeError:Youneedtousetheeventletserver.SeetheDeploymentsectionofthedocumentationformoreinformation.的解决办法https:/......
  • pod资源的健康检查-readiness探针的httpGet使用
    livenessProbe:健康状态检查,周期性检查服务是否存活,检查结果失败,将重启容器readinessProbe:可用性检查,周期性检查服务是否可用,不可用将从service的endpoints中移除同一个容......
  • k8s--deployment 控制器、版本回退、金丝雀发布
    版本回退接着上面的文章继续:https://www.cnblogs.com/zouzou-busy/p/16153612.html前面我们已经对版本进行了升级,通过查看rs,发现有两个rs,一个是 pc-deployment-5db6b......
  • k8s--deployment 控制器、扩缩容、升级策略
    介绍Deployment表示用户对K8S集群的一次更新操作。Deployment是一个比RS(ReplicaSet,RS)应用模型更广的API对象,可以是创建一个新的服务,更新一个新的服务,也可以......