Что такое Node API в Kubernetes?

«Что такое Node API в Kubernetes?» — вопрос из категории Kubernetes, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kubernetes Node API — это не отдельный API, а часть основного Kubernetes API (предоставляемого kube-apiserver), которая представляет ресурс типа Node. Этот ресурс содержит информацию о каждом рабочем узле (ноде) в кластере.

Назначение:

  • Для администратора/оператора: Получение состояния и характеристик узлов (здоровье, ресурсы, метки).
  • Для компонентов Kubernetes:
    • kubelet на каждой ноде регистрирует её и периодически обновляет статус.
    • kube-scheduler использует информацию о нодах (ресурсы, метки) для принятия решений о размещении подов.

Что содержится в ресурсе Node (основные поля):

  • Метаданные: name, labels, annotations.
  • Спецификация (spec): Может содержать, например, podCIDR (диапазон IP для подов на этой ноде).
  • Статус (status): Самая важная часть:
    • conditions: Состояния ноды (Ready, MemoryPressure, DiskPressure, PIDPressure, NetworkUnavailable).
    • capacity & allocatable: Общие и доступные для планирования ресурсы (CPU, память, ephemeral-storage, количество подов).
    • addresses: IP-адреса ноды (InternalIP, ExternalIP, Hostname).
    • nodeInfo: Информация о системе (kernelVersion, osImage, containerRuntimeVersion, kubeletVersion).

Как взаимодействовать с Node API:

# Через kubectl (основной способ)
# Получить список всех нод
kubectl get nodes

# Получить детальную информацию о конкретной ноде в YAML
kubectl get node <node-name> -o yaml

# Получить информацию в широком формате (добавляет IP и роли)
kubectl get nodes -o wide

# Посмотреть условия (Conditions) нод
kubectl describe node <node-name>

# Пометить ноду меткой (используется для селекторов)
kubectl label nodes <node-name> disktype=ssd

# Запланировать drain (удранивание) ноды для обслуживания
kubectl drain <node-name> --ignore-daemonsets

# Через прямой HTTP-запрос к API-серверу
kubectl get --raw /api/v1/nodes | jq .  # Требует jq для красивого вывода

Практическое применение в DevOps:

  1. Мониторинг: Интеграция с системами мониторинга (Prometheus) через метрики kubelet или чтение статуса нод.
  2. Автоматическое масштабирование: Cloud Controller Manager использует условия нод для принятия решений в облачных провайдерах.
  3. Отладка: Если под не планируется на ноду, проверка условий (NotReady, MemoryPressure) — первое действие.
  4. Управление кластером: Использование меток и тайнтов (taints) для управления размещением рабочих нагрузок на определённых типах нод (например, GPU-инстансы, инстансы с локальными SSD).