【问题标题】: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 对该应用程序进行负载测试。它只是一个返回True 或False 的http GET 请求。
我想随时间获取延迟指标,以将其提供给 HorizontalPodAutoscaler 以实现自定义自动缩放器。我该如何实现?
【问题讨论】:
标签:
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
- 您可以直接从应用程序中将指标导出到 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 上查看更多代码