Ответ
Кластер Kubernetes — это набор машин (нод), объединённых для запуска контейнеризированных приложений. Его архитектура чётко разделена на две логические группы: Control Plane (управляющая плоскость) и Worker Nodes (рабочие ноды).
1. Control Plane (Мастер-ноды): Управляет кластером. В продакшне разворачивается на нескольких нодах для отказоустойчивости.
- kube-apiserver: Фронтенд кластера, обрабатывающий все REST-запросы (от
kubectl, дашбордов, CI/CD). - etcd: Высокодоступное key-value хранилище, где хранится вся конфигурация и состояние кластера.
- kube-scheduler: Назначает поды на ноды, учитывая ресурсы, политики размещения и ограничения.
- kube-controller-manager: Запускает контроллеры, которые следят за состоянием (например, чтобы количество запущенных подов соответствовало заданному в Deployment).
- cloud-controller-manager (опционально): Связывает кластер с API облачного провайдера для управления сетевыми балансировщиками, дисками и маршрутами.
2. Worker Nodes (Рабочие ноды): Запускают рабочие нагрузки приложений (поды).
- Kubelet: Агент, который общается с Control Plane и управляет жизненным циклом подов на своей ноде.
- Kube-proxy: Поддерживает сетевые правила, позволяющие сетевое взаимодействие с подами (реализация Service).
- Container Runtime: Программное обеспечение для запуска контейнеров (containerd, CRI-O).
3. Аддонсы (Add-ons): Компоненты, расширяющие функциональность кластера, часто разворачиваемые как поды или DaemonSets.
- Сеть (CNI): Плагин, обеспечивающий сетевое взаимодействие между подами (Calico, Flannel, Cilium). Без него поды не могут "видеть" друг друга.
- DNS (CoreDNS): Внутренний DNS-сервер кластера для разрешения имён сервисов (например,
my-service.default.svc.cluster.local). - Ingress Controller: (Nginx, Traefik) Управляет внешним доступом к сервисам по HTTP/HTTPS.
- Dashboard: Веб-интерфейс для управления.
- Мониторинг и логирование: Стек Prometheus/Grafana, Fluentd/Elasticsearch.
Пример развёртывания кластера с помощью kubeadm (сильно упрощённо):
# На первой машине (инициализация Control Plane)
kubeadm init --pod-network-cidr=10.244.0.0/16
# После инициализации настраиваем kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# Устанавливаем сетевой плагин (например, Flannel)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
# На worker-нодах выполняем команду join, полученную после init
kubeadm join <control-plane-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
Таким образом, кластер — это слаженная система, где Control Plane отдаёт команды, а Worker Nodes их исполняют, а аддонсы обеспечивают необходимую инфраструктуру.