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 需要重新启动。
我正在与:
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 需要重新启动。