繁体   English   中英

具有Pometheus的自定义指标的水平Pod Autoscaler和百分位数的CPU使用率

[英]Horizontal Pod Autoscaler with custom metrics from Prometheus with percentiles for CPU usage

所以我试图找出如何从Prometheus的自定义指标读取中配置Horizo​​ntal Pod Autoscaler,该指标返回CPU使用率为0.95的百分比

我已将一切设置为使用带有Prometheus-adapter的自定义指标,但我不了解如何在Prometheus中创建规则。 例如,如果我去Grafana检查默认情况下出现的某些图表,则会看到以下指标:

sum(namespace_pod_name_container_name:container_cpu_usage_seconds_total:sum_rate{namespace="api", pod_name="api-xxxxx9b-bdxx", container_name!="POD", cluster=""}) by (container_name)

但是如何将其修改为百分位数95? 我尝试了histogram_quantile函数,但没有找到数据点:

histogram_quantile(0.95, sum(namespace_pod_name_container_name:container_cpu_usage_seconds_total:sum_rate{namespace="api", pod_name="api-xxxxx9b-bdxx", container_name!="POD", cluster=""}) by (container_name))

但是,即使可行,使用自定义指标时,窗格名称和名称空间是否会由prometheus-adapter或prometheus填充?

我发现使用自定义指标的每个示例都与CPU无关。 所以...我还有另一个问题是人们如何在生产中使用自动缩放指标? 我习惯于根据百分位数进行缩放,但我不了解如何在Kubernetes中进行管理。

如果我对您的理解正确,则不必使用自定义指标即可水平自动缩放广告连播。 默认情况下,您可以根据观察到的CPU使用率自动缩放Kubernetes容器的数量。 这是带有必要详细信息的官方文档

Horizo​​ntal Pod Autoscaler基于观察到的CPU使用率(或借助自定义指标支持,基于其他一些应用程序提供的指标)自动缩放复制控制器,部署或副本集中的Pod数量。

Horizo​​ntal Pod Autoscaler被实现为Kubernetes API资源和控制器。 该资源确定控制器的行为。 控制器会定期调整复制控制器或部署中副本的数量,以使观察到的平均CPU利用率与用户指定的目标相匹配。

在这里,您可以找到如何设置的演练

另外, kubectl autoscale命令文档。

例如: kubectl autoscale rc foo --max=5 --cpu-percent=80

自动缩放复制控制器“ foo”,其窗格数在1到5之间,目标CPU利用率为80%

我认为这是最简单的方法,因此无需将其与某些自定义指标复杂化。

请让我知道是否有帮助。

如果要基于自定义指标添加HPA,则可以使用Prometheus适配器。

Prometheus适配器可帮助您向HPA公开自定义指标。

舵图-https: //github.com/helm/charts/tree/master/stable/prometheus-adapter

Prometheus适配器-https: //github.com/DirectXMan12/k8s-prometheus-adapter

注意-您必须启用从公共端口到群集端口的6443端口,因为prometheus不提供覆盖选项。

https://github.com/helm/charts/blob/master/stable/prometheus-adapter/templates/custom-metrics-apiserver-deployment.yaml#L34

确保Prometheus正在获取自定义指标数据将Prometheus适配器安装在要应用hpa的同一kubernetes集群上

helm install --name my-release stable/prometheus-adapter -f values.yaml

将以下配置文件传递给helm-values.yaml

prometheus-adapter:
  enabled: true
  prometheus:
    url: http://prometheus.namespace.svc.cluster.local
  rules:
    default: true
    custom:
    - seriesQuery: '{__name__="cpu",namespace!="",pod!="",service="svc_name"}'
      seriesFilters: []
      resources:
        overrides:
          namespace: {resource: "namespace"}
          pod: {resource: "pod"}
      name:
        matches: "cpu"
        as: "cpu_95"
      metricsQuery: "histogram_quantile(0.95, sum(irate(<<.Series>>{<<.LabelMatchers>>}[2m])) by (<<.GroupBy>>,le))"

上面的配置将暴露

cpu指标作为HPA的cpu_95。

要验证,是否正确公开了数据,请运行以下命令-

获取数据curl原始查询命令kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/namespaces/namespace_name/pods/\\*/cpu_95 | jq . kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/namespaces/namespace_name/pods/\\*/cpu_95 | jq .

HPA配置-

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: test-cpu-manual
  labels:
    app: app_name
spec:
  scaleTargetRef:
    apiVersion: apps/v1beta2
    kind: Deployment
    name: app_name
  minReplicas: 1
  maxReplicas: 15
  metrics:
  - type: Pods
    pods:
      metricName: cpu_95
      targetAverageValue: 75

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM