- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在移植一个应用程序以在 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。也许它有一种能力可以提供帮助。
最佳答案
网络请求中的自动缩放需要自定义指标。鉴于您使用的是 NGINX 入口 Controller ,您可以先安装 prometheus 和 prometheus 适配器以从 NGINX 入口 Controller 导出指标。默认情况下,NGINX 入口 Controller 已经公开了 prometheus 端点。
关系图将是这样的。
NGINX ingress <- Prometheus <- Prometheus Adaptor <- custom metrics api service <- HPA controller
箭头表示 API 中的调用。因此,您的集群中总共将有另外三个提取组件。
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
我不会在这里详细介绍实际的实现,因为它会包含很多特定于环境的配置。
Service
中的速率限制对象级别,你需要一个强大的服务网格来做到这一点。 Linkerd2 被设计为轻量级的,因此它不附带速率限制功能。你可以在
linkerd2下引用这个问题.维护者拒绝在服务级别实现速率限制。他们会建议您在
Ingress
上执行此操作水平代替。
Service
级别速率限制。
关于kubernetes - K8S 入口 : How to limit requests in flight per pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65598713/
我是一名优秀的程序员,十分优秀!