Как посмотреть количество доступных (allocatable) узлов (nodes) и их ресурсов в Kubernetes?

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

Ответ

Вопрос, вероятно, касается не количества самих узлов, а количества доступных (allocatable) ресурсов (CPU, памяти) на узлах кластера. Количество узлов и их статус можно посмотреть базовой командой:

kubectl get nodes

Чтобы увидеть детальную информацию о доступных (allocatable) и выделяемых (allocated) ресурсах на каждом узле:

# Компактный и информативный вывод с кастомными колонками
kubectl get nodes -o custom-columns="NAME:.metadata.name,ALLOCATABLE_CPU:.status.allocatable.cpu,ALLOCATABLE_MEM:.status.allocatable.memory,CPU_REQ:.status.allocatable.cpu,CPU_REQ_USED:.status.allocatable.cpu"

# Более полный вариант с использованием JSONPath
kubectl get nodes -o=jsonpath='{range .items[*]}{.metadata.name}{"t"}{.status.allocatable.cpu}{"t"}{.status.allocatable.memory}{"n"}{end}'

# Детальное описание узла, включая разделы Allocatable, Capacity и текущие Pod'ы
kubectl describe node <node-name>

Для получения суммарного количества доступных ресурсов во всем кластере (что полезно для планирования):

# Сумма allocatable CPU по всем узлам (требуется установленный jq)
kubectl get nodes -o json | jq '.items | map(.status.allocatable.cpu | rtrimstr("m") | tonumber) | add'

# Аналогично для памяти
kubectl get nodes -o json | jq '.items | map(.status.allocatable.memory | rtrimstr("Ki") | tonumber) | add'

Практический контекст:

  • Allocatable – это ресурсы узла, доступные для планирования Pod'ов (общие ресурсы минус резерв под системные демоны и kubelet).
  • Capacity – общие физические ресурсы узла.
  • Разницу между ними можно увидеть в выводе kubectl describe node. Мониторинг этих метрик (через Metrics Server и затем Prometheus) критически важен для предотвращения нехватки ресурсов в кластере.