将 kubernetes(GKE) 服务层指标发送到 GCP 负载均衡器

Posted

技术标签:

【中文标题】将 kubernetes(GKE) 服务层指标发送到 GCP 负载均衡器【英文标题】:Send kubernetes(GKE) service layer metrics to GCP Load Balancer 【发布时间】:2021-01-27 12:25:30 【问题描述】:

我正在使用 GKE,并且有一个使用 NodePort 公开的 application-app1(pod),然后放在入口后面。

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

我在集群内启动了 stackdriver-metrics 适配器,然后我配置了一个 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 FQDN app1.default.svc.cluster.local 而不是通过负载均衡器路由调用 app1。这意味着这些请求不会通过入口负载均衡器。这意味着 HPA 不会以任何方式计算这些请求。

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

我认为负载均衡器不计算通过 FQDN 来的请求是不是错了?

如果正在计算请求,我想我将不得不使用在 pod 级别计算请求的东西。类似于普罗米修斯中间件的东西。各位有什么建议吗?

【问题讨论】:

您的EXTERNAL/INTERNAL 流量的负载百分比能否以任何方式预测?负载百分比是相当稳定还是在内部和外部(90/10、10/90)之间波动很大? 是的,这就是障碍。无法预测/关联流量类型。无论如何,如果可以预测它会有什么帮助? 【参考方案1】:

回答以下评论:

是的,这就是障碍。无法预测/关联流量类型。无论如何,如果可以预测它会有什么帮助?

如果可以预测(例如始终为 70%(外部)/30%(内部),您可以调整扩展指标以包含负载均衡器指标不知道的流量。


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

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

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

-- Cloud.google.com: Kubernetes Engine: Custom and external metrics: Custom metrics

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

Cloud.google.com: Monitoring: Custom metics: Creating metrics

您还可以查看Metrics Explorer 中已有的指标。


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

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

-- Cloud.google.com: Kubernetes Engine: HorizontalPodAutoscaler

至于更多变通解决方案,您还可以使用CPU 使用指标。


其他资源:

Cloud.google.com: Kubernetes Engine: Tutorials: Autoscaling metrics: Custom metrics Cloud.google.com: Kubernetes Engine: How to: Horizontal pod autoscaling

【讨论】:

以上是关于将 kubernetes(GKE) 服务层指标发送到 GCP 负载均衡器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GKE 自动驾驶仪中基于自定义指标实现水平自动缩放

将文件放置在 GKE 上的 Kubernetes 持久卷存储中

Prometheus 未从 GKE 中的 cadvisor 接收指标

在 golang 中收集 Kubernetes 指标

GKE上的度量指标未按预期运行-缺少部署,节点等

如何使用 Terraform 将 GKE 凭证传递给 Kubernetes 提供者?