В чем разница между Master node и Worker node в Kubernetes?

«В чем разница между Master node и Worker node в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Кластер Kubernetes архитектурно разделен на управляющую плоскость (Control Plane) и плоскость данных (Data Plane), которые выполняются на Master и Worker нодах соответственно.

Master Node (Управляющая нода) — это "мозг" кластера. На ней работают компоненты, управляющие состоянием всего кластера:

  1. kube-apiserver: Фронтенд Control Plane, единственный компонент, с которым взаимодействуют все (пользователи, CLI, другие компоненты).
  2. etcd: Высокодоступное key-value хранилище, в котором хранится вся конфигурация и состояние кластера.
  3. kube-scheduler: Отвечает за планирование — решает, на какой Worker Node запустить новый Pod.
  4. kube-controller-manager: Запускает контроллеры, которые следят за состоянием кластера (например, контроллер реплик поддерживает нужное количество копий Pod'ов).

Worker Node (Рабочая нода) — это "мускулы" кластера. На них выполняются рабочие нагрузки (приложения):

  1. kubelet: Агент на ноде, который получает инструкции от API-сервера и управляет жизненным циклом Pod'ов и контейнеров.
  2. kube-proxy: Сетевой прокси, который поддерживает правила сетевой маршрутизации и балансировки нагрузки для сервисов (Service).
  3. Container Runtime: Программное обеспечение для запуска контейнеров (например, containerd или CRI-O).

Ключевые отличия:

  • Роль: Master управляет, Worker — выполняет.
  • Ресурсы: Master ноды требуют меньше CPU/RAM, но критически важны для доступности. Worker ноды потребляют основную часть ресурсов кластера.
  • Запуск Pod'ов: По умолчанию пользовательские Pod'ы не планируются на Master ноды. Это обеспечивается taint (загрязнением):
    # На Master ноде по умолчанию установлен taint
    kubectl describe node master-node | grep Taints
    # Taints:             node-role.kubernetes.io/master:NoSchedule

    Это гарантирует, что системные Pod'ы Control Plane (например, kube-proxy) могут работать на Master, а пользовательские — нет, если явно не указана toleration.