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

[k8s]--exec探针详细解析

在 Kubernetes 中,exec 探针是一种通过 在容器内执行命令 来检测容器健康状态的机制。它的核心逻辑是:执行命令后,若命令返回值为 0(表示成功),则认为容器健康;否则认为不健康


一、exec 探针的机制

  1. 执行命令
    Kubernetes 的 kubelet 会进入目标容器内部,运行指定的命令(如 cat /tmp/healthy)。

    • 命令的执行环境与容器内的 shell 环境一致(例如 /bin/sh)。
    • 如果命令执行成功(返回码为 0),探针认为容器健康;否则认为不健康。
  2. 触发时机

    • 存活探针(livenessProbe):定期检查容器是否存活。如果失败,Kubernetes 会重启容器。
    • 就绪探针(readinessProbe):检查容器是否准备好接收流量。如果失败,Pod 会被标记为 NotReady,不会接收流量。
    • 启动探针(startupProbe):在容器启动阶段使用,确保容器初始化完成后再启用其他探针。
  3. 资源消耗
    每次执行命令会启动一个新的进程,可能对容器性能有一定影响(尤其是高频探测时)。


二、exec 探针的检测方式

1. 基础用法

检测某个文件是否存在且可读:

readinessProbe:exec:command:- cat- /tmp/healthy
  • 逻辑cat 命令尝试读取 /tmp/healthy 文件。如果文件存在且可读(命令返回 0),则认为容器健康。
2. 组合命令

通过 Shell 脚本组合多个命令进行检测:

livenessProbe:exec:command:- sh- -c- "curl -s http://localhost:8080/healthz | grep 'OK'"
  • 逻辑:使用 sh -c 执行一段 Shell 命令,检查 HTTP 接口返回结果是否包含 “OK”。如果包含(命令返回 0),则认为健康。
3. 脚本检测

执行自定义脚本文件:

readinessProbe:exec:command:- /bin/sh- /opt/health_check.sh
  • 逻辑:运行 /opt/health_check.sh 脚本,脚本的退出码决定探针结果。

三、exec 探针的写法(YAML 配置)

1. 基本结构
<probe_type>:exec:command:- <command>- <arg1>- <arg2>...
  • <probe_type> 可以是 livenessProbereadinessProbestartupProbe
  • command 是一个数组,第一个元素是命令名,后续是参数。
2. 完整示例
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imagelivenessProbe:exec:command:- sh- -c- "curl -s http://localhost:8080/healthz | grep 'OK'"initialDelaySeconds: 5  # 容器启动后等待 5 秒开始探测periodSeconds: 10       # 每 10 秒探测一次
3. 关键参数说明
参数作用默认值
initialDelaySeconds容器启动后等待多少秒开始首次探测0
periodSeconds探测间隔时间(单位秒)10
timeoutSeconds探测超时时间(单位秒)1
failureThreshold连续失败多少次后判定为失败3(存活探针必须为 1)
successThreshold连续成功多少次后判定为成功1(存活探针必须为 1)

四、注意事项

  1. 局限性

    • 仅能验证命令退出码:无法直接检测服务的实际可用性(例如数据库连接是否正常)。
    • 误判风险:如果命令本身有缺陷(如文件存在但服务已崩溃),可能导致误判。
  2. 安全风险

    • 执行命令可能暴露敏感信息(如日志文件中的密码)。
    • 建议避免执行复杂或危险的命令。
  3. 替代方案

    • HTTP 探针:通过 HTTP 请求检测服务状态(更高效且通用)。
    • TCP 探针:通过 TCP 连接检测端口是否开放(适合无 HTTP 接口的服务)。
  4. 最佳实践

    • 简单场景:使用 cat /path/to/file 快速验证文件是否存在。
    • 复杂场景:结合 curlgrep 等工具验证服务接口。
    • 脚本封装:将复杂逻辑封装到脚本中,提高可维护性。

五、总结

特性说明
检测方式执行命令,通过退出码判断健康状态
适用场景文件存在性检查、简单命令验证、自定义脚本
优点灵活,可适配任意命令逻辑
缺点性能开销较大,依赖命令实现,可能误判

如果你需要更高效的健康检查,建议优先使用 HTTP 探针TCP 探针。接下来有时间也会研究一下这两种探针。

相关文章:

  • java 设计模式_行为型_17观察者模式
  • 如何设计幂等性接口防止Seata事务悬挂?
  • AJAX——前后端传输数据场景下使用的技术
  • 基于Docker编译运行orb-slam2_with_semantic_labelling
  • C# 枚 举(枚举)
  • [nginx]反向代理grpc
  • [技巧] 接口优化技巧合集
  • 数列求和计算
  • 人口贩卖暑期威胁消解:算法协同提升安全预警
  • 学习昇腾开发的第一天--环境配置
  • 技术实录-从 MySQL 启动失败到大小写兼容恢复:一次完整故障排查复盘20250614
  • Flask入门:从零搭建Python Web应用
  • Flink task、Operator 和 UDF 之间的关系
  • 【论文解读】OmegaPRM:MCTS驱动的自动化过程监督,赋能LLM数学推理新高度
  • [学习] 牛顿迭代法:从数学原理到实战
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | AnimatedNavigation(动态导航)
  • 【Spring源码核心篇-08】spring中配置类底层原理和源码实现
  • Vite 预构建机制深度解析(Vite缺点之一)
  • BeckHoff <--> Festo Cmmt AS驱动器 EtherCat通讯
  • C++基础算法————二分查找
  • 服务器网站建设维护/搜狗友链交换
  • 网站建设公司电话/网站建设技术托管
  • 2万元建设网站贵吗/推广代理公司
  • 网站建设可用性的五个方面/一键优化清理手机
  • mac机wordpress/长春seo网站排名
  • 郑州加盟做网站/青岛网站建设公司排名