Автомасштабирование не получает метрики подов
События HorizontalPodAutoscaler «FailedGetResourceMetric: failed to get cpu utilization: unable to get metrics for resource cpu» и «did not receive metrics for targeted pods»: HPA не видит загрузку и не масштабирует приложение. Обычно не работает metrics-server.
Что это значит
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.
Что сделать
- Восстановить metrics-server: доступ к kubelet на узлах (порт 10250), сертификаты kubelet или флаг
--kubelet-insecure-tlsна тестовых кластерах. - Задать запросы ресурсов у всех контейнеров, которые масштабируются по загрузке.
- Поставить тревогу на недоступность API метрик: без неё автомасштабирование тихо перестаёт работать.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать