Я пытаюсь настроить Horizontal Pod Autoscaler для масштабирования развертывания на основе рабочего цикла подключенных графических процессоров.
Я использую GKE, и моя основная версия Kubernetes - 1.10.7-gke.6.
Я работаю над учебником на https://cloud.google.com/kubernetes-engine/docs/tutorials/external-metrics-autoscaling. В частности, я выполнил следующую команду для настройки пользовательских показателей:
kubectl create -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter.yaml
Похоже, это сработало, или, по крайней мере, я могу получить доступ к списку показателей на /apis/custom.metrics.k8s.io/v1beta1.
Это мой YAML:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: images-srv-hpa
spec:
minReplicas: 1
maxReplicas: 10
metrics:
- type: External
external:
metricName: container.googleapis.com|container|accelerator|duty_cycle
targetAverageValue: 50
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: images-srv-deployment
Я считаю, что metricName существует, потому что он указан в /apis/custom.metrics.k8s.io/v1beta1 и потому что он описан в https://cloud.google.com/monitoring/api/metrics_gcp.
Это ошибка, которую я получаю при описании HPA:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedGetExternalMetric 18s (x3 over 1m) horizontal-pod-autoscaler unable to get external metric prod/container.googleapis.com|container|accelerator|duty_cycle/nil: no metrics returned from external metrics API
Warning FailedComputeMetricsReplicas 18s (x3 over 1m) horizontal-pod-autoscaler failed to get container.googleapis.com|container|accelerator|duty_cycle external metric: unable to get external metric prod/container.googleapis.com|container|accelerator|duty_cycle/nil: no metrics returned from external metrics API
Я действительно не знаю, как это исправить. Кто-нибудь знает, что может быть не так, или что я могу сделать дальше?
Вы смогли это решить?
Я сделал, добавил разрешение в ответе ниже.
Вы используете «тип: внешний». Для списка внешних показателей необходимо использовать kubernetes.io вместо container.googleapis.com [1].
Замените «metricName: container.googleapis.com | container | accelerator | duty_cycle».
с участием
‘MetricName: kubernetes.io | container | accelerator | duty_cycle’
[1] https://cloud.google.com/monitoring/api/metrics_other#other-kubernetes.io
Эта проблема исчезла сама по себе, как только я поместил систему под нагрузку. Теперь он работает нормально с той же конфигурацией.
Не знаю почему. Я предполагаю, что StackMetrics не сообщал значение рабочего цикла, пока оно не превысило 1%.
Все выглядит хорошо, вы включили stackdriver?