当前位置: 首页 > news >正文

k8s中的容器探针

pod的容器健康检查---探针

probe:k8s对容器执行的定期检查,诊断。

探针的三种规则

所有的探针都是针对容器不是针对pod

1、 存活探针---livenessProbe:探测容器是否正常运行。如果发现探测失败,会杀掉容器。容器会根据重启策略来决定是否重启。

2、 流量探针/就绪探针:探测容器是否进入ready状态。并做好接受请求的准备

检测失败:Ready 0/1表示没有进入Ready状态。但是status还是Running状态实际上资源是不可用的。service也不会把请求转发到这个pod

3、 启动探针:是在容器启动后开始检测。检测容器内的应用是否启动成功。在启动探测成功之前,所有的其他探针都会处于禁用状态。一旦启动探针结束,后续操作不再受启动探针影响

在一个容器中可以有1个或多个探针。

启动探针:只在容器启动时探测

存活

就绪

probe的检查方法

probe的检测方法三种探针都是通用的

1、 exec探针:在容器中执行命令。如果命令返回码是0表示成功。

应用场景:适用于在容器内自定义检查容器健康状态的情况。

2、 httpGet:对指定IP+端口的容器发送1个httpGet的请求。是通过get请求的响应状态码来判断如果get状态码大于等于200且小于400都表示成功。

应用场景:适用于检测能否响应http的请求。例如:web容器(nginx,tomcat)

3、 tcpSocket:用于检查端口。对指定端口上的容器IP地址进行tcp检查(三次握手),检查对方服务器端口是否打开。如果端口打开则认为探测成功。

应用场景:适用于检查特定容器的端口监听状态。

类似于telnet ip+端口

诊断结果

1、 成功 容器通过了,正常运行

2、 失败 存活探针会重启

3、 未知状态 也是诊断失败。也是根据策略

存活探针

exec方式

实验举例:

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: centosname: centos
spec:replicas: 1selector:matchLabels:app: centostemplate:metadata:labels:app: centosspec:containers:- image: centos:7name: centosimagePullPolicy: Nevercommand: ["/bin/bash", "-c", "touch /opt/123.txt ; sleep 3600"]livenessProbe:exec:command: ["/usr/bin/test", "-e", "/opt/123.txt"]
#添加检测策略initialDelaySeconds: 3
#表示容器启动之后多少秒进行探测。数值建议不要设置太短。因为容器有启动时间,可能会导致无效探测
#3表示3秒periodSeconds: 2
#表示探针探测的间隔时间。每隔多少秒进行一次检查。根据需求自定义。看应用的延迟敏感度。
#如果应用非常重要是核心组件。可以间隔设置小一点failureThreshold: 2
#表示如果探测失败。失败几次之后把容器标记为不健康。
#2表示2次successThreshold: 1
#表示只要成功1次就标记为就绪。数值固定是1不能修改。根据需求自定义添加。可以不加。timeoutSecond: 1
#表示每一次探测的超时时间。每次探测必须在多少秒之内必须完成探测。
#设置时间必须要小于periodSeconds探测间隔时间。
#根据需求自定义添加,可以不加kubectl describe pod 容器名称
#查看容器的详细信息必要的核心指标:initialDelaySeconds: 3
#表示容器启动之后多少秒进行探测。数值建议不要设置太短。因为容器有启动时间,可能会导致无效探测
#3表示3秒periodSeconds: 2
#表示探针探测的间隔时间。每隔多少秒进行一次检查。根据需求自定义。看应用的延迟敏感度。
#如果应用非常重要是核心组件。可以间隔设置小一点failureThreshold: 2
#表示如果探测失败。失败几次之后把容器标记为不健康。
#2表示2次

liveness杀死容器重启。

所有探针策略会伴随整个pod的生命周期除了启动探针

httpGet方式

实验举例:

apiVersion: v1
kind: Pod
metadata:labels:run: nginx1name: nginx1
spec:containers:- image: nginx:1.22name: nginx1livenessProbe:httpGet:scheme: HTTP
#如果是默认http则可以不加port: 80initialDelaySeconds: 4periodSeconds: 2
#表示容器启动之后4秒进行探测
#表示每隔2秒检测一次

杀掉容器开始重启

正确示范:

apiVersion: v1
kind: Pod
metadata:labels:run: nginx1name: nginx1
spec:containers:- image: tomcat:8.0.52name: nginx1livenessProbe:httpGet:scheme: HTTPport: 8080path: /index.jspinitialDelaySeconds: 4periodSeconds: 2

修改为jsp格式测试

tcpSocket方式

实验举例:

apiVersion: v1
kind: Pod
metadata:labels:run: nginx1name: nginx1
spec:containers:- image: tomcat:8.0.52name: nginx1livenessProbe:tcpSocket:port: 8080initialDelaySeconds: 4periodSeconds: 2

错误示范:

apiVersion: v1
kind: Pod
metadata:labels:run: nginx1name: nginx1
spec:containers:- image: tomcat:8.0.52name: nginx1livenessProbe:tcpSocket:port: 8081initialDelaySeconds: 4periodSeconds: 2

总结

存活探针:检测失败后,会杀死容器,然后重启。探针将伴随整个容器的生命周期

1、 exec:相当于执行了一个shell命令。在容器里面执行

shell命令执行成功:返回码是0表示成功。成功1次就是探测成功

2、 httpGet:对web容器发起了一次get请求。可以添加path,指定访问的资源。返回码在大于等于200且小于400的范围之内都算成功。

3、 tcpSocket:相当于telnet,指定的容器监听端口是否打开。是否能和指定的容器监听端口进行通信。

 

就绪探针

exec方式

实验举例:

apiVersion: v1
kind: Pod
metadata:labels:run: centosname: centos
spec:containers:- image: centos:7name: centoscommand: ["/bin/bash", "-c", "sleep 3600"]readinessProbe:exec:command: ["/usr/bin/test", "-e", "/etc/passwd"]initialDelaySeconds: 4periodSeconds: 2

故障模拟:

这里删除探测的/etc/passwd路径测试

httpGet方式

实验举例:

apiVersion: v1
kind: Pod
metadata:labels:run: tomcat3name: tomcat3
spec:containers:- image: tomcat:8.0.52name: tomcat3readinessProbe:httpGet:scheme: HTTPport: 8080path: /index.jspinitialDelaySeconds: 4periodSeconds: 2

故障模拟:

这里修改tomcat容器的端口测试

tcpSocket方式

实验举例:

apiVersion: v1
kind: Pod
metadata:labels:run: nginx1name: nginx1
spec:containers:- image: tomcat:8.0.52name: nginx1readinessProbe:tcpSocket:port: 8080initialDelaySeconds: 4periodSeconds: 2

故障模拟:

这里修改tomcat容器的端口测试

总结

就绪探针(readinessProbe):pod的状态是Running但是pod的状态是notready。这个状态下容器无法提供正常的业务访问。就绪探针不会重启容器。

tcpSocket指示监听容器上的业务端口能否正常通信。如果更改了容器的启动端口。

mysql 3306 33066

tcpSocket---->33066

tcpSocket用于监听指定端口。如果在业务中修改了默认端口。会使用tcpSocket监听业务端口能否正常通信。

存活探针和就绪探针会伴随整个pod的生命周期

apiVersion: v1
kind: Pod
metadata:labels:run: nginx1name: nginx1
spec:containers:- image: tomcat:8.0.52name: nginx1readinessProbe:tcpSocket:port: 8080initialDelaySeconds: 4periodSeconds: 2

启动探针

exec方式

apiVersion: v1
kind: Pod
metadata:labels:run: tomcat3name: tomcat3
spec:containers:- image: tomcat:8.0.52name: tomcat3startupProbe:exec:command: ["/usr/bin/test", "-e", "/etc/passwd"]initialDelaySeconds: 4periodSeconds: 2

故障模拟:

这里删除/etc/passwd

heepGet方式

apiVersion: v1
kind: Pod
metadata:labels:run: tomcat3name: tomcat3
spec:containers:- image: tomcat:8.0.52name: tomcat3startupProbe:httpGet:scheme: HTTPport: 8080path: /index.jspinitialDelaySeconds: 4periodSeconds: 2

故障模拟:

这里修改tomcat容器的端口为8081测试

启动探针(startupProbe):如果探测失败。pod的状态是notready状态。启动探针会重启。

总结

启动探针(startupProbe):如果探测失败。pod的状态是notready状态。启动探针会重启。

1、 在1个yaml文件中可以有多个探针。启动、存活、就绪都针对1个容器。

2、 启动探针的优先级是最高的。只有启动探针成功。后续的探针才会执行。

3、 启动探针成功之后。后续除非重启pod。否则不会再触发重启探针。

4、 在pod的生命周期中。伴随pod的一直存在、一直探测的是存活探针和就绪探针。

5、 在pod的生命周期当中,后续的条件满足哪个探针的条件,就会触发哪个探针。

6、 就绪探针:如果不影响容器运行。status是running状态。这个时候不会重启。但是一旦容器退出,就绪探针也会重启。

容器启动和退出时的动作

postStart

postStart:容器启动钩子。容器启动之后触发的条件

preStop

preStop:容器退出钩子。容器退出之后触发的条件

实验举例

apiVersion: v1
kind: Pod
metadata:name: nginx2
spec:containers:- name: nginx2image: centos:7command: ["/bin/bash", "-c", "sleep 3600"]volumeMounts:
#声明容器的挂载卷- name: test1
#定义挂载卷名称
#不同挂载卷的名称不能重复mountPath: /opt
#定义挂载卷位置readOnly: false
#设置当前目录是否可读写
#false表示可读可写lifecycle:postStart:exec:command: ["/bin/bash", "-c", "echo hello from start >> /opt/123.txt ; sleep 10"]preStop:exec:command: ["/bin/bash", "-c", "echo hello from stop >> /opt/123.txt"]volumes:
#声明node节点上和容器内的挂载目录- name: test1
#挂载卷的名称要和挂载的容器内挂载卷名称保持一致hostPath:
#指定和容器的挂载目录path: /opt/test
#声明node节点上和容器内的/opt的挂载目录type: DirectoryOrCreate
#如果在节点上目录不存在则自动创建该目录

启动和退出的作用:

1、 启动可以自定义配置容器内的环境变量。

2、 通知机制。告诉用户容器启动完毕

3、 退出时,可以执行自定义命令。删除或者生成一些必要的程序。自定义销毁方式以及自定义资源回收的方式。以及容器的退出等待时间。

相关文章:

k8s中的容器探针

pod的容器健康检查---探针 probe:k8s对容器执行的定期检查,诊断。 探针的三种规则 所有的探针都是针对容器不是针对pod 1、 存活探针---livenessProbe:探测容器是否正常运行。如果发现探测失败,会杀掉容器。容器会根据重启策略…...

4.6 BOUNDARY CHECKS

我们现在扩展了tile矩阵乘法内核,以处理具有任意宽度的矩阵。扩展必须允许内核正确处理宽度不是tile宽度倍数的矩阵。通过更改图4.14中的示例至33 M、N和P矩阵,图4.18创建了矩阵的宽度为3,不是tile宽度(2)的倍数。图4.…...

Java集合-LinkedList

Java集合-LinkedList 特性 public class LinkedList<E> extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable1、继承于 AbstractSequentialList &#xff0c;本质上面与继承 AbstractList 没有什么区别…...

2023年阿里云云栖大会:前沿技术发布与未来展望

在2023年的阿里云云栖大会上&#xff0c;我见证了云计算和人工智能领域的又一历史性时刻。这次大会不仅是对未来科技趋势的一次深入探索&#xff0c;更是阿里云技术实力和创新能力的集中展示。 首先&#xff0c;千亿级参数规模的大模型通义千问2.0的发布&#xff0c;无疑将人工…...

houdini microscope

【英文原版-无字幕】Wavelets: a mathematical microscope 小波变换最好的入门教程了吧&#xff01;_哔哩哔哩_bilibili 只涉及模拟&#xff0c;不模拟具体对错...

Linux_CentOS_7.9配置时区及NTPdate同步之简易记录

前言&#xff1a;ntpdate命令来自英文词组”NTPdate“的拼写&#xff0c;其功能是用于设置日期和时间。ntpdate命令能够基于NTP协议设置Linux系统的本地日期和时间&#xff0c;利用NTP服务的时钟过滤器来选择最优方案&#xff0c;大大提高了可靠性和精度&#xff0c;让系统时间…...

十九:爬虫最终篇-平安银行商城实战

平安银行商场实战 需求 获取该商城商品信息 目标网址 https://m.yqb.com/bank/product-item-50301196.html?mcId1583912328849970&loginModepab&historyy&sceneModem&traceid30187_4dXJVel1iop详细步骤 1、寻找数据接口 2、对比payload寻找可疑参数 3、多…...

解决vcruntime140_1.dll无法继续执行代码的方法,一键修复dll文件丢失问题。

vcruntime140_1.dll是Windows操作系统中的一个重要的动态链接库文件&#xff0c;它与Microsoft Visual C Redistributable相关联。电脑出现关于vcruntime140_1.dll无法继续执行代码的错误弹窗是就意味着这个文件在电脑中被破坏导致丢失了&#xff0c;这将会影响一些程序不能正常…...

Elasticsearch:结合 ELSER 和 BM25 文本查询的相关搜索

Elastic Learned Spare EncodeR (ELSER) 允许你执行语义搜索以获得更相关的搜索结果。 然而&#xff0c;有时&#xff0c;将语义搜索结果与常规关键字搜索结果相结合以获得最佳结果会更有用。 问题是&#xff0c;如何结合文本和语义搜索结果&#xff1f; 首先&#xff0c;让我…...

海外社媒运营为什么需要选择优质IP代理?

跨境电商卖家尤其需要关注海外社媒运营&#xff0c;想要更好地运营Instagram、Facebook、TikTok 或 Twitter等&#xff0c;挖掘社媒潜力需要采取战略方法&#xff0c;而社交媒体IP代理在这一活动中发挥着至关重要的作用&#xff0c;下面为你详细介绍。 一、社交媒体代理IP及其运…...

Java中的性能优化:深入剖析常见优化技巧

引言 在现代软件开发中&#xff0c;性能优化是一个至关重要的话题。Java作为一门强大而广泛使用的编程语言&#xff0c;也需要开发者关注和优化性能&#xff0c;以确保应用程序能够在各种场景下高效运行。本文将深入剖析Java中的一些常见性能优化技巧&#xff0c;为开发者提供…...

k8s的yaml文件中的kind类型都有哪些?(详述版Part2/2)

目录 综述 分块详述 13、ConfigMap 14、Secret 15、Ingress 16、StorageClass 17、Namespace 18、ServiceMonitor 19、HorizontalPodAutoscaler 20、NetworkPolicy 21、CustomResourceDefinition 22、Role 23、ClusterRole 24、ClusterRoleBinding 25、RoleBindi…...

什么是API网关代理?

带有API网关的代理服务显着增强了用户体验和性能。特别是对于那些使用需要频繁创建和轮换代理的工具的人来说&#xff0c;使用 API 可以节省大量时间并提高效率。 了解API API&#xff08;即应用程序编程接口&#xff09;充当服务提供商和用户之间的连接网关。通过 API 连接&a…...

AWS Simple Email Service (SES) 实战指南

Amazon Simple Email Service (SES) 是一项强大的电子邮件发送服务&#xff0c;适用于数字营销、应用程序通知以及事务性邮件。在这个实战指南中&#xff0c;我们将演示如何设置 AWS SES 并通过几个示例展示其用法。 设置 AWS SES 1. 创建 AWS 账户 首先&#xff0c;您需要创…...

详解Oracle数据库的启动

Oracle数据库的启动&#xff0c;其概念可参考Overview of Instance and Database Startup。 其过程可参见下图&#xff1a; 当数据库从关闭状态进入打开数据库状态时&#xff0c;它会经历以下阶段。 阶段Mount状态描述1实例在没有挂载数据库的情况下启动实例已启动&#xff…...

2024年跨境电商上半年营销日历,建议收藏

2024年伊始&#xff0c;跨境电商开启新一轮的营销竞技&#xff0c;那么首先需要客户需求&#xff0c;节假日与用户需求息息相关&#xff0c;那么接下来小编为大家整理2024上半年海外都有哪些节日和假期&#xff1f;跨境卖家如何见针对营销日历选品&#xff0c;助力卖家把握2024…...

Go采集1688网站数据对比商品价格

最近看了下多多和1688的一些商品价格&#xff0c;发现好多店铺都是无货源拿货一件发货&#xff0c;这就导致层层叠加价格翻了不知道几倍&#xff0c;真所谓多花钱办的事还是一样&#xff0c;因此&#xff0c;今天我就通过一个爬虫程序监控对应商品价格&#xff0c;了解行业龙头…...

Java泛型:灵活多变的类型参数化工具

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、泛型1、什么是泛型2、泛型的语法 二、泛型类的使用1、泛型类的语法2、泛型如何编译的2.1、擦除机制2.2、为什么不能实例化泛…...

java 体育明星管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web 体育明星管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysq…...

蓝凌EIS智慧协同平台 ShowUserInfo.aspx sql注入漏洞

漏洞描述&#xff1a; 蓝凌EIS智慧协同平台是一个简单、高效的工作方式专为成长型企业打造的沟通、协同、社交的移动办公平台&#xff0c;覆盖OA、沟通、客户、人事、知识等管理需求&#xff0c;集合了非常丰富的模块&#xff0c;满足组织企业在知识、项目管理系统建设等需求的…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...