我们有一堆使用RabbitMQ的豆荚。如果POD被K8S和SIGTERM关闭,我们发现我们的RMQ客户机(Python Pika)没有时间关闭到RMQ服务器的连接,这导致它认为这些客户机在错过2次心跳之前仍然是活动的
我们的调查发现,在SIGTERM上,K8S杀死了所有的入站TCP连接,最重要的是出站TCP连接,以及其他事情(删除端点等),试图查看在预停止挂钩期间是否仍有任何连接是可能的,但预停止看起来非常专注于内部,没有流量流出
还有其他人经历过这个问题并解决了吗?我们所需要做的就是在库贝莱砰地一声把门关上之前把信息传出去。我们的播客不是K8S“服务”,所以一些suggestions没有帮助
复制步骤:
k delete pod
开始终止发送方pod
术语没有任何杀伤力,由应用程序决定如何处理它。SIGKILL会在一段时间后发送,这会强制取消进程,但1)它也会关闭RMQ可以检测到的所有套接字,2)您可以通过TerminationSeconds控制容器必须干净关闭的时间
我们对此进行了广泛的测试,发现安装了印花布(见下文)的新EKS群集将遇到此问题,除非升级印花布。当pod发送到SIGTERM而不是等待宽限期时,网络将立即终止。如果您遇到此问题并且正在使用印花布,请根据此线程检查印花布的版本:
https://github.com/projectcalico/calico/issues/4518
如果您使用AWS yaml安装印花布,请参见: https://github.com/aws/amazon-vpc-cni-k8s/tree/master/config
请注意,这些修复程序尚未出现在任何发布版本中,我们必须从master安装,如下所示:
我们还对AWS CNI进行了升级,以获得良好的效果,尽管这并不是解决我们问题的明确要求:
这里有一堆confusing documentation from AWS使您看起来应该改用新的AWS“附加组件”来管理这些东西,但在与支持人员进行了广泛讨论后,建议您不要使用
相关问题 更多 >
编程相关推荐