网站机房建设解决方案,南宁百度seo放心选择,网站开发和网页开发有什么区别,东莞免费网站建设网络营销在 Kubernetes 中#xff0c;exec 探针是一种通过 在容器内执行命令 来检测容器健康状态的机制。它的核心逻辑是#xff1a;执行命令后#xff0c;若命令返回值为 0#xff08;表示成功#xff09;#xff0c;则认为容器健康#xff1b;否则认为不健康。 一、exec 探针的…在 Kubernetes 中exec 探针是一种通过 在容器内执行命令 来检测容器健康状态的机制。它的核心逻辑是执行命令后若命令返回值为 0表示成功则认为容器健康否则认为不健康。 一、exec 探针的机制 执行命令 Kubernetes 的 kubelet 会进入目标容器内部运行指定的命令如 cat /tmp/healthy。 命令的执行环境与容器内的 shell 环境一致例如 /bin/sh。如果命令执行成功返回码为 0探针认为容器健康否则认为不健康。 触发时机 存活探针livenessProbe定期检查容器是否存活。如果失败Kubernetes 会重启容器。就绪探针readinessProbe检查容器是否准备好接收流量。如果失败Pod 会被标记为 NotReady不会接收流量。启动探针startupProbe在容器启动阶段使用确保容器初始化完成后再启用其他探针。 资源消耗 每次执行命令会启动一个新的进程可能对容器性能有一定影响尤其是高频探测时。 二、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 可以是 livenessProbe、readinessProbe 或 startupProbe。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 OKinitialDelaySeconds: 5 # 容器启动后等待 5 秒开始探测periodSeconds: 10 # 每 10 秒探测一次3. 关键参数说明
参数作用默认值initialDelaySeconds容器启动后等待多少秒开始首次探测0periodSeconds探测间隔时间单位秒10timeoutSeconds探测超时时间单位秒1failureThreshold连续失败多少次后判定为失败3存活探针必须为 1successThreshold连续成功多少次后判定为成功1存活探针必须为 1 四、注意事项 局限性 仅能验证命令退出码无法直接检测服务的实际可用性例如数据库连接是否正常。误判风险如果命令本身有缺陷如文件存在但服务已崩溃可能导致误判。 安全风险 执行命令可能暴露敏感信息如日志文件中的密码。建议避免执行复杂或危险的命令。 替代方案 HTTP 探针通过 HTTP 请求检测服务状态更高效且通用。TCP 探针通过 TCP 连接检测端口是否开放适合无 HTTP 接口的服务。 最佳实践 简单场景使用 cat /path/to/file 快速验证文件是否存在。复杂场景结合 curl、grep 等工具验证服务接口。脚本封装将复杂逻辑封装到脚本中提高可维护性。 五、总结
特性说明检测方式执行命令通过退出码判断健康状态适用场景文件存在性检查、简单命令验证、自定义脚本优点灵活可适配任意命令逻辑缺点性能开销较大依赖命令实现可能误判
如果你需要更高效的健康检查建议优先使用 HTTP 探针 或 TCP 探针。接下来有时间也会研究一下这两种探针。