1. Архитектура Kubernetes и глубокий разбор компонентов Control Plane
Архитектура Kubernetes и глубокий разбор компонентов Control Plane
Парадокс Kubernetes заключается в том, что сам оркестратор не запускает ни одного контейнера и не маршрутизирует ни одного байта пользовательского трафика. По своей сути Kubernetes — это гигантская, распределенная машина состояний. Вы просто описываете желаемое состояние системы (Desired State), а компоненты кластера бесконечно сверяют его с текущим состоянием (Actual State) и пытаются устранить разницу.
Для успешной сдачи CKA и прохождения технических интервью недостаточно знать, как создать Pod. Вы должны понимать, кто именно в кластере принимает решение о его создании, где хранится информация об этом и как компоненты общаются между собой.
Две половины мозга: Control Plane и Worker Nodes
Архитектуру Kubernetes можно разделить на две фундаментальные части.
!Логическая архитектура Kubernetes
Чтобы кластер работал как единый механизм, компоненты должны иметь строгую специализацию. Давайте разберем Control Plane под микроскопом.
Анатомия Control Plane
В классическом кластере (созданном через kubeadm) компоненты Control Plane запускаются в виде статических подов (Static Pods) в пространстве имен kube-system.
> CKA Cheat: Манифесты статических подов Control Plane по умолчанию лежат в директории /etc/kubernetes/manifests/. Если вы измените YAML-файл в этой папке, kubelet автоматически перезапустит соответствующий компонент. Это ключевой навык для траблшутинга на экзамене.
1. kube-apiserver (Центральный коммутатор)
kube-apiserver — это единственный компонент кластера, с которым взаимодействуете вы (через kubectl) и все остальные компоненты системы.
Ключевые особенности:
etcd.2. etcd (Абсолютная память)
etcd — это высокодоступное распределенное хранилище пар «ключ-значение» (key-value store). Это единственный stateful-компонент в Control Plane.
Если kube-apiserver — это коммутатор, то etcd — это единственный источник истины (Single Source of Truth). В нем хранятся все конфигурации, секреты и состояния объектов.
Что нужно помнить для CKA:
etcd использует алгоритм консенсуса Raft. Для обеспечения отказоустойчивости кластер etcd должен состоять из нечетного количества узлов (обычно 3 или 5).etcd потеряны, кластер Kubernetes фактически перестает существовать, даже если контейнеры все еще работают на узлах.etcd с использованием утилиты etcdctl.3. kube-scheduler (Распределитель ресурсов)
Многие думают, что scheduler запускает поды на узлах. Это ошибка, на которой часто ловят на интервью.
kube-scheduler ничего не запускает. Его единственная задача — заметить новый Pod без назначенного узла (nodeName пустое), проанализировать доступные ресурсы кластера и выбрать оптимальный узел для этого пода.
Процесс принятия решения состоит из двух этапов:
После выбора узла scheduler просто отправляет запрос в kube-apiserver с сообщением: "Привяжи Pod X к Узлу Y".
4. kube-controller-manager (Неутомимый надзиратель)
Это набор фоновых процессов (контроллеров), которые непрерывно следят за состоянием кластера через kube-apiserver. Их задача — приводить Actual State к Desired State.
Внутри kube-controller-manager работают десятки контроллеров. Вот основные:
Сводная таблица компонентов
| Компонент | Роль в кластере | Порт по умолчанию | Состояние | |---|---|---|---| | kube-apiserver | Интерфейс взаимодействия и валидации | 6443 | Stateless | | etcd | База данных, источник истины | 2379, 2380 | Stateful | | kube-scheduler | Выбор узла для запуска Pod | 10259 | Stateless | | kube-controller-manager | Поддержание желаемого состояния | 10257 | Stateless |
Коротко о Worker Nodes
Хотя фокус этой статьи — Control Plane, для понимания общей картины необходимо упомянуть агентов, работающих на рабочих узлах:
kube-apiserver спецификации подов (PodSpecs) и приказывает Container Runtime запустить или остановить контейнеры. Также он постоянно рапортует API-серверу о состоянии узла.iptables или IPVS), чтобы сетевой трафик правильно доходил до подов.Жизненный цикл создания Pod: Как они общаются?
Понимание того, как компоненты взаимодействуют между собой — это ключ к успешному траблшутингу. Рассмотрим классический сценарий: вы выполняете команду kubectl apply -f pod.yaml.
!Пошаговое создание Pod в Kubernetes
Вот текстовая расшифровка этого процесса (идеальный ответ на техническом интервью):
Pending (узел еще не назначен).kubectl, что Pod успешно создан в базе.Binding обратно в kube-apiserver.Running обратно в kube-apiserver, который финально обновляет данные в etcd.В этой цепочке никто не общается друг с другом напрямую. Все коммуникации происходят исключительно через подписки (watches) на изменения в kube-apiserver.
Понимание этой архитектуры позволит вам на экзамене CKA быстро локализовать проблему. Если Pod висит в статусе Pending, проблема, скорее всего, в scheduler или нехватке ресурсов. Если Pod создается, но контейнер не стартует (статус ContainerCreating или CrashLoopBackOff), проблема на стороне kubelet или Container Runtime на конкретном узле.