К содержимому
Журнал QIO

Технологии3 мин чтения

Kubernetes простыми словами: зачем он нужен и как устроен кластер

Kubernetes управляет контейнерами на многих машинах сразу: вы описываете желаемое состояние приложения, а кластер сам поддерживает его. Разбираем, из каких частей состоит кластер, что делают API Server, etcd, Scheduler и kubelet и что происходит после команды kubectl.

Kubernetes простыми словами: зачем он нужен и как устроен кластер

Проблема, которую решает Kubernetes

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

Ключевая идея — желаемое состояние. Вместо последовательности команд «запусти здесь, потом там» вы описываете результат: три копии сервиса с такой-то версией образа. Кластер постоянно сравнивает фактическое состояние с желаемым и устраняет разницу. Этот цикл называется reconciliation loop.

Несколько копий бэкенда за одной точкой входа для пользователей
Несколько копий бэкенда за одной точкой входа для пользователей

Самая частая ошибка, которую мы видим у клиентов: кластер завели ради «правильной архитектуры», а поддерживать его некому. Для сайта на CMS хватает одного сервера с бэкапами, а Kubernetes стоит начинать, когда есть кому дежурить.

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

Кластер делится на управляющую часть, control plane, и рабочие узлы, worker nodes. Узел, или node, — это физический сервер, виртуальная машина или облачный инстанс. Минимальная единица развёртывания — pod: обёртка вокруг одного, реже нескольких контейнеров, которые делят сеть и диск.

  • API Server — единственная точка входа: через него проходят все команды и запросы.
  • etcd — распределённое хранилище, где лежит состояние кластера.
  • Scheduler — выбирает узел для каждого нового pod по ресурсам и правилам.
  • Controllers — следят за расхождениями между желаемым и фактическим состоянием и запускают исправления.
  • kubelet — агент на каждом узле, который запускает и контролирует pod.
  • Container runtime, например containerd, — запускает сами контейнеры.
Узлом кластера может быть физический сервер, виртуальная машина или облачный инстанс
Узлом кластера может быть физический сервер, виртуальная машина или облачный инстанс
Управляющие узлы (Control Plane) и рабочие узлы (Worker Nodes)
Управляющие узлы (Control Plane) и рабочие узлы (Worker Nodes)
Структура кластера: Control Plane, рабочие узлы, pod и контейнеры внутри
Структура кластера: Control Plane, рабочие узлы, pod и контейнеры внутри
Компоненты Control Plane: API Server, etcd, Scheduler, Controller Manager
Компоненты Control Plane: API Server, etcd, Scheduler, Controller Manager

Что происходит после kubectl apply

Последовательность из пяти шагов повторяется при каждом изменении. Понимание этой цепочки помогает читать логи и понимать, где застряло развёртывание.

  • Вы отправляете манифест через kubectl в API Server.
  • API Server сохраняет желаемое состояние в etcd.
  • Контроллеры замечают, что нужных pod ещё нет, и создают их объекты.
  • Scheduler назначает каждому pod конкретный узел.
  • kubelet на этом узле запускает контейнеры через container runtime и докладывает о статусе.
etcd хранит желаемое состояние: узлы, deployments, pods, services, конфигурацию
etcd хранит желаемое состояние: узлы, deployments, pods, services, конфигурацию
Scheduler выбирает узел, kubelet контролирует pod, container runtime запускает контейнеры
Scheduler выбирает узел, kubelet контролирует pod, container runtime запускает контейнеры
Путь команды kubectl: API Server, etcd, Scheduler, Controllers и рабочие узлы
Путь команды kubectl: API Server, etcd, Scheduler, Controllers и рабочие узлы

Когда Kubernetes нужен, а когда нет

Kubernetes оправдан, когда сервисов много, нагрузка меняется и простой стоит дорого: интернет-магазин с пиками, продукт с несколькими командами, SaaS с обновлениями несколько раз в день. Для корпоративного сайта, лендинга или небольшого магазина на 1С-Битрикс кластер избыточен: один сервер с резервными копиями и мониторингом дешевле в поддержке и понятнее подрядчикам.

Если сомневаетесь, посчитайте не стоимость запуска, а стоимость владения: кому в команде поддерживать кластер, кто дежурит ночью и сколько времени уйдёт на обучение.

Итог

Kubernetes — это система, которая держит приложение в описанном вами состоянии на группе машин. Control plane принимает решения, узлы исполняют, etcd помнит. Для большинства сайтов малого бизнеса он не нужен, для продуктов с постоянными релизами и переменной нагрузкой — стандарт.

Источники

  1. Документация Kubernetes: компоненты кластера
  2. Kubernetes просто, часть 1 (Хабр)
  3. etcd: документация
  • Kubernetes
  • Контейнер
  • etcd
  • containerd
  • kubectl

Подписаться на журнал

Новые разборы о сайтах, SEO и ИИ выходят в журнале QIO. Подпишитесь в Google, по RSS или в Telegram, чтобы получать их первыми.

Читайте также

Чем можем помочь?
Обсудить проект