Что это значит

HorizontalPodAutoscaler решает, сколько подов нужно, по загрузке процессора и памяти. Эти цифры он берёт у metrics-server через API метрик. Если API метрик не отвечает или не знает про нужные поды, HPA пишет событие FailedGetResourceMetric и ничего не меняет: приложение не масштабируется ни вверх, ни вниз.

Варианты текста подсказывают причину:

  • no metrics returned from resource metrics API или the server is currently unable to handle the request: metrics-server не работает или не может собрать данные с узлов;
  • did not receive metrics for targeted pods (pods might be unready): поды ещё не готовы или только что созданы;
  • missing request for cpu: у контейнеров не заданы запросы ресурсов, и процент загрузки посчитать не от чего.

Как проверить

kubectl top pods -n <namespace>
kubectl get apiservice v1beta1.metrics.k8s.io
kubectl logs -n kube-system deploy/metrics-server --tail=50

Если kubectl top не работает, проблема в metrics-server. В его журнале часто видно Failed to scrape node с таймаутом к порту 10250 узлов: metrics-server не может достучаться до kubelet.

Что сделать

  1. Восстановить metrics-server: доступ к kubelet на узлах (порт 10250), сертификаты kubelet или флаг --kubelet-insecure-tls на тестовых кластерах.
  2. Задать запросы ресурсов у всех контейнеров, которые масштабируются по загрузке.
  3. Поставить тревогу на недоступность API метрик: без неё автомасштабирование тихо перестаёт работать.