Pod探针是Kubernetes中的一种机制,用于检测Pod中的容器是否正常运行。它主要有三种类型:存活探针(LivenessProbe)、就绪探针(ReadinessProbe)和启动探针(StartupProbe)。

  1. 存活探针(LivenessProbe):用于检测容器是否仍在运行。如果存活探针检测失败,kubelet将根据配置的重启策略对容器进行相应的处理。如果未配置存活探针,则默认状态为成功。这主要用于判断Pod是否需要重启。
  2. 就绪探针(ReadinessProbe):用于检测容器内的程序是否健康。如果就绪探针的返回值为成功,则表示容器已经完成启动,并且程序已经可以接受流量。这主要用于判断Pod是否能够提供正常服务。
  3. 启动探针(StartupProbe):这是Kubernetes 1.16版本后新增的探测方式,用于判断容器内的应用程序是否已经启动。如果配置了启动探针,它会先禁止其他的探测,直到启动探针成功为止。成功后,将不再进行探测。这主要适用于容器启动时间较长的场景。

对于这三种探针,它们的检测方式主要有三种:

  1. ExecAction:在容器内执行一个命令,如果命令的返回值为0,则认为容器健康。
  2. TCPSocketAction:通过TCP连接检查容器内的端口是否通畅。如果端口通畅,则认为容器健康。
  3. HTTPGetAction:通过应用程序暴露的API地址来检查程序是否正常运行。如果状态码为200~400之间,则认为容器健康。

请注意,这三种检查方式在同一时间只能使用一种。另外,探针检查参数配置中,还包括初始化时间(initialDelaySeconds)、超时时间(timeoutSeconds)、检测间隔(periodSeconds)、检查成功次数(successThreshold)和检测失败次数(failureThreshold)等参数,用于更精确地控制探针的行为。

apiVersion: v1
kind: Pod
metadata:
name: liveness-example
spec:
containers:
- name: startup
image: k8s.gcr.io/startup
startupProbe:
exec:
command: ["/bin/sh", "-c", "until nc -z localhost 8080; do echo waiting for server; sleep 2; done;"]
initialDelaySeconds: 10
failureThreshold: 30
- name: readiness
image: k8s.gcr.io/readiness
readinessProbe:
httpGet:
path: /readiness
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 1
- name: liveness
image: k8s.gcr.io/liveness
ports:
- containerPort: 8080
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
timeoutSeconds: 1
periodSeconds: 10
successThreshold: 1
failureThreshold: 3

将这三个探针组合使用的好处包括:

避免误判:通过 startupProbe,可以确保在容器完全启动之前不会触发其他两个探针,从而避免因为容器还在初始化阶段而导致的误判。

提高可用性:livenessProbe 可以及时检测并处理容器内部的问题,而 readinessProbe 则可以确保容器在准备好之前不会接收流量,从而提高应用程序的可用性。

更精细的控制:通过为这三个探针配置不同的检查条件和阈值,可以更精细地控制容器的生命周期和流量路由,从而满足不同的应用程序需求。

总之,组合使用 startupProbe、livenessProbe 和 readinessProbe 可以提供更全面、更可靠的容器状态和生命周期管理策略,确保应用程序在 Kubernetes 环境中稳定、高效地运行。

readinessProbe 当检测失败后,将 Pod 的 IP:Port 从对应的 EndPoint 列表中删除。

livenessProbe 当检测失败后,将杀死容器并根据 Pod 的重启策略来决定作出对应的措施。

三种探针的执行顺序

在容器启动时,Kubernetes会按照以下顺序进行探针检查:

StartupProbe:如果定义了StartupProbe,它会首先被执行。StartupProbe用于判断容器是否已经启动并准备接受请求。如果StartupProbe检查失败,Kubernetes会认为容器启动失败,并且不会执行LivenessProbe和ReadinessProbe。

ReadinessProbe:当StartupProbe成功或者未定义时,ReadinessProbe将开始执行。ReadinessProbe用于检查容器是否已经准备好接收外部流量。如果ReadinessProbe检查失败,Kubernetes会将Pod从服务中移除,不会再将新的流量发送到该Pod。

LivenessProbe:最后执行的是LivenessProbe。LivenessProbe用于检查容器是否还在运行。如果LivenessProbe检查失败,Kubernetes会杀死容器并尝试重启它。

pod探针的三种类型及三种检测方式的更多相关文章

  1. VLAN的三种类型及三种属性

  2. PHP的数组分为两种类型,一种是索引数组,一种是关联数组。有如下关联数组,我们如何获取它的第一个key和value呢?

    示例:$items=array('name'=>'sjm','age'=>'26','sex' => '男','location'=>'北京'); //当然用循环然后break ...

  3. ES6学习笔记(八)第七种类型Symbol

    1.概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突.比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突.如果有一种 ...

  4. 远离“精神乞丐”(IBM的前CEO郭士纳把员工分为四种类型)

    语音丨吴伯凡 乞丐与其说是一种身份, 不如说是一种精神状态, 习惯性索取且心安理得, 习惯性寻求安慰,习惯性抱怨, 与之截然对立的, 是“操之在我”(Proactive)的精神, 乞丐型员工是公司内部 ...

  5. spring的2种类型转换器

    spring有2种类型转换器,一种是propertyEditor,一种是Converter.虽然都是类型转换,但是还是有细微差别. 所以这里以一个例子的形式来分析一下这2种类型转换的使用场景和差别. ...

  6. Kubernetes service 三种类型/NodePort端口固定

    Kubernetes service 三种类型 • ClusterIP:默认,分配一个集群内部可以访问的虚拟IP(VIP)• NodePort:在每个Node上分配一个端口作为外部访问入口• Load ...

  7. 链路层三种类型的MAC地址

    若需要转载,请注明出处. 我们知道,链路层都是以MAC地址来进行通信双方的地址标识的,如下图:在应用中根据接收方的多寡来进行划分,可分为以下三种: 单播(Unicast) 多播(Multicast) ...

  8. matlab for循环的三种类型

    学习了一半了,发现一个好网站,就是我想写这篇博客用的,网络真是个好东西!纪念下国庆啦 网址:http://www.yiibai.com/matlab/matlab_for_loop.html ---- ...

  9. 记住 Python 变量类型的三种方式

    title: 记住变量类型的三种方式 date: 2017-06-11 15:25:03 tags: ['Python'] category: ['Python'] toc: true comment ...

  10. C# enum、int、string三种类型互相转换

    enum.int.string三种类型之间的互转 #代码: public enum Sex { Man=, Woman= } public static void enumConvert() { in ...

随机推荐

  1. 2.11 PE结构:添加新的节区

    在可执行PE文件中,节(section)是文件的组成部分之一,用于存储特定类型的数据.每个节都具有特定的作用和属性,通常来说一个正常的程序在被编译器创建后会生成一些固定的节,通过将数据组织在不同的节中 ...

  2. 《Spring 手撸专栏》| 开篇介绍,我要带新人撸 Spring 啦!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 不正经!写写面经,去撸Spring源码啦? 是的,在写了4篇关于Spring核心源码 ...

  3. docker中的mysql时区修改

    永久修改 进入容器 docker exec -it mysql5.7 bash 查看当前时区 date -R 修改时区 cp /usr/share/zoneinfo/PRC /etc/localtim ...

  4. 安装Electron时卡在install.js不动的解决方案

    问题来源,发现即使 源切换成淘宝的之后,安装 electron的时候还是慢死,郁闷,后来百度才发现,原来,还需要设置一个地方!!! 经过试验,果然快了 爽.... 之前在安装Electron的时候,经 ...

  5. 使用OBS Studio软件进行桌面录屏

    操作系统 :Windows10_x64 OBS Studio是开源免费的录屏和直播软件,支持Windows.macOS及Linux操作系统. 这里记录下桌面录屏和桌面区域录屏的使用,也方便我后续查阅( ...

  6. 一份55页Java性能调优PPT分享

    提起"肖桦"这个人,相信很多小伙伴对他比较陌生.除去现任唯品会资深技术专家头衔外,他更为技术圈所熟知的是他的著名开源项目:SpringSide. SpringSide是以sprin ...

  7. NC23413 小A买彩票

    题目链接 题目 题目描述 小A最近开始沉迷买彩票,并且希望能够通过买彩票发家致富.已知购买一张彩票需要3元,而彩票中奖的金额分别为1,2,3,4元,并且比较独特的是这个彩票中奖的各种金额都是等可能的. ...

  8. 使用html+css+js实现一个仿钉钉打卡按钮

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. SpringCloud 注册中心Consul实战

    介绍 Consul是HashiCorp公司推出的开源工具,Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色.轻量级的特点.Consul是分布式的.高可用的. 可 ...

  10. 神经网络优化篇:详解TensorFlow

    TensorFlow 先提一个启发性的问题,假设有一个损失函数\(J\)需要最小化,在本例中,将使用这个高度简化的损失函数,\(Jw= w^{2}-10w+25\),这就是损失函数,也许已经注意到该函 ...