Ответ
Kubernetes — это распределенная система оркестрации контейнеров, состоящая из двух основных групп компонентов: Control Plane (Плоскость управления) и Worker Nodes (Рабочие узлы).
Control Plane (Мастер-узел/ы)
Управляет всем кластером. Компоненты могут работать на одном или распределенных узлах.
-
kube-apiserver:
- Фронтенд Control Plane. Единственный компонент, с которым взаимодействуют все остальные (CLI, UI, узлы).
- Предоставляет REST API для управления кластером (создание, обновление, удаление ресурсов).
-
etcd:
- Распределенное key-value хранилище. Сохраняет всю конфигурацию и состояние кластера (желаемое и текущее).
- Единственный компонент с состоянием (stateful) в Control Plane.
-
kube-scheduler:
- Отвечает за распределение подов (Pods) по рабочим узлам.
- Учитывает требования ресурсов (CPU/RAM), политики affinity/anti-affinity, ограничения и т.д.
-
kube-controller-manager:
- Запускает контроллеры — фоновые циклы, которые следят за состоянием кластера и приводят его к желаемому.
- Примеры контроллеров: Node Controller, Replication Controller, Endpoints Controller, Service Account Controller.
Worker Nodes (Рабочие узлы)
Запускают рабочие нагрузки (контейнеры).
-
kubelet:
- Агент на каждом узле. Отвечает за запуск, остановку и поддержание состояния подов в соответствии с PodSpec, полученными от API-сервера.
- Сообщает о состоянии узла и подов обратно в Control Plane.
-
kube-proxy:
- Сетевой прокси на каждом узле. Реализует концепцию Service (сервиса).
- Поддерживает сетевые правила, которые обеспечивают коммуникацию с подами как внутри узла, так и снаружи.
-
Container Runtime:
- Программное обеспечение, которое непосредственно запускает контейнеры (например, containerd, CRI-O, Docker Engine).
- Kubernetes взаимодействует с ним через Container Runtime Interface (CRI).
Основные абстракции (Ресурсы)
- Pod: Наименьшая и простейшая единица развертывания. Группа из одного или нескольких контейнеров с общими сетевыми и storage-ресурсами.
- Service: Абстракция, определяющая логический набор подов и политику доступа к ним (стабильный IP/DNS имя).
- Ingress: Управляет внешним HTTP/HTTPS доступом к сервисам внутри кластера (роутинг, SSL).
Пример минимального манифеста Pod:
apiVersion: v1
kind: Pod
metadata:
name: nginx-example
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80