我正在使用Helm
图表在google-kubernetes-engine
上进行部署,并在其中使用了滚动更新。
目前,我正在运行10个吊舱。当我使用rolling-update
进行部署时,我希望出现一个新的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
答案 0 :(得分:1)
听起来您需要调整滚动更新策略。您可以找到类似的讨论here和here,这些讨论涉及执行滚动更新而不会出错。
升级策略对于定义更新期间可以拥有多少个不可用的Pod至关重要。对于现在的停机时间,您可能需要将此设置为0并配置一个合理的maxSurge值。
下一步是确保已配置适当的readinessProbes。一旦新的Pod标记为就绪,控制器将尝试删除一个(或多个)旧Pod。您的广告连播会收到一个SIGTERM,然后继续处理它,但已配置为这样做。这意味着:
A)确保仅在Pod完全能够接受流量后将Pod标记为就绪(即使应用程序没有运行,它也可能处于运行状态,请确保情况并非如此)。
B)您的旧Pod需要正确且优雅地处理SIGTERM
,这是在应用程序层完成的。请记住,默认情况下,一旦发送SIGTERM
,控制器将允许Pod正常关闭。