Из чего состоит кластер Kubernetes?

«Из чего состоит кластер Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Кластер 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 их исполняют, а аддонсы обеспечивают необходимую инфраструктуру.