保持kubernetes吊舱运行,直到最后一个用户断开连接

保持kubernetes吊舱运行,直到最后一个用户断开连接,kubernetes,Kubernetes,我在kubernetes上运行了一个node.js容器,它处理websocket连接,这些连接通常会保持打开状态,直到用户退出。现在,当我进行滚动更新或部署规模缩小时,有没有办法阻止pod被杀死,直到最后一个用户断开连接 目前,Kubernetes不支持优雅的连接关闭 terminationGracePeriodSeconds仅定义Pod终止前的计时器。它不负责Pod连接 处理滚动更新的唯一方法是调整应用程序,使其能够透明地将客户端切换到其他POD 您可能还想看看。在某些情况下,更可靠的设置可能

我在kubernetes上运行了一个node.js容器,它处理websocket连接,这些连接通常会保持打开状态,直到用户退出。现在,当我进行滚动更新或部署规模缩小时,有没有办法阻止pod被杀死,直到最后一个用户断开连接

目前,Kubernetes不支持优雅的连接关闭

terminationGracePeriodSeconds
仅定义Pod终止前的计时器。它不负责Pod连接

处理滚动更新的唯一方法是调整应用程序,使其能够透明地将客户端切换到其他POD

您可能还想看看。在某些情况下,更可靠的设置可能会有所帮助

PDB指定应用程序可以复制的副本数量 容忍拥有,相对于预期拥有的数量。对于 例如,假设部署具有.spec.replicas:5 在任何给定的时间有5个豆荚。如果其PDB允许至少有4个 一段时间后,驱逐API将允许自愿中断一个, 但不是一次两个豆荚

PDB无法防止发生,但 他们确实在预算中占了上风

由于到的滚动升级而被删除或不可用的播客 应用程序不计入中断预算,但控制器 (如部署和有状态集)在执行以下操作时不受PDB的限制 滚动升级–应用程序更新期间的故障处理 在控制器规范中配置。(了解更新 )

当使用逐出API逐出一个pod时,它是优雅的 已终止(请参见中的
terminationGracePeriodSeconds


我对此表示怀疑。一旦SIGTERM被发送到一个容器中,在用SIGKILL将地毯从其脚下拉出之前,它有一个可配置的时间来排空(
spec.template.spec.terminationGracePeriodSeconds
)。如果发生这种情况,最好接受此选项并重新连接用户。@spender那么我可以将terminationGracePeriodSeconds设置为半小时,并在应用程序中捕获SIGTERM,然后在所有客户端断开连接后调用process.exit吗?或者这是一种不好的做法?对我来说这听起来像是一种虐待。这将意味着对部署的更新将有点不可预测。更好的方法是在标准的30秒内优雅地断开客户机的连接,并让他们重新连接。