如何使用Kubernetes上部署的服务的延迟来扩展部署?

时间:2019-10-18 08:41:06

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

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

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

2 个答案:

答案 0 :(得分:3)

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

第一部分::将创建服务或cron或任何基于时间的触发器,这些触发器将定期向已部署的应用程序发出请求。然后,该应用程序会将结果指标存储到持久性存储或文件或数据库等中。

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

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

缩小规模的逻辑可能更琐碎,但我将留给您。

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

enter image description here

答案 1 :(得分:1)

使用自定义指标自动缩放的方法有两种:

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

所以请遵循这些-

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

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. 您可以直接从应用程序中导出指标,也可以将指标以Prometheus格式公开,然后将Prometheus-to-Stackdriver适配器添加到Pod的容器中。

您可以通过搜索自定义/ [METRIC_NAME]

从Metrics Explorer中查看导出的指标。 您的指标需要满足以下要求:

  • 公制种类必须为量规
  • 指标类型可以是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上查看此代码以获取其他代码