k8s 就绪探针

news2024/11/27 8:32:32

【k8s 系列】k8s 学习二十,就绪探针

提起探针,不知兄dei 们是否有印象,之前我们分享过存活探针,分享存活探针是如何确保异常容器自动重启来保持应用程序的正常运行,感兴趣的可以查看文章 k8s 系列k8s 学习十七,存活探针副本机制2

今天我们就单独来分享一下就绪探针

就绪探针

就绪探针也是分为 3 种类型

  • Exec 探针

在执行进程的地方,容器的状态是由进程的退出状态码决定的

  • HTTP GET 探针

向容器中发送 GET 请求,通过响应的 HTTP 状态码判断容器是否准备好了

  • TCP soket 探针

打开一个 TCP 连接到容器的指定端口,如果可以建立连接,那么就认为容器是已经准备好了

看了上述 3 种类型,是不是感觉和存活探针好像也差不多

那么我们继续看看就绪探针的细节,存活探针和就绪探针的区别

启动容器的时候,存活探针和就绪探针,都可以给 k8s 配置一个等待时间,当等待时间到了之后,才可以执行检查的操作

存活探针就绪探针
存活探针检查容器的时候,如果检查未通过,会立马重启 pod周期性的检查容器,
若检查不通过,证明 pod 没有准备好,那么 该 pod 就会从服务中删除掉
当检查 pod 再次准备就绪了,那么该 pod 又会重新添加到服务中
  • 存活探针是通过杀死异常的容器,使用新的正常的容器来替代他们,最终保证 pod 能够正常工作
  • 就绪探针是确认只有那些准备好处理请求的 pod 才会被加入到服务中来

画一个图来说明一下效果:

对于未就绪的 pod ,就绪探针仍然是周期性的探测,若 pod 未就绪,也不会杀掉或者重启 pod,当 pod 被检测到就绪后,该 pod 仍然是可以被加入到服务中的

此处的从服务中删除和加入到服务中,具体体现是在 service 的 endpoints 列表中的 IP 和 PORT 信息

如何在 pod 中加入就绪探针

还记得之前我们我们演示存活探针的例子是在什么资源里面演示的吗?我们是在 RC 和 RS 里面演示,因为 RC / RS 可以动态的扩缩 pod 的数量,演示起来方便

查看我们实验环境的 rs 资源信息

编辑 rs 资源清单,计入就绪探针

readinessProbe:
  exec:
    command:
    - ls
    - /var/xmtready

删除当前的 pod

学了 RS 和 RC 后我们知道,当修改了 RS 或者 RC 资源后,对于现有的 pod 并不会影响,只有新生成一个 pod 的时候才会用我们最新的容器模板来创建 pod

因此,我们可以先删除掉 pod

kubectl delete po --all

查看到效果,生成的每一个 pod 都是未 就绪的,我们可以查看任意 pod ,describe 查看一下详情

关于 Readiness: exec [ls /var/xmtready] delay=0s timeout=1s period=10s #success=1 #failure=3 一栏,参数和之前的存活探针含义一致,此处就不在赘述了

来关注一下报错信息:

kubelet, minikube  Readiness probe failed: ls: cannot access /var/xmtready: No such file or directory

可以看到失败的原因是就绪探针,探测失败了,没有办法正确访问到 pod 里面的 /var/xmtready 文件或者目录

此处也就是模拟 pod 需要正常处理请求的前置条件,必须要前置条件准备好之后, pod 才是就绪的

人为准备好就绪条件

那么对于现在实验的这个情况,我们可以认为的在 pod 里面加入就绪的前置条件,那就是在 pod 中创建一个 /var/xmtready 文件或者目录即可

kubectl exec kubia-rs-4kvg2 -- touch /var/xmtready

此时对于 pod kubia-rs-4kvg2,已经有了就绪的前置条件,那么该 pod 就会被认为是就绪了,就可以正常处理外部的请求了,因为我们在 kubectl get po 的时候就可以看到 READY 是 1/1

就绪探针我们在实际工作中如何使用比较好呢?

此处要说明一下,上述方式是为了演示方便,才使用直接去人为添加探针的前置条件来添加或者删除 pod 到 服务中来

前面的文章也分享到,我们应该通过使用标签的方式来从服务中添加 pod 或者 删除 pod

在工作中,我们都可以将就绪探针加入到 pod 中,但是对于何时才算就绪,应用程序达到了什么状态才算是就绪,才算是能够正常处理外部客户端打过来的请求,这个就需要业务实现者根据自身的需求来定义了

以上就是今天分享到的 就绪探针,顺带回顾了一下存活探针的,希望对你有帮助

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~
更多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/742408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

揭示实时定位控件在配送小程序中的作用与价值

随着互联网技术的发展,配送小程序在生活中扮演着越来越重要的角色。而实时定位控件作为配送小程序中不可或缺的一部分,具有极大的作用与必要性。本文将以【乔拓云】第三方工具为例子,从商家的方面,对实时定位控件在配送小程序中的…

我说MySQL每张表最好不超过2000万条数据,面试官让我回去等通知?

事情是这样的 下面是我朋友的面试记录: 面试官:讲一下你实习做了什么。 朋友:我在实习期间做了一个存储用户操作记录的功能,主要是从MQ获取上游服务发送过来的用户操作信息,然后把这些信息存到MySQL里面,…

怎么在unity3D工程中导入Newtonsoft.Json

怎么在unity3D工程中导入Newtonsoft.Json unity旧版本自带的json接口太难用了(JsonUtility),不能序列化字典和列表等对象,只能序列化基础类型对象,所以基本等于没有。 Newtonsoft.Json-for-Unity-master 的github下载…

【Linux后端服务器开发】Shell外壳——命令行解释器

目录 一、Shell外壳概述 二、描述Shell外壳原理的生动例子 三、C语言模拟实现Shell外壳 一、Shell外壳概述 在狭义上 , 我们称Linux操作系统的内核为 Linux 在广义上 , Linux发行版 Linux内核 外壳程序 就比如市面上现在的redhat, centos, ubuntu等等我们耳熟能详的Linux发…

一文教会你风格迁移CycleGAN从入门到高阶再到最终成功魔改(附成功魔改代码)

专栏导读 🔥🔥本文已收录于专栏:《风格迁移之从入门到成功魔改》,欢迎免费订阅 ​此专栏用于带你从零基础学会什么是风格迁移,风格迁移有什么作用,传统做法和Cyclegan的原理,及其优缺点&#x…

Docker NGINX 加载Geoip模板

前提环境: Docker 环境 涉及参考文档: ngx_http_geoip_module 模块Loki NGINX Service MeshGeoIP IP库 一、下载GeoIP IP库 二、配置Nginx主配置文件 vim /data/nginx/MangoMoh/dos/nginx.confuser nginx; worker_processes auto;error_log /var…

ncnn源码阅读(三)----数据结构Mat

文章目录 数据结构Mat成员变量成员方法构造函数1、普通构造函数2、外部数据指针构造函数3、拷贝构造函数和opertor 深拷贝函数类型转换引用计数的实现其他数据操作函数 数据结构Mat 个人认为一个框架中的比较核心的两个点,一个是数据结构,一个任务调度…

STM32F407ZGT6正点原子F4探索者开发板 -- 跑马灯例程

1. USB 转USART1 烧录工具 FlyMcu 2. FlyMcu 配置 3. 查看开发板原理图,LED0、LED1 硬件连接 LED0 - PF9 LED1 - PF10 PF9 0, LED0 亮,PF9 1,LED0 灭 PF10 0, LED1 亮,PF10 1,LED1 灭 4.…

cesium 实现多颗卫星与多颗地面站雷达通信效果

最主要的部分是计算空间内两点之间的距离以及卫星对地点是否在雷达扫描范围内 先看效果 1.计算空间内两点之间的距离 //计算距离 function distance(point1, point2) {var point1cartographic = Cesium.Cartographic.fromCartesian(point1);var</

医师访问学者申请需要注意什么?

医师访问学者申请是医学领域中一项重要的学术交流和合作方式。在准备申请时&#xff0c;有几个关键点需要注意&#xff0c;下面就随知识人网小编一起来看一看。 1. 目标和动机&#xff1a;明确访问学者的目标和动机&#xff0c;例如学术研究、专业发展、文化交流等。清楚表达你…

产品经理学习画原型-登录界面(交互样式设置)

经过第一阶段学习&#xff0c;目前效果如下&#xff1a; 下面我们来加入交互样式效果&#xff1a; 效果&#xff1a;

[SSM]MyBatis的缓存与逆向工程

目录 十三、MyBatis的缓存 13.1一级缓存 13.2二级缓存 13.3MyBatis集成EhCache 十四、MyBatis的逆向工程 14.1逆向工程配置与生成 14.2测试 十三、MyBatis的缓存 缓存&#xff1a;cache 缓存的作用&#xff1a;通过减少IO的方式&#xff0c;来提高程序的执行效率。 myb…

【分布式】 ELK 企业级日志分析系统 二

目录 一、FilebeatELK 部署1.1 环境部署 二、grok 正则捕获插件mutate 数据修改插件multiline 多行合并插件date 时间处理插件 一、FilebeatELK 部署 1.1 环境部署 Node1节点&#xff08;2C/4G&#xff09;&#xff1a;node1/192.168.137.101 Elasticsearch Node2节点&…

【C++顺序容器】forward_list的成员函数和非成员函数

目录 forward_list 1. forward_list的成员函数 1.1 构造、析构和赋值运算符重载 1.1.1 构造函数 1.1.2 析构函数 1.1.3 赋值运算符重载 1.2 迭代器 1.3 容量 1.4 元素访问 1.4.1 遍历方法 1.5 修改器 1.6 操作 1.7 观察者 2. forward_list的非成员函数 forward_l…

npm5中本地间模块引用的最好方式(附带引用方法总结)

引用其他的包 正常情况下在项目 package.json 所在的目录&#xff08;一般也是项目根目录&#xff09;运行npm install xxxx 命令之后&#xff0c;会从远程或者代理地址下载xxxx包到node_modules&#xff0c;然后在package.json生成对应的包名和版本 如果想要依赖本地自己开发…

TypeScript 学习笔记(一):类型

文章目录 一、常见类型1. 数组2. 布尔3. 数值4. 字符串5. object6. null 和 undefined7. symbol7.1 作为属性名7.2 属性名遍历7.3 静态方法&#xff1a;Symbol.for()和 Symbol.keyFor()7.4 内置 symbol 值7.4.1 Symbol.hasInstance7.4.2 Symbol.isConcatSpreadable7.4.3 Symbol…

第四十五章Java 接口

Java 接口 接口&#xff08;英文&#xff1a;Interface&#xff09;&#xff0c;在JAVA编程语言中是一个抽象类型&#xff0c;是抽象方法的集合&#xff0c;接口通常以interface来声明。一个类通过继承接口的方式&#xff0c;从而来继承接口的抽象方法。 接口并不是类&#x…

DevOps(二)

CD 1. 平台选择2. 技术选型3. 阶段性目标4. 搭建示例4.1 环境准备(节点机)1. java版本升级2. 编译安装git3. docker安装4. docker-compose安装5. sonarqube安装6. harbor安装7. gitlab私服 4.2 示例一&#xff08;手动&#xff09;1. 创建项目2. 编码3. Dockerfile4. 拷贝pytho…

【linux】线程详解

线程 线程的概念 在官方书籍对于线程的概念&#xff1a; 1.在进程内部的执行流 2.线程比进程粒度更细&#xff0c;调度成本更低。 3.线程是CPU调度的最小单位。 线程&#xff08;tcb&#xff09;&#xff1a;进程&#xff08;pcb&#xff09; n&#xff1a;1 进程和线程在执…

Java 动态规划 面试题 17.16. 按摩师

代码展示&#xff1a; class Solution {public int massage(int[] nums) {int nnums.length;if(n0){return 0;}//创建数组int f[]new int[n]; //f[i]表示接i位置的最长时间int g[]new int[n]; //g[i]表示不接i位置的最长时间//初始化f[0]nums[0];g[0]0;//填充数组for(int i1;i…