为什么我们使用启动探针而不是带有 initialDelaySeconds 参数的 livenes 探针

问题描述

我有一个关于状态探测的问题。当我阅读文档时,我了解到它主要用于需要很长时间才能启动的应用程序(如遗留应用程序)。因此,为了不杀死应用程序(运行它的容器),我们将启动探测设置为例如 5 分钟,以便应用程序始终能够启动。我的问题是:为什么我们不能设置一个活性探测器?我们可以使用 initialDelaySeconds 参数并将其值设置为 300 秒之类的值?

感谢您的回答

解决方法

注意 kubernetes docs 中给出的示例:

livenessProbe:
  httpGet:
    path: /healthz
    port: liveness-port
  failureThreshold: 1
  periodSeconds: 10

startupProbe:
  httpGet:
    path: /healthz
    port: liveness-port
  failureThreshold: 30
  periodSeconds: 10

此处两个探针之间的主要区别不是延迟,而是容错性。对于启动探针,预计应用程序启动缓慢......有时。但大多数时候它实际上可能已经足够快了!

所以启动探针尝试 30 次,每次尝试之间等待 10 秒,并认为它的工作在第一次成功时完成,之后立即将令牌传递给活性探针。

根据您的方法,即使应用程序已经启动,直到 300 秒过去后才会触发第一个活性探测器 - 无论应用程序是否实际花费了大约 300 秒开始。

当然,对于总是需要大量启动时间的应用,这种方法可能是有意义的。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...