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. 计算机网络|思维导图|自顶向下方法|MindMaps资料分享

    前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕数据结构https://blog.csdn.net/yu_cblog/category_11490888.html?spm=1001.2014. ...

  2. macOS 上 常用的操作

    首先 mac上 若使用的是windows的键盘,那么需要把ctrl 键,设置成 cmd键,因为mac上大多数操作都是 基于cmd键. 1.将ctrl键,修改为cmd键,这样后 复制.粘贴.剪切.全选等 ...

  3. FDConnection的事务测试讲解。。

    总之用事务的宗旨是: 1.不用嵌套事务EnableNested设置为False 2.事务一定要回滚,避免发生异常的情况下,没有回滚 造成,不可估量的错误. try frmClientDm.MyMain ...

  4. .NET Core开发实战(第27课:定义Entity:区分领域模型的内在逻辑和外在行为)--学习笔记

    27 | 定义Entity:区分领域模型的内在逻辑和外在行为 上一节讲到领域模型分为两层 一层是抽象层,定义了公共的接口和类 另一层就是领域模型的定义层 先看一下抽象层的定义 1.实体接口 IEnti ...

  5. CF131D Subway 题解

    题目传送门 前置知识 强连通分量 | 最短路 解法 考虑用 Tarjan 进行缩点,然后跑最短路. 缩点:本题的缩点有些特殊,基于有向图缩点修改而得,因为是无向图,所以在 Tarjan 过程中要额外记 ...

  6. JS Leetcode 81. 搜索旋转排序数组 II 题解,补救二分法的可行性

    壹 ❀ 引 今日LeetCode题为153. 寻找旋转排序数组中的最小值,在10个月前,我已在JS leetcode 寻找旋转排序数组中的最小值 题解分析,你不得不了解的二分法一文中写了本题的题解,所 ...

  7. NC19246 数据结构

    题目链接 题目 题目描述 qn姐姐最好了~ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, 1 l r 询问区间[l,r]内的元素和 2 l r 询问区间[l,r]内的元素的平方和 3 l r ...

  8. 《系列二》-- 10、initialize-初始化bean

    目录 initializeBean 方法源码如下 二.重要操作 2.1 应用 Aware 2.2 applyBeanPostProcessorsBeforeInitialization: 2.3 in ...

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

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

  10. C++ 指针的错误释放

    错误代码: #include <iostream> int main() { int* ptr = (int*)malloc(4); int i = 1111; ptr = &i; ...