因此,我试图从Prometheus的自定义指标读数中找出如何配置“水平Pod自动定标器”,以返回百分比为0.95的CPU使用率
我已设置所有内容以使用带有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中进行管理。
答案 0 :(得分:0)
如果我对您的理解正确,则无需使用自定义指标即可水平自动缩放广告连播。默认情况下,您可以根据观察到的CPU使用率自动缩放Kubernetes容器的数量。 这是official documentation,其中包含必要的详细信息。
水平吊舱自动缩放器会自动缩放吊舱的数量 在复制控制器,部署或副本集中基于 观察到的CPU使用率(或在某些情况下使用自定义指标支持) 其他应用程序提供的指标)。
Horizontal Pod Autoscaler被实现为Kubernetes API 资源和控制器。资源决定了行为 控制器。控制器定期调整副本数 在复制控制器或部署中以匹配观察到的 用户指定目标的平均CPU利用率。
在这里您可以找到如何进行设置的walkthrough。
此外,here是kubectl autoscale
命令文档。
示例:kubectl autoscale rc foo --max=5 --cpu-percent=80
自动缩放复制控制器“ foo”,其窗格数在1到5之间,目标CPU利用率为80%
我相信这是最简单的方法,因此无需将其与某些自定义指标复杂化。
请告诉我是否有帮助。
答案 1 :(得分:0)
如果要基于自定义指标添加HPA,则可以使用Prometheus适配器。
Prometheus适配器可帮助您向HPA公开自定义指标。
头盔图表-https://github.com/helm/charts/tree/master/stable/prometheus-adapter
Prometheus适配器-https://github.com/DirectXMan12/k8s-prometheus-adapter
注意-您必须启用从公共端口到群集的6443端口,因为prometheus不提供覆盖选项。
确保Prometheus正在获取自定义指标数据 在要应用hpa的同一kubernetes集群上安装Prometheus适配器
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 .
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