kubernetes Pod 的生命周期(Readiness and liveness and startupProbe) 容器探针 为什么要使用readiness and liveness? readiness probe) 检测容器中的程序是否启动就绪,只有当检测容器中的程序启动成功之后,才会变成running状态,否则就是容器启动成功,他还是失败的信号(因为他里面的服务没有探测成功) 存活探针(liveness probe failed with statuscode: 404 Warning Unhealthy 50s (x3 over 60s) kubelet, 192.168.1.124 Liveness 50s kubelet, 192.168.1.124 Killing container with id docker://nginx:Container failed liveness
Liveness Probes 使用[存活探针]判断什么时候重启容器。 使用存活探针检查应用本身是否无响应、死锁, 有时候重启容器常常能解决此类问题。 我们以kubernetes官方demo为例: apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec spec: containers: - name: liveness image: busybox args: - /bin/sh - -c - touch initialDelaySeconds: 5 # 指示kubectl等待5s才执行首次探测 periodSeconds: 5 # 间隔5秒轮询 在第5秒kubectl开始首次liveness 探测 在30秒进行的每次探测均成功 30s之后容器内文件被删除,之后间隔5s的探测会失败,根据liveness默认配置连续3次失败就会放弃探测,放弃探测意味着重启容器,故容器会在第45s重启 重启之后又开始以上流程
While use of an active challenge/response paradigm to confirm liveness of the subject in a biometric As a result, the TrulySecure Voice Liveness Challenge has been designed specifically with a balance of , the TrulySecure Voice Liveness Challenge then prompts the user to sequentially speak a short set of As described below, the liveness challenge can potentially be configured in various ways to optimize This system design has a number of significant advantages over other voice liveness challenge options
探针类型 (1)liveness存活性探针 liveness探针让kubernetes知道你的应用程序是否存活。 (4)liveness-exec样例 待定。。。。。
2 .探针类型 Liveness存活性探针 Liveness探针让Kubernetes知道你的应用程序是活着还是死了。 如果你的应用程序还活着,那么Kubernetes就不管它了。 3 .探针执行方式 HTTP HTTP探针可能是最常见的自定义Liveness探针类型。 即使您的应用程序不是HTTP服务,您也可以在应用程序内创建轻量级HTTP服务以响应Liveness探针。 #cat liveness_exec.yaml apiVersion: v1 kind: Pod metadata: labels: test: liveness-exec name: liveness-exec spec: containers: - name: liveness-exec image: busybox args: - /bin/sh Liveness探针失败会导致Pod重新启动。 在应用程序准备好之前,您需要确保探针不会启动。 否则,应用程序将不断重启,永远不会准备好!
2 .探针类型 Liveness存活性探针 Liveness探针让Kubernetes知道你的应用程序是活着还是死了。 如果你的应用程序还活着,那么Kubernetes就不管它了。 3 .探针执行方式 HTTP HTTP探针可能是最常见的自定义Liveness探针类型。 即使您的应用程序不是HTTP服务,您也可以在应用程序内创建轻量级HTTP服务以响应Liveness探针。 #cat liveness_exec.yaml apiVersion: v1 kind: Pod metadata: labels: test: liveness-exec name: liveness-exec spec: containers: - name: liveness-exec image: busybox args: - /bin/sh Liveness探针失败会导致Pod重新启动。 在应用程序准备好之前,您需要确保探针不会启动。 否则,应用程序将不断重启,永远不会准备好!
序本文主要研究一下springboot的liveness及readiness使用management: endpoints: web: exposure: include health: probes: enabled: true show-details: always health: # /actuator/health/liveness enabled: true # /actuator/health/readiness readinessState: enabled: true 通过如上配置可以开启liveness
What is “Liveness”? Liveness detection Liveness detection is an anti-spoofing measure built into a biometric system, which There are 3 categories of liveness algorithms that can be used; Active Liveness detection. Passive liveness detection. For more information about face biometrics liveness, goes to - https://www.liveness.com/ A live demo
vim liveness-exec.yaml apiVersion: v1 kind: Pod metadata: name: liveness-exec-pod namespace: default spec: containers: - name: liveness-exec-container image: busybox imagePullPolicy: IfNotPresent pod/liveness-exec-pod created 获取pods [root@master01 ~]#kubectl get pods NAME READY STATUS RESTARTS AGE liveness-exec-pod 0/1 ContainerCreating 0 8s web 我们查看到pods调度到node2节点上,我们登录到node2节点启动该容器 docker ps -a | grep liveness docker start 6758c5475c9a ?
2.1 创建liveness-exec.yaml [root@master ~]# more liveness-exec.yaml apiVersion: v1 kind: Pod metadata: labels: test: liveness-exec name: liveness-exec spec: restartPolicy: OnFailure containers 3.1 创建liveness-http.yaml [root@master ~]# more liveness-http.yaml apiVersion : v1 kind: Pod metadata: labels: test: liveness name: liveness-http spec: containers: - name: : Pod metadata: labels: test: liveness name: liveness-tcp spec: containers: name: liveness-tcp
请求作为liveness probe。 kubectl describe pod liveness-http 定义TCP liveness探针 第三种liveness probe使用TCP Socket。 除了readiness probe之外,该配置还包括liveness probe。容器启动15秒后,kubelet将运行第一个liveness probe。 如果liveness probe失败,容器将重新启动。 需要明确知道使用 Liveness Probe 的原因,否则不要为 Pod 使用 Liveness Probe。
概述如下: 存活(Liveness) 探针 - 探测应用是否处于健康状态,如果不健康则删除并重新创建容器. 即在什么情况下重启pod是合适的? 存活(Liveness) 因此,要使用存活(Liveness)探针,我们必须从三个可用的选项中确定一个合适的测试,如果测试失败,则需要执行pod重启. 其次, 存活(liveness)探针也不能太过简单, 否则的话可能永远不会给出容器健康状况不佳的有意义的指示. 最后, 存活(liveness)探针并不是管理和监控基于微服务的复杂应用程序的唯一工具, 但是它是最基本的保障. 在找到了合适的endpoint后, 还必须确定存活(liveness)探针测试的合适参数, 以确保它在正确的环境中运行.
本文将围绕 Kubernetes(K8s)中的存活探测 进行系统讲解,并结合大量示例,帮助你在实际生产环境中正确使用 Liveness Probe。 本文将涵盖以下内容:什么是 Kubernetes 存活探测(Liveness Probe)Kubernetes 中还有哪些探测机制如何定义 Kubernetes 存活探测Liveness Probe 的常见配置示例如何验证存活探测是否生效存活探测失败的排查思路 Liveness Probe 的最佳实践什么是 Kubernetes 存活探测(Liveness Probe):Kubernetes 存活探测是一种用于判断 容器是否仍在正常运行 的机制。 当 Pod 看起来“还在运行”,但 应用实际上已经无法正常工作 时,就非常适合使用 Liveness Probe。 Probe 与 Readiness Probe 的区别:探测类型失败后的行为Liveness重启容器Readiness停止接收流量,不重启一个常见的设计是:Readiness 控制流量Liveness
但在实际使用中,Readiness 和 Liveness 经常被混用、误用,轻则导致流量抖动,重则引发 Pod 频繁重启、雪崩效应。 1、为什么需要 Readiness 和 Liveness? Pod 是否存在、容器是否在运行但这远远不够:应用启动慢,但容器已经 Running应用卡死(死循环、线程阻塞),但进程还活着依赖数据库 / MQ 不可用,但服务仍在对外接流量Readiness 与 Liveness reason","dependency unavailable").build(); }}依赖异常 → readiness down服务仍可存活,等待依赖恢复结合 preStop 实现优雅下线3、Liveness initialDelaySeconds: 60 periodSeconds: 10 timeoutSeconds: 2 failureThreshold: 33.4 Spring Boot Liveness
但在实际使用中,Readiness 和 Liveness 经常被混用、误用,轻则导致流量抖动,重则引发 Pod 频繁重启、雪崩效应。 1、为什么需要 Readiness 和 Liveness? 是否存在、容器是否在运行 但这远远不够: 应用启动慢,但容器已经 Running 应用卡死(死循环、线程阻塞),但进程还活着 依赖数据库 / MQ 不可用,但服务仍在对外接流量 Readiness 与 Liveness 核心区别 维度 Readiness Liveness 关注点 能否接流量 是否需要重启 失败后果 从 Service 摘除 容器重启 是否影响 Pod 生命周期 否 是 适合依赖异常 ✅ 是 ❌ 否 适合进程死锁 ❌ 否 ✅ 是 一句话总结:Readiness 控制“流量”,Liveness 控制“生死” 5、Readiness + preStop 实现真正的优雅下线 在滚动升级或缩容时,如果 Pod
具体来说,有两种类型的 Probes:Liveness 和 Readiness,它们用于确保服务按预期运行。 Liveness Probes Liveness Probes 用来判断容器是否在运行。 如果 Liveness Probe 失败,Kubernetes 会认为该容器已经死亡,这时候 Kubernetes 的 kubelet 将会重启该容器。 使用 Liveness Probe 的目的是捕捉到应用程序陷入死锁的情况,无法正常工作,但进程还在运行。 区分 Readiness 和 Liveness: 避免使用相同的检查作为 Liveness 和 Readiness Probe,因为启动就绪不一定意味着健康,反之亦然。 initialDelaySeconds: 5 timeoutSeconds: 2 periodSeconds: 5 successThreshold: 1 在这个配置中: Liveness
Liveness和Readiness就是不错的选择。 二.实践步骤 2.1 系统默认的健康检查。 2.2 在Kubernetes中,可以通过Liveness探测告诉kebernetes什么时候实现重启自愈。 apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness spec: restartPolicy 的文件,创建Pod: [root@k8s-m health-check]# kubectl apply -f Liveness.yaml pod/liveness created [root@k8s-m periodSeconds:5表示每5s执行一次探测,如果连续三次执行Liveness探测均失败,那么会杀死该容器并重启。
~/ansible/liveness-probe] └─$kubectl create ns liveness-probe namespace/liveness-probe created ┌──[root ] └─$sed 's/pod-liveness/pod-liveness-1/' readiness-probe.yaml | kubectl apply -f - pod/pod-liveness 15m run=pod-liveness pod-liveness-1 1/1 Running 0 14m run=pod-liveness-1 pod-liveness pod-liveness-2 pod-liveness pod-liveness-1 pod-liveness-2 ^C 删除文件测试 ┌──[root@vms81.liruilongs.github.io -2 pod-liveness-2 pod-liveness-2 pod-liveness-1 pod-liveness-2 pod-liveness-2 pod-liveness-1 ^C 会发现
存活探针(livenessProbe)主要功能是确定何时重启容器,yaml文件如下: $ cat exec-liveness.yaml apiVersion: v1 kind: Pod metadata : labels: test: liveness name: liveness-exec spec: containers: - name: liveness image pod/liveness-exec created 定义了相应的存活探针,该探针在pod启动5s后,每隔5秒执行一次cat /tmp/healthy命令,如果该命令返回非0,则表示存活性检测失败,kubelet 查看pod的events可以看到,由于存活性检测失败,所以导致pod重启: $ k describe po liveness-exec ··· Events: Type Reason :Container failed liveness probe..
$ cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: labels: test: liveness name : liveness-exec spec: containers: - name: liveness image: quay.io/prometheus/busybox:latest 1/1 Running 1 58s $ k exec liveness-exec -- ls /tmp healthy $ k exec liveness-exec -- rm -rf /tmp/healthy $ k exec liveness-exec -- ls /tmp $ kdp Name: liveness-exec Namespace: failed liveness probe, will be restarted Normal Pulling 7s (x2 over 62s) kubelet