HPA показывает TARGETS <unknown>/80% и не масштабирует — найдите обрыв в пути метрик.
HPA не масштабирует при явной нагрузке. Ниже — что вы видите. Объясните, почему TARGETS показывает <unknown> и как вернуть масштабирование — это не проблема порога и не min/max.
$ kubectl get hpa api
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
api Deployment/api <unknown>/80% 2 10 2 15m
$ kubectl describe hpa api
Warning FailedGetResourceMetric unable to get metrics for resource cpu:
no metrics returned from resource metrics API
Warning FailedComputeMetricsReplicas invalid metrics (1 invalid out of 1)
$ kubectl top pods
error: Metrics API not available
Дайте диагноз и фикс.
<unknown> значит, что HPA не может прочитать метрику и не вычисляет число реплик. Падение kubectl top указывает на корень: нет metrics-server, и resource-metrics API ничего не отдаёт. Почините metrics-server и проверьте, что Pod объявляют requests CPU — цели по CPU% нужна база. Это не проблема порога или min/max.
- ✗Снижать процент цели вместо восстановления конвейера метрик
- ✗Игнорировать, что падающий
kubectl topсигналит об отсутствии metrics-server - ✗Забывать, что цели по CPU% нужны requests у Pod для вычисления
- →Почему HPA по проценту CPU требует, чтобы Pod объявляли requests CPU?
- →Как отличить сбой metrics-server от отсутствующего адаптера кастомных метрик?
Решение
<unknown> в TARGETS — это не «порог не тот» и не «границы неверные». Это значит, что HPA не получил значения метрики, поэтому желаемое число реплик он посчитать не может и оставляет реплики как есть.
describe — FailedGetResourceMetric ... no metrics returned. Источник metrics.k8s.io пуст: metrics-server не установлен или нездоров.
манифест), проверить, что его Pod Running и APIService v1beta1.metrics.k8s.io доступен.
считается как использование ÷ request; без request база отсутствует, и метрика остаётся <unknown> даже при живом metrics-server.
- Корень видно по
kubectl top pods→Metrics API not available, а в - Фикс: установить/починить metrics-server (например через Helm-чарт или
- Отдельно убедиться, что у Pod заданы
resources.requests.cpu— цель по CPU%
# metrics-server живёт → top работает → HPA получает метрику
kubectl -n kube-system get deploy metrics-server
kubectl top pods # должен вернуть CPU/MEM, а не ошибку
kubectl get apiservice v1beta1.metrics.k8s.io # AVAILABLE=True