Ответ
Ресурсы ноды делятся на Capacity (общие физические/виртуальные ресурсы) и Allocatable (ресурсы, доступные для планирования подов). Разница уходит на системные демоны (kubelet, container runtime, OS) и резерв под eviction.
1. Основная команда для просмотра всех деталей:
kubectl describe node <node-name>
В выводе ищите секции:
Capacity:
cpu: 4
ephemeral-storage: 61255492Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 16394484Ki
pods: 110
Allocatable:
cpu: 3920m
ephemeral-storage: 56441946648
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 15208564Ki
pods: 110
2. Получение данных в структурированном виде (JSON/YAML):
# JSON с помощью jq
kubectl get node <node-name> -o json | jq '.status.capacity, .status.allocatable'
# YAML
kubectl get node <node-name> -o yaml
3. Мониторинг текущего использования:
# Требуются установленные метрики (Metrics Server)
kubectl top node <node-name>
4. Практический пример анализа через kubectl describe:
# Смотрим, сколько ресурсов уже выделено подам
kubectl describe node <node-name> | grep -A 5 "Allocated resources"
# Вывод:
# Allocated resources:
# (Total limits may be over 100 percent, i.e., overcommitted.)
# Resource Requests Limits
# -------- -------- ------
# cpu 1850m (47%) 1100m (28%)
# memory 1200Mi (8%) 800Mi (5%)
Здесь видно, что из Allocatable CPU (3920m) уже запрошено подами 1850m.