Ответ
Архитектура 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