← Назад к вопросам

Из чего состоит архитектура Kubernetes

1.3 Junior🔥 171 комментариев
#Kubernetes

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Архитектура Kubernetes: Компоненты и их взаимодействие

Архитектура Kubernetes (K8s) спроектирована как отказоустойчивая, модульная и расширяемая система управления контейнеризированными приложениями. Она построена по принципу "master-worker" (control plane - data plane), где главные узлы (control plane) управляют рабочими узлами (worker nodes), на которых непосредственно выполняются рабочие нагрузки. Давайте разберем составные части подробно.

Control Plane (Главный узел / Узел управления)

Control Plane — это мозг кластера, отвечающий за глобальные решения (например, планирование) и обнаружение/реагирование на события кластера. Его компоненты могут работать на одном или распределяться по нескольким master-узлам для обеспечения высокой доступности.

  • kube-apiserver: Фронтенд Control Plane. Это REST API, через который взаимодействуют все компоненты (внутренние и внешние, например, kubectl). Он валидирует и конфигурирует данные для объектов API (поды, сервисы и т.д.). Масштабируется горизонтально.
  • etcd: Высокодоступное распределенное key-value хранилище, используемое как единственный источник истины для всего кластера. В нем хранится вся конфигурация и состояние кластера (желаемое и текущее). Для обеспечения отказоустойчивости требует отдельной стратегии резервного копирования.
  • kube-scheduler: Отвечает за распределение подов (Pods) по узлам. Следит за вновь созданными подами, у которых нет назначенного узла, и выбирает для них оптимальный узел на основе политик, требований к ресурсам, ограничений (affinity/anti-affinity) и т.д.
  • kube-controller-manager: Запускает контроллеры — фоновые процессы, которые управляют состоянием кластера, приводя его к желаемой конфигурации.
    *   **Node Controller**: Отвечает за обнаружение и реакцию на недоступность узлов.
    *   **Replication Controller**: Поддерживает корректное количество подов для каждого объекта ReplicationController.
    *   **Endpoints Controller**: Заполняет объекты Endpoints (связывает сервисы и поды).
    *   **Service Account & Token Controllers**: Создают стандартные учетные записи и API access tokens для новых пространств имен.
  • cloud-controller-manager (опционально, для облачных провайдеров): Связывает кластер с API облачного провайдера. Управляет облачно-специфичными компонентами, такими как балансировщики нагрузки (Load Balancers) или диски (Volumes). Позволяет отделить код, зависящий от облака, от основного кода Kubernetes.

Worker Node (Рабочий узел)

Worker Node — машина (виртуальная или физическая), на которой запускаются контейнеры приложений. Каждый узел управляется Control Plane и содержит компоненты для запуска подов.

  • kubelet: Агент, работающий на каждом узле. Он обеспечивает, чтобы контейнеры в подах были запущены и здоровы. Kubelet получает спецификации подов (через API-сервер или напрямую) и следит за их выполнением. Не управляет контейнерами, которые не были созданы Kubernetes.
  • kube-proxy: Сетевой прокси и балансировщик нагрузки, работающий на каждом узле. Он реализует концепцию Service — стабильной сетевой конечной точки для доступа к группе динамически меняющихся подов. Kube-proxy поддерживает сетевые правила на узле, которые позволяют сетевым сессиям достигать подов.
  • Container Runtime: Программное обеспечение, отвечающее за запуск контейнеров (например, containerd, CRI-O, Docker Engine). Kubernetes использует интерфейс Container Runtime Interface (CRI) для взаимодействия с различными рантаймами.

Аддонсы (Addons)

Аддонсы — это компоненты, расширяющие функциональность кластера, но не являющиеся его строго обязательной частью. Обычно они работают в пространстве имен kube-system.

  • DNS: Кластерный DNS-сервер (например, CoreDNS) автоматически назначает DNS-имена сервисам и подам.
  • Web UI (Dashboard): Веб-интерфейс для управления и мониторинга кластера.
  • Container Resource Monitoring (например, Prometheus + Grafana): Сбор, хранение и визуализация метрик.
  • Cluster-level Logging (например, EFK-стек): Сохранение логов контейнеров в центральном хранилище.
  • Network Plugins (CNI): Реализуют модель сети кластера, обеспечивая связность подов между узлами (например, Calico, Cilium, Flannel).

Пример взаимодействия: Запуск пода

# Пользователь отправляет команду через kubectl
kubectl run nginx --image=nginx --port=80
  1. kubectl отправляет запрос на создание объекта Pod в kube-apiserver.
  2. kube-apiserver аутентифицирует и валидирует запрос, затем сохраняет новый объект Pod в etcd.
  3. kube-scheduler, наблюдая через apiserver за новыми "незапланированными" подами, выбирает подходящий Worker Node на основе своих политик.
  4. kube-scheduler сообщает о решении обратно в kube-apiserver, который обновляет объект Pod в etcd, назначая ему узел.
  5. kubelet на выбранном Worker Node, также наблюдая за изменениями через apiserver, видит, что ему назначен новый Pod.
  6. kubelet инструктирует Container Runtime (например, containerd) скачать образ nginx и запустить контейнер.
  7. kubelet непрерывно сообщает о статусе пода обратно в kube-apiserver, который обновляет данные в etcd.
  8. kube-proxy на узле (и других узлах) при необходимости обновляет сетевые правила, чтобы новый Pod мог участвовать в сервисах.

Итог: Архитектура Kubernetes — это хорошо продуманная, слабо связанная совокупность компонентов, каждый из которых выполняет свою единственную ответственность. Благодаря такому модульному дизайну, отказ одного компонента не всегда ведет к полному падению кластера, а сама система обладает огромной гибкостью и расширяемостью через API, контроллеры и CNI/CSI/CRI интерфейсы.

Из чего состоит архитектура Kubernetes | PrepBro