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

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、查看关闭前钩子是否执行

相关文章:

  • 【Redis】持久化与事务
  • 电容的基本介绍
  • iNeuOS工业互联网操作系统,集成DeepSeek大模型应用
  • C#串口通信
  • 前端面试每日三题 - Day 28
  • LeetCode第284题 - 窥视迭代器
  • 1688 开放平台 API 全解析:商品详情实时数据采集接口开发手册
  • 存储器:DDR和独立显卡的GDDR有什么区别?
  • 数据透视表控件DHTMLX Pivot v2.1发布,新增HTML 模板、增强样式等多个功能
  • Pyinstaller编译EXE及反编译
  • 解决方案:ValueError: setting an array element with a sequence.
  • 主成分分析(PCA)是什么?简易理解版
  • web 自动化之 selenium+webdriver 环境搭建及原理讲解
  • 第三天 车联网云架构
  • CAS、CAS自旋、CAS自旋锁、CLH锁与Java AQS:深入理解并发编程核心机制
  • stable diffusion的attention-map:提取和可视化跨注意力图
  • DRAM详解
  • 【Electron】electron-vue 借助 element-ui UI 库助力桌面应用开发
  • MIST:一键解锁 macOS 历史版本,旧系统安装不再难!
  • 学习黑客 MAC 地址深入了解
  • 85后清华博士黄佐财任湖北咸宁市咸安区委副书记、代区长
  • OpenAI任命了一位新CEO
  • 北约年度报告渲染所谓“中国核威胁”,国防部回应
  • 云南临沧一行贿案金额认定比受贿案多41万,重审时检方变更金额起诉
  • 安徽六安原市长潘东旭,已任省市场监督管理局党组书记、局长
  • 涉个人信息收集使用问题,15款App和16款SDK被通报