k8s(11) — 探针和钩子

钩子和探针的区别:

在 Kubernetes(k8s)中,钩子(Hooks)和探针(Probes)是保障应用稳定运行的重要机制,不过它们的用途和工作方式存在差异,以下为你详细介绍:

定义与用途

  • 钩子(Hooks):它是与容器生命周期特定阶段相关联的回调机制。主要用于在容器启动后或者停止前执行特定操作,比如初始化配置、清理资源等,让用户能够自定义容器生命周期中的行为。
  • 探针(Probes):这是 Kubernetes 用来检查容器健康状况的一种机制。其目的在于判断容器是否正常运行、是否准备好接收流量,从而确保应用的可用性和可靠性。

类型与工作原理

  • 钩子类型
    • PostStart:容器创建完成后立即执行。不过它并不保证在容器的 ENTRYPOINT 之前执行。
    • PreStop:容器终止之前执行,一般用于优雅关闭应用程序,释放资源等操作。
  • 探针类型
    • 存活探针(Liveness Probe):判断容器是否正常运行。若探测失败,Kubernetes 会重启容器。
    • 就绪探针(Readiness Probe):判断容器是否准备好接收流量。若探测失败,容器不会被添加到服务的负载均衡中。
    • 启动探针(Startup Probe):检查容器内应用是否已经启动。在应用启动时间较长的场景中,可避免存活探针在应用还未完全启动时就将其误判为失败。

配置方式

  • 钩子配置示例

yaml

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: nginx:1.14.2lifecycle:postStart:exec:command: ["/bin/sh", "-c", "echo 'PostStart hook executed'"]preStop:exec:command: ["/bin/sh", "-c", "nginx -s quit"]

在这个例子里,postStart 钩子在容器启动后执行一条打印命令,preStop 钩子在容器停止前优雅关闭 Nginx 服务。

  • 探针配置示例

yaml

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: nginx:1.14.2livenessProbe:httpGet:path: /healthzport: 80initialDelaySeconds: 15periodSeconds: 5

此例中,存活探针通过向 /healthz 路径发送 HTTP 请求来检查容器的健康状况,容器启动 15 秒后开始探测,每 5 秒探测一次。

触发时机

  • 钩子触发时机PostStart 钩子在容器创建完成后触发,PreStop 钩子在容器终止前触发。
  • 探针触发时机:存活探针和就绪探针按照设定的时间间隔定期执行,启动探针在容器启动后开始执行,直到应用成功启动。

综上所述,钩子侧重于在容器生命周期的特定阶段执行自定义操作,而探针主要用于监控容器的健康状态,二者相互配合,共同保障 Kubernetes 应用的稳定运行。

分享

存活探针(Liveness Probe)有哪些探测方式?

如何配置Kubernetes的存活探针(Liveness Probe)?

钩子(Hooks)和探针(Probes)在实际应用中如何配合使用?

二、钩子与探针场景测试

1、探针测试

设置两处错误:

在启动探针加入命令探测当ls /a.txt 的结果返回0时,才会执行存活探针的内容;再将存活探测的http测试端口改为8080(nginx默认启动的端口为80所以探测8080会失败),所以容器将会一直处于未就绪状态。

      livenessProbe:httpGet:path: /port: 8080successThreshold: 1startupProbe:exec:command:- /bin/sh- -c- ls /a.txtsuccessThreshold: 1

步骤一:创建pod

执行如下yaml

apiVersion: v1
kind: Pod
metadata:name: init-clabels:app: init-c
spec:containers:- name: nginx-1imagePullPolicy: IfNotPresentimage: nginx:1.23#存活探针livenessProbe:httpGet:path: /port: 80successThreshold: 1#启动探针 只有在根目录下创建一个a.txt才能正常启动才能接收请求startupProbe:exec:command:- /bin/sh- -c- ls /a.txtsuccessThreshold: 1

 查看具体的报错原因:

 kubectl describe pod  init-c -n default

步骤二:启动探针测试

进入容器内部创建 /a.txt

[root@master podlifecycle]# kubectl exec -it init-c -- /bin/bash
root@init-c:/#
root@init-c:/#
root@init-c:/# > a.txt
root@init-c:/#
root@init-c:/#

 查看容器的状态的日志:

步骤三:存活探针测试

将存活探测的端口改成80

 

启动状态正常

探针总结:

只有当启动探针状态正常后才会去执行存活探测和就绪探针,当yaml中全部定义3中类型的探针时需要所有的探针都探针成功pod才能处于正常被调度的状态。

2、钩子测试

测试yaml

apiVersion: v1
kind: Pod
metadata:name: init-clabels:app: init-c
spec:containers:- name: nginx-1imagePullPolicy: IfNotPresentimage: nginx:1.23#存活探针livenessProbe:httpGet:path: /port: 80successThreshold: 1#启动探针 只有在根目录下创建一个a.txt才能正常启动才能接收请求startupProbe:exec:command:- /bin/sh- -c- ls /a.txtsuccessThreshold: 1#钩子lifecycle:#启动后钩子postStart:exec:command: ["/bin/sh", "-c", "echo 'nginx start' > /usr/share/message"]#关闭前钩子preStop:exec:command: ["/bin/sh", "-c", "echo 'nginx stop' >  /usr/share/message"]

步骤一:启动后钩子测试

将启动后钩子检测参数设置为异常观察容器状态

1、将启动后钩子的参数设置为command: ["/bin/sh", "-c", "ls /c.txt"] 当容器启动后因为c.txt没有所以会被错,pod状态异常。

2、将启动后钩子检测参数设置为正常

步骤二:关闭前钩子测试

关闭容器查看停止前钩子会不会执行

 停止前钩子执行命令:"echo 'stop' >  /usr/share/message" 

1、进入容器内部执行如下命令:

while true;
do
cat /usr/share/message
done

2、关闭容器

 kubectl delete  -f test.yaml

3、查看关闭前钩子是否执行

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

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

相关文章

Kafka消息队列之 【消费者分组】 详解

消费者分组(Consumer Group)是 Kafka 提供的一种强大的消息消费机制,它允许多个消费者协同工作,共同消费一个或多个主题的消息,从而实现高吞吐量、可扩展性和容错性。 基本概念 消费者分组:一组消费者实例的集合,这些消费者实例共同订阅一个或多个主题,并通过分组来协调…

什么是Blender?怎么获取下载Blender格式文件模型

glbxz.com glbxz.com 官方可以下载Blender格式文件模型 BlenderBlender 是一个免费的开源程序,用于建模和动画,最初由一家名为 Neo Geo 的动画工作室作为内部应用程序开发,后来作为自己的程序发布。这是一个称职的程序,近年来由于…

IC ATE集成电路测试学习——PLL测试(一)

PLL测试 什么是PLL? PLL Phase-Locked Loop(锁相环)它的作用就是:把低速、稳定的外部时钟,转换成芯片内部需要的高速时钟。 PLL的作用 我们知道,芯片的内部不同的模块,很可能用的不是一个频…

ReaRAG:教 AI 思考、搜索和自我纠正以获得事实准确答案(含git实现)

推理模型(LRMs)的发展取得了显著进展,展现出强大的推理能力,能在复杂任务中表现出色。然而,这些模型在多跳问答(QA)任务中仍面临挑战,主要归因于其对参数化知识的依赖,导…

第2章——springboot核心机制

一、为何以继承方式引入SpringBoot 1.提出疑问 以前我们在开发项目时&#xff0c;需要什么&#xff0c;引入对应的依赖就行&#xff0c;比如我们需要连接mysql数据&#xff0c;则引入mysql驱动的依赖&#xff0c;如下&#xff1a; <dependency><groupId>com.mys…

网络接入服务商查询

要查询网站的 网络接入服务商&#xff08;即网站服务器托管或接入的ISP公司&#xff09;&#xff0c;可以通过以下方法进行查询&#xff1a; 方法1&#xff1a;通过IP地址查询 步骤1&#xff1a;获取网站IP 使用 ping 命令&#xff1a; ping example.com 返回的IP地址即为服务…

超详细!RxSwift 中的 BehaviorRelay 使用教程(含原理 + 示例 + 实战)

目录 前言 1.什么是 BehaviorRelay 2.基本使用方式 3.BehaviorRelay的常用API 4.BehaviorRelay 和其它类型的对比 5.BehaviorRelay的使用场景 1.绑定UITableView 2.MVVM 场景下使用 BehaviorRelay 6.使用注意事项以及建议 1.注意事项 2.使用建议总结 7.推荐阅读 前…

vue-grid-layout实现拖拽修改工作台布局

效果图 vue-grid-layout 文档地址&#xff1a;vue-grid-layout 官网介绍&#xff1a; 使用 // 安装&#xff1a; npm install vue-grid-layout --save// 引用&#xff1a; import { GridLayout, GridItem } from vue-grid-layout// 注册&#xff1a; components:{ GridLay…

windows使用bat脚本激活conda环境

本文不生产技术&#xff0c;只做技术的搬运工&#xff01;&#xff01;&#xff01; 前言 最近需要在windows上使用批处理脚本执行一些python任务&#xff0c;但是被自动激活conda环境给卡住了&#xff0c;研究了一下解决方案 解决方案 call your_conda_path\Scripts\activa…

u-boot学习笔记(四)

文章目录 cmd/sub_cmd/exit.cdo_exit()exit.c可提供的命令及使用方式&#xff1a; ext2.cdo_ext2ls()do_ext2load()ext2.c可提供的命令及使用方式&#xff1a; ext4.cdo_ext4_size()do_ext4_load()do_ext4_ls()do_ext4_write()ext4.c可提供的命令及使用方式&#xff1a; fastbo…

OpenCV 图形API(80)图像与通道拼接函数-----仿射变换函数warpAffine()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 对图像应用仿射变换。 函数 warpAffine 使用指定的矩阵对源图像进行变换&#xff1a; dst ( x , y ) src ( M 11 x M 12 y M 13 , M 21 x M…

《React Native热更新实战:用Pushy打造无缝升级体验》

《React Native热更新实战:用Pushy打造应用“空中加油”,实现无缝升级体验》 写在前面:当你的APP需要"空中加油"时… 想象一下这样的场景:凌晨2点,你的React Native应用刚上线就爆出重大BUG,用户差评如潮水般涌来,应用商店审核至少需要3天…此刻你多么希望能…

《社交应用架构生存战:React Native与Flutter的部署容灾决胜法则》

React Native和Flutter作为当下热门的跨平台开发框架&#xff0c;在社交应用开发领域各显神通。今天&#xff0c;我们深入探索它们在高可用架构中的部署与容灾策略。 React Native凭借其独特优势&#xff0c;在社交应用开发中拥有一席之地。它基于JavaScript和React&#xff0…

网络靶场基础知识

一、网络靶场的核心概念 网络靶场&#xff08;Cyber Range&#xff09;是一种基于虚拟化和仿真技术的网络安全训练与测试平台&#xff0c;通过模拟真实网络环境和业务场景&#xff0c;为攻防演练、漏洞验证、安全测试和人才培养提供安全可控的实验空间。其核心目标是通过“虚实…

AutoGen 框架解析:微软开源的多人 Agent 协作新范式

一、引言 在大语言模型&#xff08;LLM&#xff09;快速发展的今天&#xff0c;复杂任务的自动化协作需求日益增长。微软开源的AutoGen 框架&#xff08;GitHub Star 超 10 万&#xff09;提供了一种基于多智能体对话的协作范式&#xff0c;通过自然语言交互实现多角色 Agent …

极简远程革命:节点小宝 — 无公网IP的极速内网穿透远程解决方案

极简远程革命&#xff1a;节点小宝&#xff0c;让家庭与职场无缝互联 ——打破公网桎梏&#xff0c;重塑数字生活新体验 关键词&#xff1a;节点小宝&#xff5c;内网穿透&#xff5c;P2P直连&#xff5c;家庭网络&#xff5c;企业协作&#xff5c;智能组网节点小宝&#xff5…

【MySQL】存储引擎 - CSV详解

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

云原生安全治理体系建设全解:挑战、框架与落地路径

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:云原生环境下,安全治理正在被重构 在传统IT架构中,安全防护多依赖边界设备(如防火墙、WAF、堡垒机)进行集中式防护。然而,在云原生环境下,这种“边界式”安全模型正面临颠覆。 应用微服务化…

SiC MOSFET同步Buck DC-DC变换器的宽频混合EMI滤波器设计

摘要由于 SiC MOSFET 在高速开关电源中的广泛应用&#xff0c;导致严重的电磁干扰&#xff08;EMI&#xff09;问题&#xff0c;因此 EMI 滤波器的设计成为研究热点。为了满足电磁兼容&#xff08;EMC&#xff09;标准&#xff0c;无源 EMI 滤波器可以有效地降低 DC-DC 变换器产…

[java八股文][Java并发编程面试篇]场景

多线程打印奇偶数&#xff0c;怎么控制打印的顺序 可以利用wait()和notify()来控制线程的执行顺序。 以下是一个基于这种方法的简单示例&#xff1a; public class PrintOddEven {private static final Object lock new Object();private static int count 1;private stat…