Commands
Kubernetes

kubectl top: Потребление CPU и памяти нодами и подами

Потребление CPU и памяти нодами и подами

Базовый синтаксис

Команда kubectl top показывает текущее потребление CPU и памяти ресурсов в кластере. Для работы требуется установленный и запущенный metrics-server. Без него команда вернет ошибку.

Самый простой вызов для подов в текущем неймспейсе:

kubectl top pods

Вывод будет примерно таким:

NAME                          CPU(cores)   MEMORY(bytes)
my-app-7f6d8c5d4b-abc12       45m          250Mi
redis-0                       5m           80Mi

Здесь CPU(cores) показывает использование процессора в миллияхдрах (1000m = 1 ядро), а MEMORY(bytes) — потребление памяти в мебибайтах (Mi).

Полезные флаги

kubectl top nodes — показывает загрузку самих рабочих узлов. Незаменим для быстрой оценки общей нагрузки в кластере и поиска «узких» мест.

kubectl top nodes

Пример вывода:

NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
node-01    550m         27%    3456Mi          44%
node-02    1200m        60%    5120Mi          65%

Видно, что node-02 сильно загружен по CPU (60%), что может быть причиной медленной работы подов на нем.

--containers — выводит метрики не только для пода, но и для каждого контейнера внутри него. Ключевой флаг для детальной диагностики.

kubectl top pods --containers

Вывод:

POD       CONTAINER   CPU(cores)   MEMORY(bytes)
my-app    app         40m          220Mi
my-app    sidecar     5m           30Mi

Здесь видно, что основное потребление памяти идет в основном контейнере app, а не в sidecar.

Типичные сценарии

1. Поиск пода с утечкой памяти в неймспейсе. Сортируем вывод, чтобы видеть самых «прожорливых».

kubectl top pods -n production --sort-by=memory

Подам вверху списка — первым кандидатам на детальный разбор через kubectl describe pod и логи.

2. Диагностика проблемы с нодой, которую планируют вывести из обслуживания. Смотрим, есть ли на ней поды с высокой нагрузкой, которые будет сложно «переехать».

kubectl top pods -A --field-selector spec.nodeName=node-05

Эта команда покажет все поды (-A для всех неймспейсов), работающие на конкретной ноде node-05, и их текущее потребление ресурсов.

Частые ошибки

Ошибка: error: metrics not available yet. Самая распространенная проблема. Причина — не установлен или не работает metrics-server. Решение — проверить его статус:

kubectl get apiservices | grep metrics
kubectl get pods -n kube-system | grep metrics-server

Отсутствие прав. Команда требует разрешений на чтение метрик. Если вы используете RBAC, убедитесь, что у вашего пользователя или ServiceAccount есть доступ к ресурсам nodes/metrics и pods/metrics в API.