问题
I have configured Prometheus-adapter to fetch custom metrics from Prometheus.
When I execute the command:
kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1
Following is the result.
{
"name": "namespaces/envoy_http_ingress_http_downstream_cx_http1",
"singularName": "",
"namespaced": false,
"kind": "MetricValueList",
"verbs": [
"get"
]
},
{
"name": "namespaces/envoy_cluster_xds_cluster_upstream_cx_rx_bytes",
"singularName": "",
"namespaced": false,
"kind": "MetricValueList",
"verbs": [
"get"
]
},
{
"name": "jobs.batch/statsd_exporter_lines",
"singularName": "",
"namespaced": true,
"kind": "MetricValueList",
"verbs": [
"get"
]
},
{
"name": "pods/fs_writes_merged",
"singularName": "",
"namespaced": true,
"kind": "MetricValueList",
"verbs": [
"get"
]
},
My HPA configuration is as follows:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: scale
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: billing-app
minReplicas: 1
maxReplicas: 10
# targetCPUUtilizationPercentage: 50
metrics:
- type: External
external:
metricName: fs_writes_merged
targetValue: 100
Hpa results in unknown. Not sure why it is not able to fetch metrics.
Hpa must be able to read the custom metrics.
回答1:
Answer
Since your HPA configuration declares the metric as type: External, the HPA tries to fetch it from the External Metrics API (/apis/custom.metrics.k8s.io), but the Prometheus Adapter exposes it on the Custom metrics API (/apis/custom.metrics.k8s.io).
Since your metric comes from the Pods of the Deployment that you're trying to autoscale, you should use the Pods metric type. So, change your HPA configuration to:
# ...
metrics:
- type: Pods
pods:
metricName: fs_writes_merged
targetValue: 100
Background
You can see all the available HPA metric types and their usages here:
kubectl explain --api-version=autoscaling/v2beta1 hpa.spec.metrics
There are four metric types, and they map to the various metric APIs as follows:
Resource: Resource Metrics API (/apis/metrics.k8s.io/v1beta1)Pods: Custom Metrics API (/apis/custom.metrics.k8s.io/v1beta1)Object: Custom Metrics API (/apis/custom.metrics.k8s.io/v1beta1)External: External Metrics API (/apis/external.metrics.k8s.io/v1beta1)
See HPA docs, and design documents for Resource Metrics API, Custom Metrics API, and External Metrics API.
来源:https://stackoverflow.com/questions/55725014/hpa-is-unable-to-fetch-custom-metrics-from-prometheus-adapter