Новости

Что такое системы оркестрации контейнеров

Контейнеризация стала стандартом в современной разработке: она позволяет изолировать приложения, ускорить их развертывание и легко масштабировать сервисы под нагрузку. Но когда количество контейнеров растет, управление ими вручную превращается в хаос. На помощь приходят системы оркестрации контейнеров, обеспечивающие автоматизацию, устойчивость и контроль. В этой статье разберем, как они работают, какие задачи решают, на каких проектах стоит (и не стоит) их внедрять.

Понятие оркестрации

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

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

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

Переход к микросервисной архитектуре приложений изменил подход к контейнерам. Они стали подчиняться логике непрерывной разработки CI/CD, появилось гибкое масштабирование сервисов. Для них уже потребовался отдельный инструмент управления — оркестратор.

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

На сегодняшний день это наиболее современная и востребованная модель управления, которая обеспечивает масштабирование и отказоустойчивость системы.

Какие задачи решают системы оркестрации контейнеров

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

Мониторинг. Контроль состояния контейнеров — ключевая роль оркестратора. Именно он помогает выявить сбои и масштабировать приложение под текущую нагрузку. Инструмент имеет варианты реализаций с разным подходом к отслеживанию работы контейнеров.

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

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

Обновление контейнеров. Оркестратор умеет обновлять микросервисы без остановки всей системы, плавно заменяя контейнеры на последнюю версию. Если в процессе обновления выявится критическая ошибка, система прекратит обновление и вернется к использованию старой версии.

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

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

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

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

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

Популярные инструменты оркестрации

Первой системой оркестрации контейнеров стала Apache Mesos, она появилась в 2009 году и до 2013−2014 годов оставалась основной. Система была универсальной, с поддержкой не только контейнеров, но и виртуальных машин. Но со сложностями в управлении, особенно при настройке сети. Позднее ее вытеснили Docker и Kubernetes. Они изначально создавались для контейнерных сред, проще в настройке и лучше подходят для облачных сервисов.

Kubernetes

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

Kubernetes лег в основу многих дистрибутивов и платформ для оркестровки:

  • OpenShift — дистрибутив Red Hat c набором дополнительных инструментов;

  • Rancher — платформа от SUSE для мультикластерного развертывания контейнеров;

  • "Штурвал", Nova Container Platform — отечественные платформы. Входят в реестр Минцифры, представлены в качестве сервиса у облачных провайдеров и совместимы с российскими дистрибутивами Linux;

  • K3s — облегченный дистрибутив от тех же разработчиков для IoT;

  • Minikube — официальный пакет для локального запуска, подходит для разработки и обучения;

  • MicroK8s — пакет инструментов от разработчиков Ubuntu, подходит для обучения, разработки и тестирования;

  • Управляемый сервис в качестве услуги облачной платформы, основа для бессерверных вычислений.

Важно понимать, что эти инструменты не заменяют, а дополняют Kubernetes. Например, Rancher управляет кластерами, но сами кластеры работают под управлением Kubernetes. Эта платформа нередко предоставляется в качестве облачного сервиса.

Docker Swarm

Система оркестрации Docker Swarm появилась на пару лет позже Kubernetes, но не стала бороться с ней за пользователей крупных систем с тысячами узлов. Вместо этого Swarm предлагает более дружелюбный интерфейс и интеграцию с платформой Docker, в которой отслеживается весь жизненный цикл контейнера.

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

В таблице — сравнение двух систем по базовым параметрам.
Оркестратор
Docker Swarm
Kubernetes
Разработчик
Docker
Google и CNCF
Масштабируемость
До нескольких сотен узлов
До нескольких тысяч узлов
Открытость исходного кода
Open Source
Open Source
Сложность освоения
Простая
Простой базовый уровень с прогрессивной кривой сложности
Поддержка
Большое сообщество
Огромное сообщество, коммерческие службы поддержки
Доступность в России
Доступен, умеренно распространен
Доступен и широко распространен
Система мониторинга — это отдельный элемент, стоит отметить несколько самых популярных решений:

  • Prometheus — мощный инструмент для работы в среде Kubernetes. Предназначен для сбора метрик и оповещений;

  • Grafana — инструмент для визуализации получаемых данных мониторинга. Подходит для построения дашбордов;

  • EFK Stack — легковесный инструмент для обработки больших объемов данных, представляет логи в удобном виде;

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

  • Victoria Stack — инструменты для мониторинга и аналитики. Подходят для высоконагруженных сценариев, так как способны обрабатывать миллионы параметров в минуту.

Преимущества и недостатки оркестраторов

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

Плюсы

Непрерывный жизненный цикл приложений. Оркестраторы отлично сочетаются с методологией CI/CD, пропагандирующей автоматизацию доставки, интеграции и развертывания. С их помощью можно внедрять изменения постепенно путем обновления контейнеров.

Изоляция и переносимость контейнеров. Оркестрация использует основные преимущества контейнеров, что упрощает разработку и развертывание приложений.

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

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

Минусы

Недостатки оркестраторов тоже связаны с масштабированием сервисов, но уже в другом ключе.

Масштабируемость во вред. Увеличение масштабов приложения полезно не всегда. В ряде случаев оно вызвано не реальной необходимостью, а ошибками в конфигурировании и неправильным взаимодействием контейнеров друг с другом. Также большие кластеры становятся целью для DDoS-атак. В результате растут накладные расходы.

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

Дополнительный уровень абстракции. Это комплексная проблема, требующая от специалистов глубоких компетенций. Хотя первые шаги в оркестрации не требуют сверхусилий, для правильного функционирования больших проектов необходимо понимать принципы и учитывать неявные особенности работы оркестратора.

Кому и когда использовать оркестраторы

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

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

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

DevOps и CI/CD. Оркестраторы становятся ключевым элементом для автоматизации процессов дистрибуции и развертывания приложений. С их помощью сокращается время между релизами и снижается нагрузка на разработчиков ПО и администраторов.

Big Data и машинное обучение. Системы оркестрации применяются для расчетов моделей искусственного интеллекта и обработки больших разнородных массивов данных. Эти задачи разбиваются на работу с небольшими блоками информации, что вполне применимо для использования в отдельных контейнерах.

Облачные услуги. Понятие выделенного сервера постепенно уходит в прошлое — на его место приходит услуга доступа к предварительно настроенному оркестратору для работы с доступной инфраструктурой.

Какие задачи не подходят для оркестраторов

Внедрять оркестрацию имеет смысл при условии, что потребность в масштабировании и высокая нагрузка возникают регулярно и прогнозируемо. Есть немало случаев, когда ее использование избыточно. Вот несколько примеров.

Простые или монолитные приложения. Если приложение или сайт достаточно простые, то ничего, кроме дополнительных расходов на администрирование и оркестрацию, они не получат. Схожая ситуация с крупными монолитными приложениями, которые плохо совместимы с контейнерной технологией.

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

Работа с большими массивами данных. Долгое время реакции, медленное согласование работы кластеров и кратное увеличение потребления ресурсов делают такие системы оркестрации нецелесообразными.

Как начать использовать Kubernetes

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

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

Для перехода от теории к практике есть онлайн-площадки с интерактивными обучающими лабораториями. Например, Play with Kubernetes создает реалистичное окружение, имитируя работу системы оркестрации.

Разумеется, для начала настоящей работы должно быть разработано контейнерное приложение, подходящее для запуска в масштабируемой системе с оркестровкой. В противном случае придется доработать существующее приложение для упаковки в контейнер. Оценить возможности оркестрации и разобраться в архитектуре контейнерных сред поможет книга «Kubernetes на практике» издательства O’Reilly.

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

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

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