Зачем нужен Kubernetes

Когда контейнеров становится много, кто-то должен ими управлять — этим и занимается Kubernetes.

Kubernetes (K8s) — система оркестрации контейнеров: она сама запускает, масштабирует, обновляет и восстанавливает контейнеризованные приложения на кластере серверов.

Вы уже умеете запускать контейнер через docker run. На одном ноутбуке этого достаточно. Но в продакшене всё иначе: приложение должно работать на нескольких серверах, переживать падение машины, выдерживать всплески нагрузки и обновляться без простоя. Делать это вручную через десятки команд docker невозможно.

Какую проблему решает оркестратор

Представьте 20 серверов и 200 контейнеров. Возникают вопросы, на которые Docker сам по себе не отвечает:

  • Размещение. На каком из 20 серверов запустить новый контейнер, чтобы хватило памяти и CPU?
  • Самовосстановление. Контейнер упал ночью — кто заметит и перезапустит его?
  • Масштабирование. Пришёл трафик — как быстро поднять ещё 10 копий, а потом убрать их?
  • Обновления. Как выкатить новую версию без простоя и откатиться, если что-то сломалось?
  • Сеть. Как контейнеры на разных серверах находят друг друга по имени?

Kubernetes берёт все эти заботы на себя. Вы описываете желаемое состояние («хочу 3 копии приложения»), а кластер сам приводит реальность к этому состоянию и удерживает её.

Самовосстановление — ключевая идея

Это главное, ради чего стоит изучать Kubernetes. Кластер постоянно сравнивает желаемое состояние с фактическим и устраняет расхождение. Упал контейнер — поднимется новый. Вышел из строя сервер — его нагрузка переедет на живые узлы. Кто-то случайно удалил копию приложения — она вернётся через секунды.

Цикл управления (reconciliation loop): «сделать так, чтобы фактическое состояние совпало с желаемым» — это работает непрерывно, а не один раз при запуске.

Когда Kubernetes не нужен

Это не «серебряная пуля». Для одного маленького сервиса на одном сервере Kubernetes — избыточная сложность: проще docker compose. Оркестратор оправдан, когда у вас несколько сервисов, требования к отказоустойчивости и команда, готовая разбираться с кластером.

ЗадачаDocker самKubernetes
Запустить один контейнерДаИзбыточно
Десятки контейнеров на многих серверахТяжело вручнуюШтатно
Авто-перезапуск при паденииЧастично (restart policy)Да, по всему кластеру
Масштабирование под нагрузкуВручнуюАвто (HPA)

Итог

  • Kubernetes — оркестратор контейнеров для множества серверов.
  • Вы описываете желаемое состояние, кластер сам его поддерживает.
  • Главные возможности: размещение, самовосстановление, масштабирование, обновления без простоя.
Проверьте себя
1. Какую главную проблему решает Kubernetes?
AСборку образов из Dockerfile
BОркестрацию множества контейнеров на кластере серверов
CХранение исходного кода
DНаписание тестов приложения
2. Что такое «желаемое состояние» в Kubernetes?
AСписок логов контейнеров
BОписание того, как кластер должен выглядеть, к которому он сам себя приводит
CТекущая загрузка процессора
DИстория команд kubectl
3. В какой ситуации Kubernetes скорее избыточен?
AДесятки сервисов на многих серверах
BТребуется отказоустойчивость и авто-масштабирование
CОдин небольшой контейнер на одном сервере
DНужны обновления без простоя
Поддержать проект