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

d3v*_*sha 7 kubernetes

我有一个关于状态探测的问题。

当我阅读文档时,我了解到它主要是针对需要很长时间才能启动的应用程序(例如遗留应用程序)而设计的。因此,为了不终止应用程序(运行它的容器),我们将启动探测设置为例如 5 分钟,以便应用程序有足够的时间能够启动。

我的问题是:为什么我们不能仅使用initialDelaySeconds参数设置活性探针(而不是同时使用活性探针和启动探针)并将其值设置为 300 秒之类的值?

rai*_*7ow 17

请注意kubernetes 文档中给出的示例:

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

startupProbe:
  httpGet:
    path: /healthz
    port: liveness-port
  failureThreshold: 30
  periodSeconds: 10
Run Code Online (Sandbox Code Playgroud)

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

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

按照您的方法,即使应用程序已经启动,第一个活性探测器也不会在 300 秒过去后被触发- 无论应用程序实际上是否需要大约 300 秒才能启动。

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