Как определить ресурсы (capacity и allocatable) ноды в Kubernetes?

«Как определить ресурсы (capacity и allocatable) ноды в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ресурсы ноды делятся на 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.