1

我要解决的问题是 Web 应用程序的水平扩展,其中某些会话会导致 CPU 使用率过高。这个想法是使用 Readiness probe 来通知 K8s pod 已加载当前任务,并且必须将新流量发送到另一个(HPA 将完成这项工作并准备一个新 pod)。

但我希望在初始 pod 上进行处理的会话将处于活动状态,一旦工作完成,结果将交付给用户。

问题是这是否意味着如果就绪探测失败,K8s 将:

  1. 停止将所有流量路由到 pod,删除通过入口打开的当前会话。
  2. 停止将新流量路由到 pod,但当前会话将在指定的超时期间处于活动状态。

先感谢您。

4

1 回答 1

0

更新

我的第一次编辑似乎完全不对。更正确的是指定它将停止将新流量路由到 pod,但像 ssh 这样的 TCP 连接仍然存在。

当 Endpoints 控制器收到就绪探测失败的通知时,它会将 Pod 作为该 Pod 所属的 Service 中的 Endpoint 删除。然后 API 服务器将此信息发送到运行在工作节点上的 kube-proxies,并且 kube-proxies 会更新其节点上的 iptables 规则,这就是阻止新连接转发到此 Pod 的原因。然而值得知道的是,TCP 协议是一个有状态的协议(与 HTTP 不同),因此现有的连接(例如 ssh 会话)仍将处于活动状态。

于 2021-11-25T11:55:56.207 回答