
Какие основные компоненты входят в архитектуру Kubernetes и за что отвечает каждый из них?
Кластер Kubernetes состоит из control plane (управляющего слоя) и набора рабочих машин — узлов (nodes), на которых запускаются Pod'ы. Для запуска Pod'ов нужен минимум один worker-узел.
Концептуально Kubernetes декларативен: вы описываете желаемое состояние через API server (оно хранится в etcd), а контроллеры в непрерывных циклах согласования (reconciliation loops) следят за расхождениями и приводят фактическое состояние к желаемому.
Компоненты control plane
Управляющий слой принимает глобальные решения о кластере (например, планирование) и реагирует на события. В продакшене его обычно разворачивают на нескольких машинах для отказоустойчивости.
- kube-apiserver — ядро, предоставляющее HTTP API Kubernetes. Это «фронтенд» control plane и единая точка входа: через него идёт вся аутентификация, авторизация, валидация запросов и чтение/запись состояния. Масштабируется горизонтально. В обычных развёртываниях это единственный Kubernetes-компонент, который напрямую читает и пишет состояние кластера в etcd; остальные компоненты работают с состоянием через API server.
- etcd — согласованное (strongly consistent) и высокодоступное key-value хранилище, используемое как backing store для всех данных кластера: конфигурации, состояния и метаданных. etcd обязателен и является единственным источником истины — его потеря означает потерю всего состояния кластера, поэтому его запускают с кворумом (нечётное число членов) и регулярно резервируют.
- kube-scheduler — находит Pod'ы, ещё не привязанные к узлу, и назначает каждый из них на подходящий узел с учётом ресурсов, ограничений и политик.
- kube-controller-manager — запускает контроллеры, реализующие поведение API (Node controller, Job controller, EndpointSlice controller и др.). Контроллеры следят за желаемым состоянием и приводят к нему фактическое.
- cloud-controller-manager (опционально) — интегрирует кластер с конкретным облачным провайдером, вынося облачную логику отдельно от ядра Kubernetes.
Компоненты узла (node components)
Запускаются на каждом узле, поддерживают работу Pod'ов и обеспечивают среду выполнения.
- kubelet — агент, гарантирующий, что Pod'ы и их контейнеры запущены и работают согласно спецификации; следит за API server, запускает контейнеры через runtime, монтирует тома, выполняет liveness/readiness-проверки и репортит статус узла.
- kube-proxy — реализует сетевое взаимодействие Services, программируя правила iptables или IPVS на узлах, чтобы трафик к Service шёл на нужные Pod'ы. Помечен как опциональный, потому что некоторые CNI-плагины (например, Cilium в режиме eBPF) берут его функции на себя, но в стандартном кластере он необходим.
- Container runtime — ПО, отвечающее за запуск контейнеров (containerd, CRI-O и др., через интерфейс CRI).
Addons
Дополнительно функциональность расширяют аддоны: cluster DNS (по умолчанию CoreDNS), Dashboard, мониторинг ресурсов, централизованное логирование.
Частый вопрос на собеседовании: всё взаимодействие идёт через API server — scheduler, контроллеры и kubelet'ы только наблюдают за ним и реагируют, что делает API server критической точкой кластера.