Из каких программных уровней состоит Kubernetes?

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

Ответ

Архитектура Kubernetes делится на два основных уровня: Плоскость управления (Control Plane) и Рабочие узлы (Worker Nodes). Каждый уровень состоит из нескольких компонентов, взаимодействующих через API.

1. Плоскость управления (Control Plane / Master)

Управляет состоянием кластера. В продакшене часто работает в режиме высокой доступности (HA).

  • kube-apiserver: Фронтенд плоскости управления. Единственный компонент, с которым взаимодействуют все остальные (kubectl, контроллеры, узлы). Валидирует и обрабатывает REST-запросы.
  • etcd: Распределённое key-value хранилище, выступающее как "единый источник правды" для данных кластера (конфиги, желаемое состояние, секреты).
  • kube-scheduler: Отслеживает создание Pod'ов без назначенного узла и выбирает для них узел на основе политик (ресурсы, affinity/anti-affinity правила).
  • kube-controller-manager: Запускает контроллеры — фоновые циклы, которые приводят текущее состояние кластера к желаемому.
    • Node Controller: реагирует на недоступность узлов.
    • Deployment Controller: управляет жизненным циклом ReplicaSet'ов.
    • Endpoints Controller: наполняет объекты Endpoints (пары IP:порт).
  • cloud-controller-manager (опционально): Связка с API облачного провайдера для управления нодами, балансировщиками, томами.

2. Рабочие узлы (Worker Nodes)

Запускают рабочие нагрузки (приложения).

  • kubelet: Агент на каждом узле. Получает спецификации Pod'ов (PodSpecs) от API-сервера и обеспечивает, чтобы описанные в них контейнеры были запущены и здоровы.
  • kube-proxy: Сетевой прокси, реализующий концепцию Service. Поддерживает правила сетевой трансляции (например, через iptables или IPVS) для маршрутизации трафика к Pod'ам.
  • Container Runtime: Программное обеспечение для запуска контейнеров (например, containerd, CRI-O). Kubelet взаимодействует с ним через интерфейс CRI (Container Runtime Interface).

3. Аддоны (Add-ons)

Дополнительные сервисы, расширяющие функциональность.

  • DNS (CoreDNS): Обеспечивает разрешение имён для Service'ов и Pod'ов внутри кластера.
  • Ingress Controller (например, nginx-ingress): Управляет внешним HTTP/HTTPS доступом к Service'ам.
  • CNI Plugin (например, Calico, Cilium): Обеспечивает сетевое взаимодействие между Pod'ами на разных узлах.

Пример: Инициализация кластера с помощью kubeadm создаёт все компоненты Control Plane в виде статических Pod'ов, размещённых на том же узле.

kubeadm init --pod-network-cidr=10.244.0.0/16