Ответ
Архитектура Kubernetes делится на две основные части: Control Plane (мастер-ноды) и Worker Nodes (рабочие ноды).
Control Plane (Управляющая плоскость):
- kube-apiserver — фронтенд кластера. Все запросы на управление (от
kubectl, dashboard, других компонентов) проходят через него. - etcd — распределённое key-value хранилище, где хранится вся конфигурация и состояние кластера. Это единственный stateful компонент Control Plane.
- kube-scheduler — отслеживает созданные Pod'ы, у которых не назначена нода, и выбирает для них подходящую ноду на основе политик (ресурсы, affinity/anti-affinity правила).
- kube-controller-manager — запускает контроллеры, которые следят за состоянием кластера. Например, Node Controller реагирует на падение нод, а Replication Controller поддерживает нужное количество реплик Pod'ов.
Worker Nodes (Рабочие ноды):
- kubelet — агент, который работает на каждой ноде. Он получает спецификации Pod'ов от API-сервера и обеспечивает, чтобы описанные в них контейнеры были запущены и здоровы.
- kube-proxy — поддерживает сетевые правила на ноде, обеспечивая сетевое взаимодействие между Pod'ами и доступ к ним извне (через Service).
- Container Runtime (например, containerd или CRI-O) — ПО, которое непосредственно запускает контейнеры.
Ключевые абстракции для работы с приложениями:
- Pod — наименьшая и простейшая единица в Kubernetes, «обёртка» для одного или нескольких контейнеров.
- Service — абстракция, которая определяет логический набор Pod'ов и политику доступа к ним (часто через стабильный DNS-имя и IP).
- Ingress — управляет внешним HTTP/HTTPS доступом к Service'ам внутри кластера, обеспечивая маршрутизацию, SSL-терминацию.
Пример простого Pod:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:1.21
ports:
- containerPort: 80