我正在尝试通过EKS(AWS K8s服务)进行滚动更新期间实现零停机。
我有一台WebSocket服务器,我想确保在该服务器的滚动更新期间,现有连接将一直保留到工作完成后WebSocket关闭为止。
我认为K8的滚动更新功能会对此有所帮助,但事实并非如此。我尝试过,它只是在仍然有WebSocket连接的情况下杀死了pod。
如果我正确理解document,则吊舱终止如下所示:
grace-period
(默认值为30s)内开始正常终止自身如果我的上述理解是正确的,显然没有办法告诉K8:
问题:是否有任何方法可以确保K8:
grace-period
中的连接如果有人可以帮助我,将不胜感激。
答案 0 :(得分:0)
您可以在具有lifecycle hook
的kubernetes容器生命周期中使用preStop hook
。该挂钩将在吊舱终止之前运行。
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
preStop:
exec:
command: ["/bin/sh","-c","nginx -s quit; while killall -0 nginx; do sleep 1; done"]
您可以使用脚本杀死所有连接,并等待连接终止,然后只有Pod会终止。
答案 1 :(得分:0)
对于关键任务应用程序,请进行自定义的蓝绿色部署。
首先使用新的选择器部署新版本,然后在所有POD副本都已启动并准备好提供流量时,将服务选择器切换为指向新版本。
在此之后,将kill开关发送到较旧版本,该版本可以正常处理并断开所有客户端的连接。因此,所有新的重新连接都会转发到已经设置为服务流量的新版本。