gpt4 book ai didi

websocket - Kubernetes 在滚动更新期间终止之前不会等待所有 websocket 连接关闭

转载 作者:行者123 更新时间:2023-12-02 11:47:28 27 4
gpt4 key购买 nike

我试图在使用 EKS(AWS K8s 服务)的滚动更新期间实现 0 停机时间。

我有一个 WebSocket 服务器,我想确保在此服务器的滚动更新期间,现有的连接将一直保持,直到 WebSocket 在工作完成后关闭。

我认为 K8s 滚动更新功能可以帮助我解决这个问题,但事实并非如此。我试过了,它只是在仍然连接到 WebSocket 时杀死了 pod。

如果我理解 document正确,那么 pod 终止是这样的:

  • 用户向 K8s API
  • 发出 pod 删除信号
  • K8s 停止将新流量路由到此 pod 并发送 SIGTERM 信号
  • 应用程序必须处理此信号并在指定的 grace-period 中开始其自身的正常终止。 (默认为 30 秒)
  • 之后,K8s 会发送一个 SIGKILL 信号来强制终止 pod。

  • 如果我的上述理解是正确的,显然没有办法告诉 K8s:
  • 不要中断当前连接
  • 让它们运行多久就运行多久(它们最终会关闭,但周期变化很大)
  • 关闭所有连接后,终止 pod

  • 问题 :有什么方法可以确保K8s:
  • 不中断 WebSocket 连接
  • 不强制应用程序终止特定 grace-period 中的连接
  • 检测所有 WebSocket 连接何时关闭并终止 pod

  • 如果有人可以帮助我,将不胜感激。

    最佳答案

    对于任务关键型应用程序,请进行定制的蓝绿部署。

    首先使用新选择器部署新版本部署,当所有 POD 副本都已启动并准备好服务流量时,切换服务选择器以指向新版本部署。

    在此之后将终止开关发送到旧版本,该版本可以优雅地处理和断开所有客户端。因此,所有新的重新连接都被转发到已经设置为服务流量的新版本。

    关于websocket - Kubernetes 在滚动更新期间终止之前不会等待所有 websocket 连接关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55651715/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com