负载均衡器后面的主机滚动更新的标准做法是优雅地使主机不能轮换。这可以通过将主机标记为“不健康”并确保主机不再接收来自负载均衡器的请求来完成。
Kubernetes是否为由ReplicationController管理并为LoadBalancer服务提供服务的pod执行类似操作?
即,Kubernetes是否将一个pod从LoadBalancer轮换中取出,确保传入流量已经消失,然后才发出pod关闭?
答案 0 :(得分:3)
实际上,一旦你删除了pod,它就会在"终止"状态直到它被销毁(在terminationGracePeriodSeconds之后),这意味着它从服务负载均衡器中删除,但仍然能够提供现有请求。
我们也使用"准备就绪"运行状况检查和preStop是同步的,因此您可以使preStop挂钩标记pod的准备就绪为假,然后等待它从负载均衡器中删除,然后再退出preStop挂钩。
答案 1 :(得分:0)
不完全。 Kubernetes将向pod中的容器发送stop命令。如果应用程序没有停止,它将强制终止容器(在terminationGracePeriodSeconds参数之后)。
为了解决这个问题,有一堆漏洞被打开:https://github.com/kubernetes/kubernetes/issues/2789
我无法想到任何能做到这一点的优雅。
pod有一个preStop参数,可以在终止前执行脚本。您可以从此处修改pod标签并将其重命名为其他内容。这将欺骗复制控制器,它将看到它现在具有较少数量的副本。
对于带有此标签的pod,您必须在完成工作后自行停止它们。