Автоматическое масштабирование AKS с метриками KEDA Prometheus - HPA не может получить метрики
Мы успешно развернули следующую настройку для моего приложения обработки изображений в Azure (AKS):
- Кластер AKS с 1 узлом графического процессора (который необходимо масштабировать с учетом входящего трафика)
- 1 модуль, на котором запущена модель Tensorflow на узле графического процессора (максимум 1 модуль на узел из-за ограничений памяти)
- Prometheus для очистки показателей использования графического процессора (экспортер NVIDIA DCGM)
- Масштабируемый объект KEDA для горизонтального автомасштабирования модулей (HPA) - в том же пространстве имен, что и наше развертывание
- Запрос:
ceil(avg_over_time(DCGM_FI_DEV_GPU_UTIL{namespace="myproject"}[2m])
Развертывание основано на:
https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stackhttps://keda.sh/docs/1.4/scaler/prometheus/
При такой настройке он может автоматически масштабировать модули (по горизонтали) на основе показателей использования графического процессора DCGM, от 1 до 2 модулей. Следовательно, автоматическое масштабирование кластера следует и масштабирует количество узлов графического процессора в кластере от 1 до 2. Новый требуемый модуль успешно назначается этому новому узлу, и средняя загрузка графического процессора уменьшается. Однако после того, как вновь добавленный узел и второй модуль назначены ему, объект KEDA HPA больше не может получать метрики внешнего графического процессора. Как следствие, объект HPA не работает и не может уменьшить размер модулей, поэтому количество модулей (и узлов) остается равным 2.
Кажется, что все модули и службы на обоих узлах исправны. Кроме того, на новом узле работает модуль экспорта DCGM, поэтому он должен иметь возможность очищать метрики от этого узла.
Есть ли у кого-нибудь опыт с этим? Или знаете, как я могу отлаживать? Ниже вывод, когда я описываю HPA.
Если мы будем использовать другие показатели помимо DCGM, например
http_request_total
, мы можем получить метрики со всех узлов, поэтому мы ожидаем ошибки в части DCGM, которая нам нужна для метрик графического процессора. Мы установили DCGM в
dcgm-exporter
пространство имен, а также настроил это в Prometheus
additionalScrapeConfig
раздел.
Если вам нужна дополнительная информация, чтобы помочь каким-либо образом, пожалуйста, дайте мне знать! Заранее спасибо.
kubectl describe hpa keda-hpa-prometheus-scaled-object -n myproject
Name: keda-hpa-prometheus-scaled-object
Namespace: myproject
Labels: app.kubernetes.io/managed-by=keda-operator
app.kubernetes.io/name=keda-hpa-prometheus-scaled-object
app.kubernetes.io/part-of=prometheus-scaled-object
app.kubernetes.io/version=2.0.0
deploymentName=myproject-deployment
scaledObjectName=prometheus-scaled-object
Annotations: <none>
CreationTimestamp: Thu, 22 Apr 2021 13:30:57 +0200
Reference: Deployment/myproject-deployment
Metrics: ( current / target )
"prometheus-http---XX-X-XXX-XXX-9090--DCGM_FI_DEV_GPU_UTIL" (target average value): 41 / 60
Min replicas: 1
Max replicas: 2
Deployment pods: 2 current / 2 desired
Conditions:
Type Status Reason Message
---- ------ ------ -------
AbleToScale True SucceededGetScale the HPA controller was able to get the target's current scale
ScalingActive False FailedGetExternalMetric the HPA was unable to compute the replica count: unable to get external metric myproject/prometheus-http---XX-X-XXX-XXX-9090--DCGM_FI_DEV_GPU_UTIL/&LabelSelector{MatchLabels:map[string]string{scaledObjectName: prometheus-scaled-object,},MatchExpressions:[]LabelSelectorRequirement{},}: unable to fetch metrics from external metrics API: No matching metrics found for prometheus-http---XX-X-XXX-XXX-9090--dcgm_fi_dev_gpu_util
ScalingLimited False DesiredWithinRange the desired count is within the acceptable range
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedComputeMetricsReplicas 45m (x12 over 47m) horizontal-pod-autoscaler invalid metrics (1 invalid out of 1), first error is: failed to get prometheus-http---XX-X-XXX-XXX-9090--DCGM_FI_DEV_GPU_UTIL external metric: unable to get external metric myproject/prometheus-http---XX-X-XXX-XXX-9090--DCGM_FI_DEV_GPU_UTIL/&LabelSelector{MatchLabels:map[string]string{scaledObjectName: prometheus-scaled-object,},MatchExpressions:[]LabelSelectorRequirement{},}: unable to fetch metrics from external metrics API: No matching metrics found for prometheus-http---XX-X-XXX-XXX-9090--dcgm_fi_dev_gpu_util
Warning FailedGetExternalMetric 2m55s (x178 over 47m) horizontal-pod-autoscaler unable to get external metric myproject/prometheus-http---XX-X-XXX-XXX-9090--DCGM_FI_DEV_GPU_UTIL/&LabelSelector{MatchLabels:map[string]string{scaledObjectName: prometheus-scaled-object,},MatchExpressions:[]LabelSelectorRequirement{},}: unable to fetch metrics from external metrics API: No matching metrics found for prometheus-http---XX-X-XXX-XXX-9090--dcgm_fi_dev_gpu_util