网络请求中的自动缩放需要自定义指标。鉴于您使用的是 NGINX 入口控制器,您可以先安装 prometheus 和 prometheus 适配器以从 NGINX 入口控制器导出指标。默认情况下,NGINX 入口控制器已经暴露了 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 和一些高级服务网格提供了速率限制功能。如果您尚未将链接器部署为您的服务网格选项,您可以尝试使用 Istio。
对于 Istio,您可以参考此文档以了解如何进行速率限制。但我需要告诉你,带有 NGINX 入口的 Istio 可能会给你带来麻烦。Istio 附带了自己的入口控制器。你需要做额外的工作才能让它发挥作用。
总而言之,如果您可以在请求数量中使用带有自定义指标的 HPA,它将是解决您的流量控制问题的快速解决方案。除非您仍然很难控制流量,否则您将需要考虑Service
级别速率限制。