gpt4 book ai didi

kubernetes - K8S 入口 : How to limit requests in flight per pod

转载 作者:行者123 更新时间:2023-12-03 18:57:19 28 4
gpt4 key购买 nike

我正在移植一个应用程序以在 k8s 中运行。我遇到了入口问题。我试图找到一种方法来限制在任何给定时间向部署管理的每个后端 pod 发送的 REST API 请求的数量。
请参阅下面的图像,显​​示架构。
Ingress 由 nginx-ingress 管理。对于一组给定的 URL 路径,入口将请求转发到以部署 REST API 后端进程为目标的服务。部署也由基于 CPU 负载的 HPA 管理。
我想要做的是找到一种方法来对入口请求进行排队,以便在运行我们的 API 后端进程的任何 pod 中发送的请求永远不会超过 X 个。 (例如,每个 pods 一次仅允许 50 个请求在飞行中)
有谁知道如何像这样设置请求限制?
作为一个额外的问题,我需要做的下一件事是让 HPA 监控请求排队并自动扩大/缩小部署以将 pod 的数量与当前正在处理/排队的请求数量相匹配。例如,如果每个 pod 可以同时处理 100 个正在运行的请求,并且我们目前有 1000 个请求的负载级别要处理,那么自动缩放到 10 个 pod。
如果有用,我还计划为该集群安装 linkerd。也许它有一种能力可以提供帮助。
enter image description here

最佳答案

网络请求中的自动缩放需要自定义指标。鉴于您使用的是 NGINX 入口 Controller ,您可以先安装 prometheus 和 prometheus 适配器以从 NGINX 入口 Controller 导出指标。默认情况下,NGINX 入口 Controller 已经公开了 prometheus 端点。
关系图将是这样的。

NGINX ingress <- Prometheus <- Prometheus Adaptor <- custom metrics api service <- HPA controller
箭头表示 API 中的调用。因此,您的集群中总共将有另外三个提取组件。
设置自定义指标服务器后,您可以根据来自 NGINX 入口的指标扩展您的应用程序。 HPA 将如下所示。
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: srv-deployment-custom-hpa
spec:
scaleTargetRef:
apiVersion: extensions/v1beta1
kind: Deployment
name: srv-deployment
minReplicas: 1
maxReplicas: 100
metrics:
- type: Pods
pods:
metricName: nginx_srv_server_requests_per_second
targetAverageValue: 100
我不会在这里详细介绍实际的实现,因为它会包含很多特定于环境的配置。
设置完成后,您可以看到 HPA 对象将显示从适配器中提取的指标。
对于 Service 中的速率限制对象级别,你需要一个强大的服务网格来做到这一点。 Linkerd2 被设计为轻量级的,因此它不附带速率限制功能。你可以在 linkerd2下引用这个问题.维护者拒绝在服务级别实现速率限制。他们会建议您在 Ingress 上执行此操作水平代替。
AFAIK、Istio 和一些高级服务网格提供了速率限制功能。如果您还没有将 linkerd 部署为您的服务网格选项,您可以尝试使用 Istio。
Istio 可以引用 this document看看如何进行速率限制。但是我需要让您知道带有 NGINX 入口的 Istio 可能会给您带来麻烦。 Istio 附带有自己的入口 Controller 。您将需要进行额外的工作才能使其正常工作。
总而言之,如果您可以在请求数量中使用带有自定义指标的 HPA,它将是解决您在流量控制中的问题的快速解决方案。除非您在交通控制方面仍然遇到困难,否则您将需要考虑 Service级别速率限制。

关于kubernetes - K8S 入口 : How to limit requests in flight per pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65598713/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com