kubernetes - Kubernetes 中的自定义负载均衡

标签 kubernetes load-balancing kubernetes-pod

我们正在开发一款模拟软件,该软件可以使用 kubernetes 在多个 Pod 之间部署和扩展。 当用户发出模拟请求时,会选择一个 pod,该 pod 开始执行工作并被视为繁忙。 当另一个用户发出模拟请求时,它应该被路由到下一个空闲的 Pod。 目前,经常会选择繁忙的 pod(即使有空闲的 pod),因为 kubernetes 不知道哪些 pod 繁忙/空闲。

是否可以通过始终选择空闲 Pod 的方式来平衡请求? (假设 Pod 内的每个应用程序实例都公开一个 HTTP 端点,该端点告知其当前的繁忙/空闲状态)

最佳答案

我认为你可以利用readiness probes :

Sometimes, applications are temporarily unable to serve traffic. For example, an application might need to load large data or configuration files during startup, or depend on external services after startup. In such cases, you don't want to kill the application, but you don't want to send it requests either. Kubernetes provides readiness probes to detect and mitigate these situations. A pod with containers reporting that they are not ready does not receive traffic through Kubernetes Services.

您可以使应用程序响应具有非 200 返回代码的探测请求。将会注意到,在就绪探测再次成功之前,不会传入任何新请求。但也有缺点:

  • 当所有 Pod 都忙时,您会收到 502 错误;
  • 用户将无法向其 pod 提交后续请求(因为 pod 会很忙);
  • 更改就绪状态需要一些时间,因此如果您在短时间内(探测间隔)收到大量请求(超过 Pod 数量),某些 Pod 可能会接受多个请求。

关于kubernetes - Kubernetes 中的自定义负载均衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67903732/

相关文章:

kubernetes - 如何正确给出Kubernetes中POD名称的模式?

c# - 使用负载平衡时如何锁定对象

amazon-web-services - AWS 和 Azure 混合云设置 - 此配置是否可行(Azure 负载均衡器 -> AWS VM)?

amazon-web-services - 将 Cloudflare 与 Amazon EC2 和负载均衡器结合使用

logging - Kubernetes 上的 Airflow 无法获取日志

kubernetes - Operator SDK Controller 无法更新自定义资源状态

spring-boot - 如何在 Docker/Kubernetes 中安装 Java 自签名证书?

kubernetes - 重写入口nginx的问题

kubernetes - kubectl 等到 pod 消失(终止)

docker - Kubernetes 在现有目录上挂载卷,其中包含容器内的文件