Kube cluster architecture
Kubernetes-кластер состоит из Control Plane (плоскости управления) и Worker Nodes (узлов-исполнителей). Эти компоненты работают вместе для управления развертыванием контейнеров, балансировки нагрузки, автоматического масштабирования и самовосстановления системы.
- Control Plane управляет кластером.
- Worker Nodes выполняют контейнеры.
- API Server — основное звено взаимодействия.
- etcd хранит состояние системы.
- Scheduler и Controllers поддерживают работоспособность.
- Kubelet запускает контейнеры на нодах.
- Kube Proxy обеспечивает сетевое взаимодействие.
1. Control Plane (Плоскость управления)
Control Plane отвечает за управление кластером, распределение нагрузки и слежение за состоянием приложений. Он включает несколько ключевых компонентов:
1.1 API Server (kube-apiserver)
- Сердце Kubernetes-кластера — принимает REST-запросы и управляет всей системой через API.
- Взаимодействует с etcd для хранения конфигурации и состояния кластера.
- Аутентифицирует и авторизует запросы.
1.2 Хранилище состояний (etcd)
- Распределённая key-value база данных, в которой хранятся все объекты кластера (Pods, Deployments, Services и т.д.).
- Должна быть отказоустойчивой и резервируемой.
1.3 Планировщик (kube-scheduler)
- Отвечает за размещение новых подов на нодах, выбирая наиболее подходящий узел.
- Учитывает:
- Загрузку ресурсов (CPU, RAM)
- Политики размещения (affinity, taints и tolerations)
- Привилегии и приоритеты
1.4 Контроллеры (kube-controller-manager)
- Запускает контроллеры, которые следят за состоянием кластера и приводят его в соответствие с заданной конфигурацией.
- Основные контроллеры:
- Node Controller – отслеживает доступность нод
- Replication Controller – управляет количеством подов
- Service Account & Token Controllers – создают сервисные аккаунты и API-токены
1.5 Контроллер входящего трафика (kube-proxy на Control Plane)
- Управляет сетевыми правилами, позволяя подам взаимодействовать друг с другом
- Использует iptables или IPVS для маршрутизации запросов
2. Worker Nodes (Рабочие узлы)
Worker Nodes — это физические или виртуальные машины, на которых запускаются контейнеры. Каждый узел содержит три ключевых компонента:
2.1 Kubelet
- Агент, работающий на каждой ноде
- Управляет подами на узле, взаимодействует с API Server
- Гарантирует, что контейнеры работают по заданной конфигурации
2.2 Kube Proxy
- Управляет сетевым трафиком между сервисами внутри кластера
- Настраивает маршрутизацию и балансировку нагрузки
2.3 Контейнерный рантайм
- Отвечает за запуск контейнеров
- Поддерживает Docker, containerd, CRI-O и другие runtime
3. Дополнительные Компоненты
3.1 Поддержка сети
- Kubernetes не включает сетевую реализацию, поэтому используются CNI-плагины:
- Flannel – простая реализация overlay-сети
- Calico – поддерживает сетевые политики
- Cilium – использует eBPF для эффективного сетевого взаимодействия
3.2 Ingress Controller
- Позволяет управлять внешним доступом к сервисам через HTTP/HTTPS
- Реализуется через NGINX Ingress Controller, Traefik, HAProxy и т. д.
3.3 CSI (Container Storage Interface)
- Управляет динамическими и статическими томами хранения (например, PersistentVolume)
- Поддерживает Longhorn, Rook, OpenEBS, Ceph, AWS EBS, GCP PD
4. Взаимодействие компонентов
- Пользователь отправляет запрос в API Server (например, создать новый Pod)
- API Server валидирует запрос, записывает его в etcd и передает Scheduler
- Scheduler выбирает подходящий Worker Node для развертывания
- Kubelet на Worker Node получает команду, скачивает контейнеры через container runtime и запускает Pod
- Kube Proxy настраивает маршрутизацию трафика
- Контроллеры следят за состоянием объектов и исправляют отклонения
5. Графическое представление
+----------------------------------------------------+
| Control Plane |
| +----------------+ +-------------------------+ |
| | API Server |--| etcd (State Storage) | |
| +----------------+ +-------------------------+ |
| +------------------------------------------------+
| | Scheduler | | Controller Manager |
| +------------------------------------------------+
+----------------------------------------------------+
↕ API Calls
+----------------------------------------------------+
| Worker Node 1 |
| +----------------+ +-------------------------+ |
| | Kubelet | | Kube Proxy | |
| +----------------+ +-------------------------+ |
| +------------------------------------------------+
| | Container Runtime (Docker/containerd) |
| +------------------------------------------------+
| | Running Pods (Containers) |
| +------------------------------------------------+
+----------------------------------------------------+
↕ Network Traffic
+----------------------------------------------------+
| Worker Node 2 |
| ... аналогичная структура ... |
+----------------------------------------------------+