kubernetes - 如何在 Kubernetes 负载均衡器中响应 503 错误代码

标签 kubernetes google-cloud-platform load-balancing

我的 Google Kubernetes Engine 集群中有一个由 Google Cloud Load Balancer 支持的入口。我设置了一个自动缩放器,以根据 CPU 使用情况扩展我的部署的副本数量。假设我已将 CPU 阈值设置为 50%。

当有大量请求时,CPU 使用率会达到 100%。自动扩缩器需要几分钟来实现高负载、创建更多 pod、在必要时创建新节点并通过健康检查。在此扩展期间,部分或大部分请求因超时而失败并出现 502 错误。如果服务器负载过重,我宁愿立即返回 503 错误代码,而不是在 30 秒超时后返回 502 错误代码。

是否可以让负载均衡器将流量引导到 CPU 使用率最低的 Pod?如果没有一个 Pod 的 CPU 使用率低于某个阈值(例如 80%),是否可以返回 503 错误代码?

处理大量流量的标准做法是什么,我应该如何在 Kubernetes 中解决这个问题?

最佳答案

您描述的第一个问题(服务 503)称为“减载”。通常,应用程序有责任说:“哎呀,我重载了,503,慢下来”。如果您将此责任转移给客户,那么为您提供任何合理保护的 react 可能会太慢 - 它的数据将永远落后。从系统可靠性的角度来看,最好将此逻辑保留在服务器应用程序中。

第二个问题是 CPU 感知负载平衡。解决此问题的一种可能方法称为加权循环 - 它类似于常规循环,但更喜欢负载较少的节点。如果安装 istio在 Kubernetes 中,您可以从 a list of load balancing policies 中进行选择.其中之一是weighted least request - 它依赖于飞行中的请求数量,而不是直接依赖于 CPU,但如果所有请求的 CPU 成本大致相同,它可能是 CPU 负载的一个很好的代理。

关于kubernetes - 如何在 Kubernetes 负载均衡器中响应 503 错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50398239/

相关文章:

c# - C#的高可用性和可伸缩性

ajax - 负载平衡、AJAX 和您

Kubernetes Ingress header 单引号

kubernetes - 使用NEG时删除Pod会导致错误

kubernetes 使用不同的命令为同一个镜像创建多个 pods/deployments

google-app-engine - 自动缩放正在运行,但持续出现 502 Google Flexible Environment (NodeJs)

algorithm - 查找负载最少的服务器

spring-boot - Minikube springboot收到请求并且无法正确响应

amazon-web-services - Google Cloud的Cloud Run与无尽技术的可扩展性有何不同?

google-cloud-platform - 无法停止和删除 Google Cloud TPU(Cloud TPU 收到错误请求。请使用 V2 版本的 Cloud TPU API。)