kubernetes - exec 类型容器探测超时
问题描述
我有一个关于 openshift/kubernetes 中 exec 类型容器探测超时的问题。我的 openshift 版本是 3.11,其中 kubernetes 版本是 1.11
我已经定义了一个准备就绪探测,如下所述
readinessProbe:
exec:
command:
- /bin/sh
- -c
- check_readiness.sh
initialDelaySeconds: 30
periodSeconds: 30
failureThreshold: 1
根据 openshift 文档 timeoutSeconds 参数对 exec 类型探针的容器探针没有影响。check_readiness.sh 脚本是一个长时间运行的脚本,可能需要 5 分钟以上才能返回。容器启动后,我登录到容器以检查脚本的状态。我发现大约 2 分钟后,另一个 check_readiness.sh 脚本启动了,而第一个脚本仍在运行,大约 2 分钟后又启动了另一个。
有人可以解释一下 openshift 或 kubernetes 在这种情况下对探测器做了什么吗?
解决方案
是的,没错,容器执行检查不支持这个timeoutSeconds
论点。但是,正如文档所述timeout
,您可以使用以下命令实现类似的功能:
[...]
readinessProbe:
exec:
command:
- /bin/bash
- '-c'
- timeout 60 /opt/eap/bin/livenessProbe.sh
periodSeconds: 10
successThreshold: 1
failureThreshold: 3
[...]
因此,在您的情况下,我猜测正在发生以下情况:
- 您的容器已启动。
- 在持续时间
initialDelaySeconds
(在您的情况下为 30 秒)之后,将启动第一个就绪探测并执行您的脚本。 - 然后,在
periodSeconds
(30 秒)之后启动下一个探测,在您的情况下,会导致脚本第二次执行。 - 每隔 30 秒,脚本会再次启动,即使之前的迭代仍在运行。
因此,在您的情况下,您应该使用timeout
文档中看到的命令或增加periodSeconds
以确保两个脚本不会同时执行。
一般来说,我建议您确保您的就绪检查脚本返回的速度比几分钟快得多,以避免此类问题。
推荐阅读
- tensorflow - 如何提高图像分类器的准确性?
- java - 在while循环中更新日期,Java
- javascript - 如何有条件地添加或删除数组中的元素
- r - 如何在不使用循环的情况下优化我的 R 代码?
- android - 主机卡仿真 - 字符长度
- python-3.x - 我没有得到错误的地方
- excel - 使用 IF 和 VLOOKUP 更改 VBA 中的单元格值
- mysql - 合并 SQL select 的两个结果
- css - 背景滤镜灰度不适用于 Mozilla
- azure-devops - 如何在 Azure DevOps 服务器迁移到服务的步骤中识别初始目录(集合数据库的名称)?