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

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.xdnf.cn/news/4629.html

相关文章:

  • SpringBoot学生操行评分系统源码设计开发
  • C++函数传值与传引用对比分析
  • 课外活动:简单了解原生测试框架Unittest前置后置的逻辑
  • 录播课视觉包装与转化率提升指南
  • 【NextPilot日志移植】整体功能概要
  • 迪士尼机器人BD-X 概况
  • 5G + AR:让增强现实真正“实时交互”起来
  • 前端取经路——框架修行:React与Vue的双修之路
  • 数据来源合法性尽职调查:保障权益的关键防线
  • Android不能下载Gradle,解决方法Could not install Gradle distribution from.......
  • 2025最新:3分钟使用Docker快速部署单节点Redis
  • python+open3d获取点云的最小外接球体及使用球体裁剪点云
  • 蓝桥杯青少 图形化编程(Scratch)每日一练——校门外的树
  • VGGNet详解
  • java集成telegram机器人
  • [特殊字符]【实战教程】用大模型LLM查询Neo4j图数据库(附完整代码)
  • 赋能金融科技创新,Telerik打造高效、安全的金融应用解决方案!
  • Linux58 ssh服务配置 jumpserver 测试双网卡 为何不能ping通ip地址
  • 从ellisys空口分析蓝牙耳机回连手机失败案例
  • 正则表达式(Regular Expression)详解
  • 关于ubuntu下交叉编译arrch64下的gtsam报错问题,boost中boost_regex.so中连接libicui18n.so.55报错的问题
  • 【Python 字符串】
  • Java常用API:深度解析与实践应用
  • 【Spring Boot 多模块项目】@MapperScan失效、MapperScannerConfigurer 报错终极解决方案
  • 安装 Docker
  • ZC706开发板教程:windows下编译ADRV9009
  • vue 中如何使用region?
  • PyTorch 实战:从 0 开始搭建 Transformer
  • 解决word里插入公式后打不开的问题
  • Linux-openeuler更换yum镜像源