Перейти к содержанию

Структура Kubernetes

Структура Kubernetes организована таким образом, чтобы обеспечивать управление и оркестрацию контейнеризированных приложений в кластере. Основные компоненты Kubernetes можно разделить на две группы: компоненты контрольного плана (Control Plane) и компоненты узлов (Nodes).

Компоненты контрольного плана (Control Plane)

Контрольный план отвечает за управление всем кластером. Он принимает глобальные решения о кластере и определяет, какие приложения должны выполняться на каких узлах. Основные компоненты:

  • API Server: Это главный компонент, который предоставляет интерфейс для взаимодействия с Kubernetes. Все запросы (например, создание, изменение, удаление объектов) отправляются через API Server. Он действует как фронтенд для контрольного плана.

  • Etcd: Распределённое хранилище ключ-значение, используемое для хранения всех данных о состоянии кластера. Etcd является критическим компонентом, так как в нём хранится конфигурация и текущее состояние всех объектов кластера.

  • Scheduler: Компонент, который отвечает за планирование подов на узлы. Scheduler анализирует доступные ресурсы на узлах и решает, на каком узле должен быть запущен каждый под.

  • Controller Manager: Контроллеры в Kubernetes следят за состоянием системы и автоматически приводят её в соответствие с желаемым состоянием, заданным в спецификациях. Controller Manager включает в себя различные контроллеры, такие как контроллеры реплик, контроллеры узлов, контроллеры оконечных точек и другие.

  • Cloud Controller Manager: Этот компонент позволяет интегрировать Kubernetes с облачными провайдерами, управляя специфичными для облака ресурсами, такими как узлы, сетевые ресурсы и т.д.

Компоненты узлов (Nodes)

Узлы (ранее известные как Minions) — это рабочие машины в кластере, которые запускают контейнеры. Каждый узел управляется контрольным планом и имеет свои компоненты:

  • Kubelet: Агент, работающий на каждом узле. Он отвечает за запуск контейнеров, получая инструкции от API Server. Kubelet также следит за состоянием подов и контейнеров на узле и отправляет отчёты в контрольный план.

  • Kube-proxy: Сетевой прокси, работающий на каждом узле. Он управляет сетевыми правилами для обеспечения сетевого взаимодействия между подами и службами (Service). Kube-proxy перенаправляет трафик к соответствующим подам, обеспечивая доступность служб.

  • Container Runtime: Это программное обеспечение, которое отвечает за запуск контейнеров. Kubernetes поддерживает различные контейнерные среды, такие как Docker, containerd, CRI-O и другие.

Вспомогательные компоненты

Кроме основных компонентов, в структуре Kubernetes могут присутствовать и другие, вспомогательные элементы:

  • Pod: Основная рабочая единица в Kubernetes, которая состоит из одного или нескольких контейнеров, объединённых в одну логическую группу. Поды управляются и масштабируются как единое целое.

  • ReplicaSet: Объект, который гарантирует, что в любое время в кластере существует определённое количество идентичных подов.

  • Deployment: Более высокий уровень абстракции для управления репликами подов. Deployment позволяет выполнять такие операции, как обновления или откаты приложений.

  • Service: Абстракция, которая обеспечивает доступ к набору подов. Она определяет, как внешний мир должен взаимодействовать с приложениями, работающими в кластере.

  • ConfigMap и Secret: Средства для управления конфигурацией приложений и хранения чувствительной информации (например, паролей, токенов), которую можно безопасно передавать в поды.

Архитектура кластера

Кластер Kubernetes обычно состоит из нескольких узлов и одного или нескольких контрольных планов. Все компоненты взаимодействуют друг с другом через API Server, обеспечивая управление и выполнение приложений.

Основные процессы в кластере включают планирование подов, мониторинг состояния узлов, автоматическое масштабирование приложений и управление сетевыми взаимодействиями.

Kubernetes является распределённой системой, что делает её устойчивой к сбоям и хорошо масштабируемой. За счёт этой структуры Kubernetes может эффективно управлять большими и сложными приложениями в контейнерах, распределёнными по множеству машин.