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.