【问题标题】:Specify to Kubernetes when a Pod is "busy"当 Pod “忙”时指定给 Kubernetes
【发布时间】:2020-01-19 01:32:12
【问题描述】:

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

一个例子:

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

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

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

【问题讨论】:

    标签: kubernetes microservices load-balancing docker-for-windows docker-desktop


    【解决方案1】:

    正如 prometherion 建议的那样,您可以使用 liveness probe,我也建议将 rediness probe 添加在一起。

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

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

    在这种情况下,您不想杀死应用程序,但也不想将流量发送到 pod。 K8s 提供就绪探针来检测和缓解这些情况。带有容器报告它们尚未准备好的 pod 不会通过 Kubernetes 服务接收流量。

    【讨论】:

    • 感谢您的回答。我尝试了准备配置,但​​ Kubernetes 的行为仍然相同。 Pod 已正确禁用,但 Kubernetes 不会向其他 Pod 发送请求..
    • 来自服务检查标签与pod和服务相同。
    • 是的,标签是一样的
    • 如果容器在 pod 内运行,则 pod 的状态将准备就绪,服务将转移流量。除非容器未运行或应用程序端点未提供 200 服务,否则会将流量转移到 pod。
    • 我认为您的回答还可以,因为它回答了我的问题。不幸的是它并没有解决我的问题,因为问题实际上在另一个地方,我问了这个问题后才意识到。
    【解决方案2】:

    你必须使用LivenessProbe

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

    LivenessProbe 可以是TCPHTTP

    【讨论】:

    • @Harsh Manvar 答案更适合:LivenessProbe & ReadinessProbe FTW
    • 你提供了最简单的解决方案,我后来想了很多,后来在我脑海中阅读你的答案是关于 LivenessProbe 和 ReadinessProbe 的出现;
    • @prometherion 感谢您的回答。就像你说的 Harsh Manvar 的回答更合适,所以我会接受这个。
    猜你喜欢
    • 2018-09-02
    • 1970-01-01
    • 2020-05-22
    • 2017-12-09
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    相关资源
    最近更新 更多