Как думаешь, чем занимается дирижер? Стоит перед оркестром и отчаянно пытается вызвать своего патронуса? На самом деле, у него очень важная задача. Каждый музыкант сосредоточен на своей партии и не видит всей картины. Тут нужен кто-то, кто слушает весь оркестр, смотрит партитуру, контролирует и управляет музыкантами, следит, чтобы все играли слаженно и вовремя. Короче, эффективный менеджер и крепкий хозяйственник.
Запущенное приложение всегда в динамике, как музыкальная композиция. В моменты кульминации, когда нужно выдать полную феерию, дирижеру нужно подключить всех и показать, что сейчас форте (forte), ускоряя темп.
Так и в приложении — это могут быть пиковые часы нагрузки, когда нужно подкинуть побольше мощностей, чтобы выдержать её и не повалиться (Auto-scale). Или, если незадачливый виолончелист сломал свой смычок, кто-то быстро подхватывает его партию. В приложении это значит — упавший сервис нужно быстро заменить новым (Auto-heal), чтобы никто не заметил.
Контейнеры — что это и зачем
Ладно, долой метафоры, вот конкретика: наши сервисы часто работают в контейнерах. Если кратко — контейнер это лёгковесный, изолированный и переносимый пакет ПО, который содержит всё необходимое для запуска приложения в любой среде.
Контейнеров может быть дофига, и ими нужно управлять: балансировать нагрузку, обновлять, мониторить и следить за их состоянием. Кстати, кто любит держаться за штурвал в бурю? Рулевой! А на древнегреческом рулевой — это Kubernetes (кубернетес, др.-греч. κυβερνήτης).
Kubernetes / k8s
Итак, кубернетес, он же кубер, кубик, штурвал или кейвосемьс (k8s) — это open-source инструмент оркестрации контейнеров. Он помогает автоматизировать управление, мониторинг, развертывание и масштабирование приложений.
Проще говоря, кубер следит, чтобы приложение всегда было доступно, работало быстро при нагрузках и быстро восстанавливалось в случае проблем. Альтернативы есть (Docker Swarm, HashiCorp Nomad, AWS Fargate, RedHat OpenShift), но кубер самый популярный. И он может работать не только с Docker, но и с другими runtime (containerd, CRI-O).

Как устроен кластер
Представим, что у нас есть несколько серверов, на которых нужно развернуть приложение. Объединение серверов — это кластер, каждый сервер внутри кластера — нода.
Ноды делим на два типа: Master — мозг кластера, и Worker — рабочие лошадки, на которых запускаются контейнеры. Мастер управляет всеми, а воркеры крутят контейнеры.
Master нода
- API Server — главный контакт с кластером, принимает команды.
- Controller Manager — следит за состоянием кластера, приводит текущее состояние (current state) к желаемому (desired state).
- Scheduler — решает, где размещать контейнеры, учитывая загрузку нод и ресурсы.
- etcd — key-value хранилище, где хранится конфиг кластера и состояние нод. Помогает быстро восстановиться при сбоях.
Резервная мастер нода — обязательно, потому что «Two is One and One is None».
Worker нода
- kubelet — получает инструкции от мастера, следит за состоянием ноды.
- Container runtime — запускает, останавливает и управляет контейнерами.
- kube-proxy — балансировка сети и коммуникации внутри кластера.
Под и Service
Pod — минимальный элемент кластера, в котором запускается контейнер. Иногда в одном поде может быть несколько контейнеров.
Поды распределяются по воркер нодам. Если нагрузка растёт — кубер поднимает новые поды, если падает — удаляет лишние. Если контейнер падает — под позаботится о восстановлении.
Каждому поду нужен IP, но поды эфемерны и могут перезапускаться. Решение — Service: объединяет поды в группы, даёт постоянный IP и балансирует нагрузку между ними.
Декларативный конфиг
Всё настраивается через API Server мастера. Мы передаём YAML-конфиг, где описываем желаемое состояние. Кубер сам приведёт систему к этому состоянию.
Пример: Deployment — шаблон для создания подов. Мы задаём количество реплик (spec:replicas), образ контейнера (spec:template:spec:containers:image) и опции вроде переменных окружения или лимитов ресурсов. Если один под падает, контроллер автоматически создаст новый.
Такой подход делает kubernetes мощным инструментом для управления контейнерами, масштабирования и поддержания стабильности приложений.
Итог
Теперь ты понимаешь, что kubernetes — это как дирижёр, рулевой и штурман одновременно. Он управляет кластером, распределяет нагрузку, следит за здоровьем сервисов и делает жизнь разработчика проще. А если хочешь с коллегами переписываться модными словами — знаешь, что k8s это сокращение от kubernetes, придумали умные люди из Google.