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

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

Системы оркестрации контейнеров: что это и кому подходит

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

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

Задачи оркестраторов контейнеров

  1. Подготовка инфраструктуры и развертывание

    Это установка приложения и его зависимостей на сервер, включая подготовку этого сервера — установку библиотек, служб и так далее.

  2. Конфигурация и планирование

    Это часть подготовки сервера, а именно его настройка с помощью специальных программ-планировщиков. Их применяют не только для микросервисных приложений, но и для монолитных. Инструменты управления конфигурацией обычно используют «факты», чтобы убедиться в достоверности данных о сервере: например, «убедитесь, что /etc/my.cnf содержит то-то…» или «NGinX должен работать со следующими файлами конфигурации». Оркестраторы содержат в себе такие планировщики, их не надо ставить отдельно.

  3. Распределение ресурсов

    Для развертывания приложения в продакшен-кластере требуется выделить вычислительные ресурсы сервера для различных процессов: это объемы памяти (RAM) и центрального процессора (CPU). Устанавливаются запрашиваемые и предельные параметры, правила при достижении контейнерами ресурсных лимитов, различные ограничения. Это важно для поддержания приложения в рабочем состоянии и сведения затрат к минимуму.

  4. Масштабирование контейнеров на основе рабочих нагрузок

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

  5. Балансировка нагрузки

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

  6. Маршрутизация трафика

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

  7. Мониторинг состояния контейнеров

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

  8. Обеспечение безопасносного взаимодействия между контейнерами

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

Несколько примеров систем оркестрации контейнеров

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

Kubernetes

Эта портативная платформа с открытым исходным кодом считается отраслевым стандартом. Поддерживает и декларативную конфигурацию объектов, и автоматизацию. Можно автоматизировать масштабирование, развертывание с помощью шаблонов и управление рабочей нагрузкой и сервисами контейнеров. Поддерживает ОС: Windows, macOS, Linux.

Предлагает:

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

OpenShift Container Platform

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

Предлагает:

  • встроенные средства планирования, кластеризации и оркестрации;
  • автомасштабирование;
  • балансировку нагрузки;
  • по заявлению производителя, «функции безопасности полностью устраняют риски вмешательства Tenant-клиентов в работу других приложений или хоста»;
  • возможность подключить постоянное хранилище непосредственно к контейнерам Linux, благодаря чему можно использовать платформу для stateful- (без сохранения данных клиента для следующей сессии) и stateless-приложений (с сохранением данных);
  • совместимость созданных на платформе приложений с любыми другими платформами, поддерживающими контейнеры Docker.

Docker Swarm

Это «родная», базовая система кластеризации и оркестровки контейнеров Docker. Использует декларативную модель. Взаимодействие с кластером происходит через команды Docker, а управление действиями — через менеджер Swarm. Поддержка ОС: Windows, macOS, Linux.

Предлагает:

  • децентрализованное проектирование,
  • масштабирование,
  • балансировку нагрузки,
  • динамическое управление ролями,
  • постепенное обновление,
  • разные режимы работы сетей (bridge, overlay, host, none, macvlan),
  • разные варианты обеспечения безопасности,
  • определение требуемого состояния службы и его поддержку.

Nomad

Легкий в поддержке, гибкий, расширяемый оркестратор для развертывания и управления контейнерными и классическими приложениями в физической или облачной среде. Поддерживает ОС: Linux, Windows, macOS, а также Docker, Java, виртуальные машины. В основном Nomad управляет деплоями и перезапускает контейнеры при обнаружении ошибок. Этого часто оказывается достаточно для небольших независимых проектов.

Предлагает:

  • простое управление,
  • хорошую экосистему — встроенную интеграцию с другими продуктами (например, Consul, Terraform, Vault),
  • автоматизацию переноса приложения из монолитной в микросервисную архитектуру,
  • масштабируемость,
  • каталог плагинов,
  • возможность развернуть все кластерное приложение с несколькими контейнерами с помощью плагина из каталога одним щелчком мыши.

Rancher

Платформа для управления контейнерами в облачной или физической производственной среде с открытым исходным кодом. Включает в себя использование всех популярных на сегодняшний день фреймворков оркестровки и планирования контейнеров, в том числе Swarm, Kubernetes, Mesos. Помимо них поддерживает и собственную платформу оркестровки и планирования контейнеров — Cattle. Поддерживает ОС: Linux.

Предлагает:

  • балансировку нагрузки,
  • хранилище данных,
  • гибкие плагины аутентификации пользователей, встроенную интеграцию аутентификации с Active Directory, LDAP и GitHub,
  • частные SDN-сети для каждого окружения,
  • распределенный DNS-сервис для автоматической регистрации контейнеров как сервисов и обнаружения других сервисов,
  • безопасность: встроенное решение для управления конфиденциальной информацией,
  • поддержку работы с несколькими облаками,
  • управление доступом на основе ролей (RBAC) на уровне сред, позволяющее пользователям и группам совместно использовать или запрещать доступ (например, к средам разработки и производства).
Здесь можно посмотреть сравнение Kubernetes с другими системами оркестрации контейнеров.

Кому пригодятся оркестраторы, а кому нет

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

Здесь можно почитать про нюансы Self-Hosted-кластера Kubernetes, а здесь — про Kubernetes aaS, который предлагает платформа Mail.ru Cloud Solutions.

Что надо знать про оркестраторы контейнеров

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