【问题标题】:timeout in exec type container probeexec 类型容器探测超时
【发布时间】:2021-01-01 08:28:29
【问题描述】:

我有一个关于 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 在这种情况下对探测器做了什么吗?

【问题讨论】:

    标签: kubernetes openshift


    【解决方案1】:

    是的,没错,容器执行检查不支持timeoutSeconds 参数。但是,as the documentation notes,您可以使用timeout 命令实现类似的功能:

    [...]
          readinessProbe:
            exec:
              command:
                - /bin/bash
                - '-c'
                - timeout 60 /opt/eap/bin/livenessProbe.sh 
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
    [...]
    

    所以在你的情况下,我猜测正在发生以下情况:

    • 您的容器已启动。
    • 在持续时间 initialDelaySeconds(在您的情况下为 30 秒)之后,将启动第一个就绪性探测并执行您的脚本。
    • 然后,在periodSeconds (30s) 之后启动下一个探测,在您的情况下会导致第二次执行脚本。
    • 每隔 30 秒,脚本会再次启动,即使之前的迭代仍在运行。

    因此,在您的情况下,您应该使用文档中看到的timeout 命令或增加periodSeconds 以确保两个脚本不会同时执行。

    一般来说,我建议您确保您的就绪检查脚本的返回速度比几分钟快得多,以避免此类问题。

    【讨论】:

    • 我做了更多的测试,似乎 kubernetes 允许容器 exec 类型的就绪探针运行最多 120 秒 + 超时值。之后,当第一个仍在运行时,它会旋转另一个 exec 类型的探针。是否可以增加120s的值?
    猜你喜欢
    • 2021-12-20
    • 2021-09-05
    • 2012-03-14
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多