Журнал об IT-бизнесе, технологиях и цифровой трансформации

Путь к Kubernetes и его преимущества для разработки Mail.ru Cloud Solutions
Mail.ru Cloud Solutions
  • 29 октября
  • Разработка

Путь к Kubernetes и его преимущества для разработки

Автор: Михаил Петров
Популярное
Бизнес
Анализ больших данных в облаке: как бизнесу стать дата-ориентированным
Бизнес
Опыт Lamoda: как пережить «черную пятницу»
Технологии
Disaster Recovery: облака и аварийное восстановление IT-инфраструктуры

Kubernetes — открытая система оркестрации, предназначенная для управления кластером контейнеров. Он запускает контейнеры (например, используя Docker) на большом количестве хостов, управляет ими, обеспечивает совместное размещение и репликацию большого количества контейнеров, балансирует нагрузку.

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

Как пришли к Kubernetes

Ранний железный век. Были времена, когда администраторы давали серверам запоминающиеся имена, холили и лелеяли их. Время с принятия решения о покупке сервера до его ввода в продакшн занимало несколько месяцев.

Позднее железо. Потом в корпорациях вроде Google и Amazon сделали API, чтобы поднимать нужный сервер за секунды. Скоро умные ребята поняли, что так можно полностью автоматизировать цикл жизни сервера, и это было огромным шагом вперед.

Также появились системы типа Puppet, Saltstack и Chef, которые позволяли декларативно указать, какая конфигурация приложений на сервере требуется, и привести ее к нему. Это сильно отличалось от традиционного подхода системных администраторов — зайти на сервер и запускать команды, пока он не окажется настроен.

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

Контейнеры. Затем на стыке технологий Linux появился Docker — комплекс, позволяющий удобно упаковывать приложения в контейнеры и запускать их на любом linux-хосте. Контейнер, собранный на рабочем компьютере программиста, точно так же запускался и на боевом сервере, что снимало изрядное количество проблем при запуске софта в боевой среде.

Пришло понимание, что хорошо, когда разработчик, пишущий софт, отвечает за него и в боевой среде, а не просто отдает администраторам. Иначе получается так, что программисты хотят выкатывать быстро, а администраторам нужен стабильный продакшн, они сопротивляются частым релизам. Если программист будет отвечать за весь цикл жизни софта «от и до», частые выкатки перестанут мешать администраторам.

Рождение DevOps. Для сглаживания этого противоречия возникла методология DevOps — взаимное проникновение Dev- (разработка) и Ops- (администрирование) команд во все циклы разработки софта: от проектирования до работы на бою и починки силами тех, кто писал код.

Микросервисы в контейнерах. Следом пришло понимание, что если хочется быстро выкатывать в продакшн, надо разделять большой софт на мелкие части, чтобы можно было их разрабатывать и обновлять независимо. Так возникли микросервисы.

Облачные API и социально-экономические предпосылки Kubernetes. С появлением API публичных облачных платформ и контейнеров с микросервисами весь цикл разработки и поставки софта на продакшн смогли контролировать сами разработчики. Это позволило им разрабатывать фичи с нужной скоростью без сопротивления админов.

Так как контейнеры надо как-то автоматически взводить на боевых серверах, возникла необходимость в софте, который будет управлять всеми контейнерами через свое API — и так возник Kubernetes.

В чем преимущества Kubernetes

Kubernetes (часто сокращают до K8s) — открытая система оркестрации контейнеров, представленная компанией Google в 2014 году. K8s позволяет управлять серверами, на которых запущены контейнеры, и самими контейнерами на них, а также повышает утилизацию железа, запуская множество контейнеров на одном сервере.

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

Программное управление релизами

У Kubernetes несколько преимуществ для разработчиков.

В боевой среде используются ровно те же контейнеры, которые тестировались в dev-среде. Так что если приложение работает в тесте, то, скорее всего, оно будет работать и в бою. Организовать такое с менеджером пакетов RPM сложнее, поскольку приходится помнить про зависимости. А при поставке кода в контейнере все зависимости уже в нем содержатся.

Инфраструктура для приложений декларативно описана, так формируются «неизменяемые» конфигурации: в Kubernetes передается информация (схема), как решение должно работать, и он ее выполняет. Также Kubernetes следит, чтобы состояние кластера соответствовало желаемому, при необходимости перезапускает нужные компоненты.

Kubernetes позволяет программно управлять релизами на серверах под своим управлением:

  • накатить релиз одной кнопкой;
  • быстро откатить релиз;
  • сделать a/b тестирование;
  • выкатывать постепенно (по процентам), следя за показателями мониторинга, чтобы быстро обнаружить возможные ошибки в новой версии;
  • автоматически увеличить или уменьшить размер кластера, то есть добавить или убрать ноды в зависимости от нагрузки;
  • следить, чтобы было ровно заданное количество инстансов приложения, например — быстро доводить их до нужного числа при потере части инстансов из-за какого-либо сбоя.

Автоматическая отказоустойчивость

Для приложения на физическом сервере нужно продумывать схему его восстановления при сбоях:

  • если приложение работает на одном сервере и он выходит из строя — надо думать, как организовать его автоматическое развертывание в новом месте;
  • если приложение работает в нескольких копиях параллельно, чтобы при падении одной всегда оставалась рабочая копия, — нужно настраивать автоматическую балансировку нагрузки.

В Kubernetes эти проблемы решены автоматически: он сам распределяет приложения так, чтобы они продолжили работу в случае сбоя на конкретном физическом сервере, а также с учетом нагрузки на них. Например, если зона отказа — дата-центр, то он будет распределять приложение по разным дата-центрам. Таким образом, потеря дата-центра может не сказаться на приложении.

Kubernetes — это автоматизация процессов

Приложения в k8s выкатываются и тестируются без участия администраторов. Разработчик пишет сценарий, а дальше происходит облачная магия. Так что в идеальном мире Kubernetes вся операционная поддержка работы софта лежит на плечах программистов, а администраторы следят, чтобы стабильно работал слой облачной инфраструктуры — то есть, сам Kubernetes.

Поэтому компании арендуют кластеры Kubernetes в облаке, если хотят полностью снять с себя рутину по их администрированию и заниматься только разработкой.

Если написаны тесты и пробы живости (liveness / readiness probes), то размещение софта в Kubernetes позволит безопасно выкатываться хоть 50 раз за день без участия кого-то еще.

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

Как развернуть Kubernetes

Kubernetes — это абстракция над инфраструктурой, поэтому с ним приложения можно безболезненно мигрировать с одной инфраструктуры на другую, например, с физической на облачную, и даже строить гибридные инфраструктуры с оркестрацией контейнеров on-premise и в облаке.

Но сам переход на Kubernetes не так прост. Чтобы использовать его возможности на 100%, надо поработать над архитектурой и подумать над конфигурацией. При развертывании Kubernetes «из коробки» нужна помощь узкоспециализированных экспертов, услуги которых стоят недешево, процесс перехода может занять несколько недель.

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

Ссылка скопирована!

Что еще почитать про ИТ-бизнес