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. C/C++ 简易异或加密的分析

    异或,加解密shellcode代码的简单分析方法. #include <stdio.h> #include <Windows.h> unsigned char buf[] = ...

  2. Walrus 实用教程|Walrus + Gitlab,打通CI/CD 自动化交付!

    Walrus file 是 Walrus 0.5 版本推出的新功能,用户可以通过一个非常简洁的 YAML 描述应用或基础设施资源的部署配置,然后通过 Walrus CLI 执行 walrus appl ...

  3. 在K8S中,集群可以做哪些优化?

    在Kubernetes(简称K8s)集群中,可以进行多种优化以提升性能.稳定性和资源利用率.以下是一些常见的优化措施: 控制面组件优化: kube-apiserver 高可用与扩展:通过配置多个API ...

  4. 教你用JavaScript实现进度条

    案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个进度条.进度条数字自动增加,条状图片动画演示进度完成度.通过实战我们将学会函数fun ...

  5. SESSION会话机制解析

    Windows Session(会话)的概念 会话 session 是由代表单个用户登录会话的所有进程和系统对象组成的.其中的对象包括所有的窗口,桌面和windows stations.桌面是特定se ...

  6. yapi 个人空间 这个分组的问题

    总结:yapi个人空间分组的问题,我暂时不用理睬 他自己自由,但是 不允许他 创建非个人空间的分组.这点留意 避免不统一.所有的分组都必须我自己来创建,不允许他们私自创建.

  7. NC24961 Hotel

    题目链接 题目 题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and ...

  8. NC16671 [NOIP2006]金明的预算方案

    题目链接 题目 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算, ...

  9. 多层PCB线路板制作流程

    PCB制作第一步是整理并检查pcb多层线路板布局(Layout).电路板制作工厂收到PCB设计公司的CAD文件,由于每个CAD软件都有自己独特的文件格式,所以深圳PCB板厂会转化为一个统一的格式Ger ...

  10. Python中`yield`关键字详解

    Python中`yield`关键字有什么用? Python中yield关键字有什么用? 它能做什么? 例如,我试图理解这段代码1: def _get_child_candidates(self, di ...