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

    将ShellCode放入变量中,然后修改插入可执行文件名称,运行后即可将shellCode插入到EXE中,并设置好装载地址,程序运行后会先上线,然后在执行原始的代码,在使用metaspoit生成she ...

  2. Scrapy数据解析和持久化

    Scrapy框架的使用 - pySpider - 什么是框架? - 就是一个具有很强通用性且集成了很多功能的项目模板(可以被应用在各种需求中) - scrapy集成好的功能: - 高性能的数据解析操作 ...

  3. 【架构师视角系列】QConfig配置中心系列之架构设计(一)

    目录 声明 配置中心系列文章 一.架构 基础模型 架构图 架构分层 运行规则 模块划分 Admin模块 Client模块 Server模块 二.总结 三.最后 声明 原创文章,转载请标注.https: ...

  4. .NET应用程序7种最常见的性能问题及其解决方案

    译者注:这篇文章依然是介绍.NET Framework框架下的性能问题排查,可能并不直接适用于.NET Core,但有时也能提供一些参考.   .NET应用程序7种最常见的性能问题及其解决方案 原文地 ...

  5. IDEA 2024.1:Spring支持增强、GitHub Action支持增强、更新HTTP Client等

    有段时间没有更新IDEA了,早上看到 IntelliJ IDEA 2024.1 EAP 5发布的邮件提示,瞄了一眼,发现真的是越来越强了,其中不少功能对我来说还是非常有用的.也许这些能力对关注DD的小 ...

  6. Kafka集群搭建与SpringBoot项目集成

    本篇文章的目的是帮助Kafka初学者快速搭建一个Kafka集群,以及怎么在SpringBoot项目中使用Kafka. kafka集群环境包地址:https://pan.baidu.com/s/1Mar ...

  7. python-鼠标宏

    按下鼠标左键, 连击 按下鼠标右键, 停止 import win32api import time from pynput.mouse import Button, Controller mouse ...

  8. 解决Spring boot 单元测试,无法读取配置文件问题。

    1.启动类上加上@EnableConfigurationProperties 2.springboot版本springboot 2.X版本在单元测试中读取不到yml配置文件的值这是个大坑,在项目中写单 ...

  9. Mysql 插入timestamp没有使用默认值问题

    在一次升级过程中,发现Mysql插入数据报了个错 Column 'create_time' cannot be null. 但是看了下这个字段虽然是非null,但是是有默认值的 `create_tim ...

  10. django学习第一天---MVC和MTV框架,request对象的属性,url路由系统

    jinja2模板渲染简单使用 下载安装 pip install jinja2 使用示例 html文件中写法 <!DOCTYPE html> <html lang="zh-C ...