Ответ
Кластер Kubernetes — это набор узлов (нод), объединённых в единую систему для оркестрации контейнеризированных приложений. Архитектура делится на две основные части: Control Plane (плоскость управления) и Worker Nodes (рабочие узлы).
1. Control Plane (Master-узлы): Управляет всем кластером. Обычно разворачивается на нескольких нодах для отказоустойчивости.
- kube-apiserver: Фронтенд плоскости управления. Все запросы на управление (kubectl, UI, другие компоненты) проходят через него. Он валидирует и обрабатывает запросы, сохраняя состояние в etcd.
- etcd: Высокодоступное key-value хранилище, в котором хранится вся конфигурация и состояние кластера.
- kube-scheduler: Отвечает за распределение подов (Pods) по рабочим узлам. Анализирует ресурсы узлов (CPU, память) и ограничения подов, выбирая оптимальный узел для запуска.
- kube-controller-manager: Запускает контроллеры — фоновые процессы, которые следят за состоянием кластера. Например:
- Node Controller: реагирует на недоступность узлов.
- Replication Controller: поддерживает заданное количество реплик подов.
- Endpoints Controller: наполняет объекты Endpoints (связывает Pods и Services).
2. Worker Nodes: Запускают рабочие нагрузки (поды).
- kubelet: Агент на каждом узле. Получает спецификации подов от API-сервера и обеспечивает, чтобы описанные в них контейнеры были запущены и работоспособны.
- kube-proxy: Сетевой прокси, реализующий концепцию Service. Поддерживает сетевые правила на узле, позволяющие сетевое взаимодействие с подами как внутри кластера, так и извне.
- Container Runtime: Программное обеспечение для запуска контейнеров (например, containerd, CRI-O). Kubelet взаимодействует с ним через CRI (Container Runtime Interface).
Пример простого манифеста для запуска пода:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:1.21
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
Дополнения (Addons): Для полноценной работы кластера добавляются системные компоненты: DNS-сервис (CoreDNS), сетевые плагины (Calico, Flannel), Ingress-контроллеры (nginx-ingress), Dashboard и другие.