Print this page

Что такое Kubernetes

29 July 2024

Как думаешь, чем занимается дирижер? Стоит перед оркестром и отчаянно пытается вызвать своего патронуса? На самом деле, у него очень важная задача. Каждый музыкант сосредоточен на своей партии и не видит всей картины. Тут нужен кто-то, кто слушает весь оркестр, смотрит партитуру, контролирует и управляет музыкантами, следит, чтобы все играли слаженно и вовремя. Короче, эффективный менеджер и крепкий хозяйственник.


Запущенное приложение всегда в динамике, как музыкальная композиция. В моменты кульминации, когда нужно выдать полную феерию, дирижеру нужно подключить всех и показать, что сейчас форте (forte), ускоряя темп.

Так и в приложении — это могут быть пиковые часы нагрузки, когда нужно подкинуть побольше мощностей, чтобы выдержать её и не повалиться (Auto-scale). Или, если незадачливый виолончелист сломал свой смычок, кто-то быстро подхватывает его партию. В приложении это значит — упавший сервис нужно быстро заменить новым (Auto-heal), чтобы никто не заметил.

Контейнеры — что это и зачем

Ладно, долой метафоры, вот конкретика: наши сервисы часто работают в контейнерах. Если кратко — контейнер это лёгковесный, изолированный и переносимый пакет ПО, который содержит всё необходимое для запуска приложения в любой среде.

Контейнеров может быть дофига, и ими нужно управлять: балансировать нагрузку, обновлять, мониторить и следить за их состоянием. Кстати, кто любит держаться за штурвал в бурю? Рулевой! А на древнегреческом рулевой — это Kubernetes (кубернетес, др.-греч. κυβερνήτης).

Kubernetes / k8s

Итак, кубернетес, он же кубер, кубик, штурвал или кейвосемьс (k8s) — это open-source инструмент оркестрации контейнеров. Он помогает автоматизировать управление, мониторинг, развертывание и масштабирование приложений.

Проще говоря, кубер следит, чтобы приложение всегда было доступно, работало быстро при нагрузках и быстро восстанавливалось в случае проблем. Альтернативы есть (Docker Swarm, HashiCorp Nomad, AWS Fargate, RedHat OpenShift), но кубер самый популярный. И он может работать не только с Docker, но и с другими runtime (containerd, CRI-O).

Kubernetes схема

Как устроен кластер

Представим, что у нас есть несколько серверов, на которых нужно развернуть приложение. Объединение серверов — это кластер, каждый сервер внутри кластера — нода.

Ноды делим на два типа: 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.