存活探针

Kubernetes提供了自愈的能力,具体就是能感知到容器崩溃,然后能够重启这个容器。但是有时候例如Java程序内存泄漏了,程序无法正常工作,但是JVM进程却是一直运行的,对于这种应用本身业务出了问题的情况,Kubernetes提供了Liveness Probe机制,通过检测容器响应是否正常来决定是否重启,这是一种很好的健康检查机制。
毫无疑问,每个Pod最好都定义Liveness Probe,否则Kubernetes无法感知Pod是否正常运行。
Kubernetes支持如下三种探测机制。

  • HTTP GET:向容器发送HTTP GET请求,如果Probe收到2xx或3xx,说明容器是健康的。
  • TCP Socket:尝试与容器指定端口建立TCP连接,如果连接成功建立,说明容器是健康的。
  • Exec:Probe执行容器中的命令并检查命令退出的状态码,如果状态码为0则说明容器是健康的。

与存活探针对应的还有一个就绪探针(Readiness Probe),将在就绪探针(Readiness Probe)中会详细介绍。

HTTP GET

HTTP GET方式是最常见的探测方法,其具体机制是向容器发送HTTP GET请求,如果Probe收到2xx或3xx,说明容器是健康的,定义方法如下所示。

apiVersion: v1
kind: Pod
metadata:name: liveness-http
spec:containers:- name: livenessimage: nginx:alpinelivenessProbe:           # liveness probehttpGet:               # HTTP GET定义path: /port: 80imagePullSecrets: - name: default-secret

创建这个Pod。

$ kubectl create -f liveness-http.yaml
pod/liveness-http created

如上,这个Probe往容器的80端口发送HTTP GET请求,如果请求不成功,Kubernetes会重启容器。

查看Pod详情。

$ kubectl describe po liveness-http
Name:               liveness-http
......
Containers:liveness:......State:          RunningStarted:      Mon, 03 Aug 2020 03:08:55 +0000Ready:          TrueRestart Count:  0Liveness:       http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3Environment:    <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-vssmw (ro)
......

可以看到Pod当前状态是Running,Restart Count为0,说明没有重启。如果Restart Count不为0,则说明已经重启。

TCP Socket

TCP Socket尝试与容器指定端口建立TCP连接,如果连接成功建立,说明容器是健康的,定义方法如下所示。

apiVersion: v1
kind: Pod
metadata:labels:test: livenessname: liveness-tcp
spec:containers:- name: livenessimage: nginx:alpinelivenessProbe:           # liveness probetcpSocket:port: 80imagePullSecrets: - name: default-secret

Exec

Exec即执行具体命令,具体机制是Probe执行容器中的命令并检查命令退出的状态码,如果状态码为0则说明健康,定义方法如下所示。

apiVersion: v1
kind: Pod
metadata:labels:test: livenessname: liveness-exec
spec:containers:- name: livenessimage: nginx:alpineargs:- /bin/sh- -c- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600livenessProbe:           # liveness probeexec:                  # Exec定义command:- cat- /tmp/healthyimagePullSecrets: - name: default-secret

上面定义在容器中执行cat /tmp/healthy命令,如果成功执行并返回0,则说明容器是健康的。上面定义中,30秒后命令会删除/tmp/healthy,这会导致Liveness Probe判定Pod处于不健康状态,然后会重启容器。

Liveness Probe高级配置

上面liveness-http的describe命令回显中有如下行。

Liveness: http-get http://:8080/ delay=0s timeout=1s period=10s #success=1 #failure=3

这一行表示Liveness Probe的具体参数配置,其含义如下:

  • delay:延迟,delay=0s,表示在容器启动后立即开始探测,没有延迟时间
  • timeout:超时,timeout=1s,表示容器必须在1s内进行响应,否则这次探测记作失败
  • period:周期,period=10s,表示每10s探测一次容器
  • success:成功,#success=1,表示连续1次成功后记作成功
  • failure:失败,#failure=3,表示连续3次失败后会重启容器

以上存活探针表示:容器启动后立即进行探测,如果1s内容器没有给出回应则记作探测失败。每次间隔10s进行一次探测,在探测连续失败3次后重启容器。
这些是创建时默认设置的,您也可以手动配置,如下所示。

apiVersion: v1
kind: Pod
metadata:name: liveness-http
spec:containers:- image: k8s.gcr.io/livenesslivenessProbe:httpGet:path: /port: 8080initialDelaySeconds: 10    # 容器启动后多久开始探测timeoutSeconds: 2          # 表示容器必须在2s内做出相应反馈给probe,否则视为探测失败periodSeconds: 30          # 探测周期,每30s探测一次successThreshold: 1        # 连续探测1次成功表示成功failureThreshold: 3        # 连续探测3次失败表示失败

initialDelaySeconds一般要设置大于0,这是由于很多情况下容器虽然启动成功,但应用就绪也需要一定的时间,需要等就绪时间之后才能返回成功,否则就会导致probe经常失败。
另外failureThreshold可以设置多次循环探测,这样在实际应用中健康检查的程序就不需要多次循环,这一点在开发应用时需要注意。

配置有效的Liveness Probe

  • Liveness Probe应该检查什么
    一个好的Liveness Probe应该检查应用内部所有关键部分是否健康,并使用一个专有的URL访问,例如 /health,当访问 /health 时执行这个功能,然后返回对应结果。这里要注意不能做鉴权,不然 probe 就会一直失败导致陷入重启的死循环。
    另外检查只能限制在应用内部,不能检查依赖外部的部分,例如当前端web server不能连接数据库时,这个就不能看成web server不健康。
  • Liveness Probe必须轻量 Liveness
    Probe不能占用过多的资源,且不能占用过长的时间,否则所有资源都在做健康检查,这就没有意义了。例如Java应用,就最好用HTTP GET方式,如果用Exec方式,JVM启动就占用了非常多的资源。

了解更多Kubernetes集群相关知识和使用方法请猛击这里。

存活探针(Liveness Probe)相关推荐

  1. Kubernetes-存活探针(liveness probe)(十六)

    1 介绍 1.1 概念   存活探针(liveness probe):检查容器是否还在运行,可以为pod中的每个容器单独指定存活探针.如果探测失败了,K8S将定期执行探针并重新启动容器. 1.2 3种 ...

  2. linux探针,存活探针(Liveness)、就绪探针(Readiness)、启动探针(Startup)、容器钩子

    一.探针 1.1.探针类型 LivenessProbe 用于判断容器是否存活(running状态),如果LivenessProbe探针探测到容器不健康,则kubelet杀掉该容器,并根据容器的重启策略 ...

  3. k8s存活探针的简介与使用

    简介 k8s可以通过存活探针liveness probe检查容器是否还在运行.可以为pod中的容器单独指定存活探针,如果探测失败,k8s将定期执行探针并重启容器 k8s有三种探测容器的机制: HTTP ...

  4. K8S使用就绪和存活探针配置健康检查

    本文转自:K8S使用就绪和存活探针配置健康检查 | 王柏元的博客,评论请前往原网站 一. 健康检查 健康检查(Health Check)可用于服务运行的状态监控,比如腾讯旗下的DNSPOD的D监控,要 ...

  5. kubernetes之容器探针(liveness and readiness probe)

    1.为什么需要容器探针 只要将pod调度到某个节点,Kubelet将运行pod的容器,如果该pod的容器有一个或所有的都终止运行(容器的主进程崩溃),Kubelet将重新启动容器,那么即使应用程序本身 ...

  6. Kubernetes(k8s)四、Pod生命周期(初始化容器的应用,探针liveness、readliness应用,)

    Pod生命周期 学习目标:初始化容器的应用及两个探针的应用 探针 是由 kubelet 对容器执行的定期诊断: Kubelet 可以选择是否执行在容器上运行的三种探针执行和做出反应: liveness ...

  7. K8s之就绪探针和存活探针

    前言:集群中自带两种探针方式,先演示下各种探针的使用方法和功能表现 就绪探针(判断是否就绪,状态栏READY) 测试pod apiVersion: v1 kind: Pod metadata:name ...

  8. pod健康检查之容器的存活探针、就绪探针、启动探针

    前言 环境:centos7.9 docker-ce-20.10.9 kubernetes-version v1.22.6 为什么需要存活探针和就绪探针 在前面我们介绍过,可以通过配置restartPo ...

  9. SpringBoot中就绪探针和存活探针

    文章目录 1.介绍 2.Kubernetes探针 3.就绪探针和存活探针在Actuator 3.1.就绪和活跃状态转换 4. 管理应用程序可用性 4.1. 更新可用性状态 4.2.监听变化 1.介绍 ...

  10. Kubernetes 存活探针和就绪探针的最佳实践

    Kubernetes存活探针和就绪探针的最佳实践 [编者的话]Kubernetes提供了两种探针来检查容器的状态,Liveliness和Readiness,根据官方文档,Liveliness探针是为了 ...

最新文章

  1. [MFC]设置文件夹目录时遇到的问题
  2. 2021巨量引擎母婴行业白皮书
  3. 博士招生 | 北京大学和中山大学博士申请考核还有名额,门槛不高,速来
  4. 花生壳+FileZilla搭建公网FTP服务器
  5. cordova 美洽_phonegap-cordova-美洽客服插件-ios
  6. matlab sprintf函数的用法
  7. 【Racket】安装与入门
  8. 重装Linux系统后的软件安装 及 常见操作_持续更新...
  9. Javascript学习大纲
  10. Qt5初见笔记(一)使用单个.pro文件创建Hello World工程(参考Sherriff, Nicholas《Learn Qt5》)
  11. 移动用户体验设计:iOS APP体验设计
  12. 人生需有三心境,你有吗?
  13. 针对2021.12.12北大附中信息学奥赛选拔比赛应对策略
  14. off文件转obj文件
  15. ASP.NET教育管理系统源码【源码分享】
  16. l28n和开发版_*** am335x开发板的疑问以及解答
  17. Linux设备驱动开发基础
  18. 【Linux】IFS是个什么鬼
  19. boss直聘zp_stoken逆向分析源码放送
  20. jperf(jperf使用手册)

热门文章

  1. Ffmpeg 微信amr转换Mp3
  2. 音乐计算机锦鲤抄,锦鲤抄 (feat. 银临)
  3. HMC——Hamiltonian Monte Carlo笔记
  4. python爬取网页数据总结_pycharm爬取网页数据
  5. You have 3 unapplied migration(s). Your project may not work properly until you apply the migrations
  6. 解决Quartus.18.0版本 usb bluster插上蓝屏问题
  7. html将数据永久保存起来,数据保存(永久保存)方式(示例代码)
  8. verilog实现N分频电路
  9. 测试Python的poplib模块读取邮箱信息
  10. Exif的Orientation信息说明