由于K8S SIGTERM,服务器中的RabbitMQ客户端处于孤立状态

2024-05-28 23:33:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有一堆使用RabbitMQ的豆荚。如果POD被K8S和SIGTERM关闭,我们发现我们的RMQ客户机(Python Pika)没有时间关闭到RMQ服务器的连接,这导致它认为这些客户机在错过2次心跳之前仍然是活动的

我们的调查发现,在SIGTERM上,K8S杀死了所有的入站TCP连接,最重要的是出站TCP连接,以及其他事情(删除端点等),试图查看在预停止挂钩期间是否仍有任何连接是可能的,但预停止看起来非常专注于内部,没有流量流出

还有其他人经历过这个问题并解决了吗?我们所需要做的就是在库贝莱砰地一声把门关上之前把信息传出去。我们的播客不是K8S“服务”,所以一些suggestions没有帮助

复制步骤:

  1. 将预停止钩睡眠30s添加到发送器吊舱
  2. 接收器吊舱的尾部日志,以查看入站请求
  3. 输入发送者容器的外壳&;循环curl Receiver-请求出现在日志中
  4. k delete pod开始终止发送方pod
  5. curl请求立即开始挂起到发送方,接收方日志中没有任何内容

Tags: 服务器客户机时间rabbitmqcurl事情pikatcp
2条回答

术语没有任何杀伤力,由应用程序决定如何处理它。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安装,如下所示:

  kubectl apply \
  -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-operator.yaml \
  -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-crs.yaml

我们还对AWS CNI进行了升级,以获得良好的效果,尽管这并不是解决我们问题的明确要求:

  kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.8.0/config/v1.8/aws-k8s-cni.yaml
  kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.9.1/config/v1.9/aws-k8s-cni.yaml

这里有一堆confusing documentation from AWS使您看起来应该改用新的AWS“附加组件”来管理这些东西,但在与支持人员进行了广泛讨论后,建议您不要使用

相关问题 更多 >

    热门问题