Kubernetes livenessProbe 在应用程序启动期间关闭

Kubernetes livenessProbe shutdown during application startup

我正在与:

kubernetes 1.3.6

.. 这部分在我的应用程序的部署文件中:

    livenessProbe:
      httpGet:
        path: /liveness
        port: 8082
      initialDelaySeconds: 120

.. 所以当我描述 pod 时我得到了这个

Liveness: http-get http://:8082/liveness delay=120s timeout=1s period=10s #success=1 #failure=3

我的应用程序经常 在 110-115 秒内启动,但有时需要更多时间(由于数据库延迟、外部服务重试等......)。

我看到的问题是,当超过 130/140 秒(initialDelaySeconds + period)时,kubernetes 强制关闭并且 pod 从头重新启动。当您有很多副本 (50-60) 时,这意味着完整部署有时比正常部署多花费 10-15 分钟。显然一个解决方案是增加 initialDelaySeconds,但这样所有的部署将花费更多时间。

我看了这里,似乎没有什么可以解决这个问题: http://kubernetes.io/docs/api-reference/v1/definitions/#_v1_probe

理想情况下,我希望有一些以相反方式工作的东西:不是 "initialDelaySeconds",而是 启动 pod 的最大时间量。如果该时间过去了,kubernetes 会强制 pod 关闭并再次尝试。

嗯,看来你说的时间确实存在,只是没有明确表示。

您要查找的时间的公式为

initialDelaySeconds + period * (failureTreshold - 1)

-1 因为探测是在 initialDelaySeconds 之后立即执行的)。您可以通过更改这 3 个值来调整 maximumAmountOfTime(您想要的参数)。

编辑:根据 OP 的评论,上面的答案是错误的,看来增加 initialDelaySeconds 是你现在唯一能做的。

我终于找到了一个很好的解决方案,目前效果很好!

我设置:

  • readinessProbe.initialDelaySeconds:等于应用程序的最小启动时间
  • livenessProbe.initialDelaySeconds:等于应用程序的最大启动时间+几秒

以便 kubernetes(在 readinessProbe.initialDelaySeconds 之后)开始检查就绪探测器,以便将 pod 添加到平衡中。 然后(在 livenessProbe.initialDelaySeconds 之后)它还开始检查 liveness 探测器,以防 pod 需要重新启动。