【问题标题】:How to use latency of a service deployed on Kubernetes to Scale the deployment?如何使用部署在 Kubernetes 上的服务的延迟来扩展部署?
【发布时间】:2020-02-15 05:29:47
【问题描述】:

我在 GCP 上的 Kubernetes 上部署了一个简单的 Spring Boot 应用程序。该服务向外部 IP 地址公开。我正在使用 JMeter 对该应用程序进行负载测试。它只是一个返回TrueFalse 的http GET 请求。

我想随时间获取延迟指标,以将其提供给 Horizo​​ntalPodAutoscaler 以实现自定义自动缩放器。我该如何实现?

【问题讨论】:

    标签: kubernetes google-cloud-platform prometheus latency google-cloud-stackdriver


    【解决方案1】:

    既然您提到了自定义自动缩放器。我会建议这个简单的解决方案,它利用您可能已经拥有的一些工具。

    第一部分:是创建一个服务或 cron 或任何基于时间的触发器,它们将定期向您部署的应用程序发出请求。然后,此应用程序会将生成的指标存储到持久性存储或文件或数据库等中。

    例如,如果您使用简单的 Apache Benchmark CLI 工具(您也可以使用 Jmeter 或任何其他生成结构化 o/p 的负载测试工具),您将获得单个查询的详细结果。使用this link 绕过结果供您参考。

    第二部分是这个相同的脚本还可以触发另一个事件,该事件将检查根据您的要求配置的延迟或响应时间限制。如果响应时间高于配置值比例,如果它低于比例缩小。

    缩小的逻辑可能更简单,但我会留给你。

    现在要实际扩展部署,您可以使用 Kubernetes API。详情可以参考官方文档或this answer。这是一个简单的流程图。

    【讨论】:

      【解决方案2】:

      有两种方法可以使用自定义指标自动扩展:

      1.您可以从 Deployment 中的每个 Pod 导出自定义指标,并以每个 Pod 的平均值为目标。
      2.您可以从 Deployment 之外的单个 Pod 导出自定义指标,并以总值为目标。

      所以请遵循这些-

      1. 要授予 GKE 对象访问存储在 Stackdriver 中的指标的权限,您需要部署 Custom Metrics Stackdriver Adapter。要运行自定义指标适配器,您必须通过运行以下命令授予用户创建所需授权角色的能力:

      kubectl create clusterrolebinding cluster-admin-binding \
          --clusterrole cluster-admin --user "$(gcloud config get-value account)"
      
      

      部署适配器-

      kubectl create -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter.yaml
      
      
      1. 您可以直接从应用程序中将指标导出到 Stackdriver,也可以将它们以 Prometheus 格式公开,然后将 Prometheus-to-Stackdriver 适配器添加到 Pod 的容器中。

      您可以通过搜索 custom/[METRIC_NAME] 从 Metrics Explorer 查看导出的指标

      您的指标需要满足以下要求:

      • 公制种类必须是 GAUGE
      • 度量类型可以是 DOUBLE 或 INT64
      • 指标名称必须以 custom.googleapis.com/ 前缀开头,后跟简单名称
      • 资源类型必须是“gke_container”
      • 资源标签必须包括:
        • pod_id设置为Pod UID,可以通过Downward API获取
        • container_name = ""
        • project_id、zone、cluster_name,可由您的应用程序从元数据服务器获取。要获取值,您可以使用 Google Cloud 的计算元数据客户端。
      • namespace_id,instance_id,可以设置为任意值。

        3.将指标导出到 Stackdriver 后,您可以部署 HPA 以根据指标扩展您的部署。

      GitHub 上查看更多代码

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-01
        • 1970-01-01
        • 2021-01-13
        • 1970-01-01
        • 2019-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多