当 Pod 为 "busy" 时指定给 Kubernetes

Specify to Kubernetes when a Pod is "busy"

我的一项微服务是 运行 在 Kubernetes 上。 我想在 pod 繁忙时指定给 K8s 负载均衡器,因为我当前得到的行为不正常。

一个例子:

我有8个pods运行,每个pod一次可以处理1个请求。每个请求占用分配给 pod 的 CPU 核心的 70% 到 100%。 但是当我向我的应用程序发送 8 个请求时,Kubernetes 不会将这些请求分派给 8 pods 而是尝试只使用一个。由于我正在阻止(通过线程池)应用程序的每个副本一次只使用一个线程,当然请求会排队等待 pod 1。

所以我的问题是:我如何告诉 Kubernetes POD 1 正忙并且负载均衡器必须将请求 2 分派给 POD 2?

注意: 出于开发和测试目的,我在 Windows 上使用 Docker 桌面(Docker for Windows) ] 10 和 kubectl.

你必须使用LivenessProbe

当 Pod 无法处理请求时,其 IP 将从服务端点中删除,因此不会向其转发任何流量。

LivenessProbe 可以是 TCP or HTTP

正如 prometherion 所建议的,您可以使用活性探针,而且我建议将 rediness probe 加在一起。

你可以看看官方文档:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/

有时,应用程序暂时无法处理流量。例如,当应用程序在启动过程中首先需要加载大数据或配置文件时。

在这种情况下,您不想终止应用程序,但也不想将流量发送到 pods。 K8s 提供就绪探针来检测和缓解这些情况。报告未就绪的容器的 Pod 不会通过 Kubernetes 服务接收流量。