我在kubernetes上运行一个node.js容器,该容器处理Websocket连接,这些连接通常保持打开状态,直到用户退出。现在,当我进行滚动更新或按比例缩小部署时,是否有办法阻止Pod被杀死,直到最后一个用户断开连接?
答案 0 :(得分:0)
目前,Kubernetes不支持正常连接关闭。
terminationGracePeriodSeconds
仅在Pod终止之前定义计时器。它不会处理Pod连接。
处理滚动更新的唯一方法是调整您的应用程序,使其能够透明地将客户端切换到其他Pod。
您可能还想看看Disruption Budget。在某些情况下,进行更可靠的设置可能会有所帮助。
PDB指定应用程序可以复制的副本数 相对于打算拥有的数量,可以容忍拥有。对于 例如,具有.spec.replicas:5的部署应该 在任何给定时间有5个豆荚。如果其PDB允许有4个 一段时间后,Eviction API将允许自愿中断一个, 但一次不能两个豆荚。
PDB无法阻止involuntary disruptions的发生,但是 他们确实计入了预算。
由于滚动升级到 应用程序确实计入了中断预算,但是 controllers (例如 deployment 和 stateful-set )不受PDB的限制 滚动升级–处理应用程序更新期间的故障 在控制器规格中配置。 (了解有关更新 deployment。)
使用驱逐API驱逐Pod时,它会优雅地 终止(请参见PodSpec中的
terminationGracePeriodSeconds
。)