向GCP负载均衡器发送kubernetes(GKE)服务层度量



我使用GKE,有一个应用程序app1(pod(,它使用NodePort公开,然后放在入口后面。

入口控制器已启动GCP负载平衡器。现在,来自路径/app1/的请求被路由到我的应用程序。

我在集群中启动了stackdriver度量适配器,然后配置了一个HPA,它使用来自负载均衡器的请求/秒度量。HPA从ExternalMetric获取特定后端名称的度量。

- external:
metricName: loadbalancing.googleapis.com|https|request_count
metricSelector:
matchLabels:
resource.labels.backend_target_name: k8s-be-30048--my-backend
targetAverageValue: 20
type: External

一切都很完美。问题来了,

同样在kubernetes集群中运行的其他一些应用程序也在调用这个app1。集群中的其他应用程序通过kubernetes FQDNapp1.default.svc.cluster.local调用app1,而不是通过负载均衡器路由。这意味着这些请求不会通过入口负载均衡器。这意味着HPA不会以任何方式计算这些请求。

因此,这意味着总请求(Ct(是通过LoadBalancer(C1(和FQDN(C2(来的,Ct=C1+C2。我的猜测是,hpa只会考虑C1,而不会考虑Ct。由于这里计算指标的方式,我的hpa不会相应地缩放我的应用程序。例如,如果Ct是120,但C1是90,则吊舱的数量将是3,但实际上应该是4。

我认为通过FQDN来的请求没有被负载均衡器计算在内,这是不是错了?

如果请求被计数,我想我将不得不使用在pod级别上计数请求的东西。有点像普罗米修斯的中间件。你们能提出其他建议吗?

回答以下评论:

是的,这就是障碍。无法预测/关联交通类型。不管怎样,如果可以预测它会有什么帮助?

如果它可以预测(例如,它总是70%(外部(/30%(内部(,您可以调整缩放度量,使其已经包括负载平衡器度量不知道的流量。


您可以选择使用Custom Metrics(例如:每秒查询数(,而不是从负载均衡器本身收集指标(这将考虑内部流量(。

您的应用程序可以向云监控报告自定义度量。您可以配置Kubernetes以响应这些指标并自动扩展您的工作负载。例如,您可以根据每秒查询、每秒写入、网络性能、与不同应用程序通信时的延迟等指标,或其他对您的工作负载有意义的指标来扩展应用程序。可以为以下任何一项选择自定义度量:

  • 特定节点、Pod或任何类型的Kubernetes对象,包括CustomResourceDefinition(CRD(
  • 部署中所有Pod报告的度量的平均值

--Cloud.google.com:Kubernetes引擎:自定义和外部指标:自定义指标

有一份关于创建Custom Metrics:的官方文档

  • Cloud.google.com:监控:自定义度量:创建度量

您还可以查看Metrics Explorer中已经可用的度量。


使用HPA:进行放大/缩小时,您还可以使用多个指标

如果将工作负载配置为基于多个指标自动缩放,HPA将分别评估每个指标,并使用缩放算法根据每个指标确定新的工作负载缩放。将为自动缩放操作选择最大比例。

--Cloud.google.com:Kubernetes引擎:HorizontalPodAutoscaler

关于更多变通解决方案,您还可以使用CPU使用度量。


其他资源:

  • Cloud.google.com:Kubernetes引擎:教程:自动缩放度量:自定义度量
  • Cloud.google.com:Kubernetes引擎:如何:水平吊舱自动缩放

相关内容

  • 没有找到相关文章

最新更新