Kubernetes Nginx:如何实现零停机部署?
我试图让kubernetes nginx部署零停机时间.该过程的一部分是启动rollingUpdate,确保至少有一个pod始终在运行nginx.这非常有效. 当旧的nginx pod终止时,我遇到了错误. >从服务的端点列表中删除pod,所以它是 我知道命令nginx -s quit应该通过在主服务器终止之前等待所有worker完成请求来优雅地终止nginx.它优雅地响应SIGQUIT命令,而SIGTERM导致暴力终止.其他论坛说它就像在部署中添加以下preStop挂钩一样简单:
但是,通过测试此命令,我发现nginx -s quit立即返回,而不是等待worker完成.它也不会返回主进程的PID,这是我希望D: 会发生什么,kubernetes调用nginx -s quit,它会向工作人员发送一个正确的SIGQUIT,但不要等待它们完成.相反,它会直接跳到第3步,而SIGTERM会转向那些进程,导致暴力终止,从而导致连接丢失. 问题:有没有人想出一个在滚动部署期间优雅地关闭他们的nginx控制器并且没有停机时间的好方法?睡眠解决方法不够好,我正在寻找更强大的东西. 以下是完整部署yaml:
最佳答案
我讨厌回答我自己的问题,但是在涂了一点之后,这就是我到目前为止所拥有的.
我创建了一个半阻塞的bash脚本,称为杀手:
我发现在nginx pod中有一个文件/run/nginx.pid,它有主进程的PID.如果你调用nginx -s quit并启动等待直到进程消失,你基本上已经使quit命令“阻塞”了. 请注意,在发生任何事情之前有一个睡眠3.这是由于竞争条件导致Kubernetes将一个吊舱标记为终止,但需要一点时间(<1s)将该吊舱从指向其的流量的服务中移除. 我已将此脚本安装到我的pod中,并通过preStop指令调用它.它主要工作,但在测试期间仍然偶尔会出现一些问题,我发现卷曲错误表明连接是“由同行重置”.但这是朝着正确方向迈出的一步. (编辑:鲜蔬坊站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- nginx vs lighttpd for wordpress
- 我的nginx fastcgi配置下载php文件而不是执行它们
- rest – 从网站调用不安全的端点在HTTPS下运行 – nginx
- 正则表达式 – 与uri端口的nginx代理重定向
- 使用Nginx作为反向代理的Tomcat应用程序(JIRA)的基本身份验
- nginx访问502 gateway,*1 connect() failed (111: Connect
- nginx选择错误的默认网站
- 性能-其他解决方案,而不是NGINX的.htaccess
- Django应用程序在运行服务器下运行,但在nginx下运行404
- apache/nginx/IIS有什么区别