【问题标题】:Does a Kubernetes rolling-update gracefully remove pods from a service load balancerKubernetes 滚动更新是否从服务负载均衡器中优雅地删除 pod
【发布时间】:2016-02-10 05:28:55
【问题描述】:

在负载平衡器后面滚动更新主机的标准做法是优雅地使主机停止轮换。这可以通过将主机标记为“不健康”并确保主机不再接收来自负载均衡器的请求来完成。

Kubernetes 是否对由 ReplicationController 管理并为 LoadBalancer Service 提供服务的 Pod 执行类似的操作?

也就是说,Kubernetes 是否会从 LoadBalancer 轮换中取出一个 pod,确保传入的流量已经停止,然后才发出 pod 关闭?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    实际上,一旦您删除 pod,它将处于“终止”状态,直到它被销毁(在 terminateGracePeriodSeconds 之后),这意味着它已从服务负载均衡器中删除,但仍然能够为现有请求提供服务。

    我们还使用“就绪”健康检查,并且 preStop 是同步的,因此您可以让您的 preStop 钩子将 Pod 的就绪状态标记为 false,然后等待它从负载均衡器中移除,然后再进行preStop 挂钩退出。

    【讨论】:

    • 你能提供一个简单的例子吗?我迫切需要等待 Pod 中的命令正常终止,然后再将其从负载均衡器中删除。
    • @Brendan - 我知道它的答案已经很久了,但不应该 - 它会处于“终止”状态,直到它被销毁(直到(而不是之后)terminationGracePeriodSeconds)
    • 您的意思是让preStop 渲染livenessProbe 为假吗?因为这不会导致容器关闭。渲染 livenessProbe false 将启动 Pod 的终止并调用 preStop 事件。
    【解决方案2】:

    不完全是。 Kubernetes 将向 pod 中的容器发送停止命令。如果应用程序没有停止,它将强制终止容器(在 terminateGracePeriodSeconds 参数之后)。

    为了解决这个问题,打开了一堆错误:https://github.com/kubernetes/kubernetes/issues/2789

    我想不出有什么优雅的方法可以做到这一点。

    Pod 有一个 preStop 参数,它将在终止前执行脚本。您可以从此处修改 pod 标签并将其重命名为其他名称。这会欺骗复制控制器,它会发现它现在的副本数量减少了。

    对于带有此标签的 pod,您必须制定自己的逻辑来在它们完成工作时停止它们。

    【讨论】:

      猜你喜欢
      • 2022-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多