我在google-kubernetes-engine上使用Helm图表进行部署,并在其中使用滚动更新。
目前我正在运行10个pods。当我使用rolling-update进行部署时,我预计会出现一个新的pod,旧pod的流量会被阻止,然后它会被优雅地关闭。对于下一个pod,依此类推。
但在我的例子中,当创建一个新的pod时,旧的pod会立即关闭,并且我开始为该pod所满足的请求获取Internal Server Error [500]。
我怎样才能避免这种情况?
livenessProbe:
httpGet:
path: /health
port: 4000
initialDelaySeconds: 1
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 4000
initialDelaySeconds: 1
periodSeconds: 10发布于 2020-03-27 00:18:46
听起来你需要调整你的滚动更新策略。您可以在here和here中找到类似的讨论,讨论如何执行滚动更新而不会出错。
升级策略对于定义在更新过程中可以拥有多少不可用pods非常重要。对于现在的停机时间,您可能需要将其设置为0并配置一个合理的maxSurge值。
下一步是确保配置了适当的readinessProbes。一旦新pod标记为就绪,控制器将尝试删除一个(或多个)旧pod。您的pod将收到一个SIGTERM,并继续处理它,无论它是如何配置的。这意味着:
A)确保readinessProbe仅在其完全能够接受流量时才将pod标记为就绪(即使应用程序未启动,/health也可能处于启动状态,请确保情况并非如此)。
B)您的旧pods需要正确和优雅地处理SIGTERM,这是在应用层完成的。请记住,默认情况下,一旦发送SIGTERM,控制器将允许pods正常关闭。
https://stackoverflow.com/questions/60862072
复制相似问题