Развертывание приложений всегда было головной болью разработчиков. Олдфаги, которым довелось кодить во времена Windows COM, наверняка помнят «DLL Hell» – настоящий кошмар девелоперов и сисадминов. Но хотя прошли годы, ежедневно растущий поток новых технологий зачастую создает путаницу и неуверенность.
Практически во всех случаях разработки ПО среда разработки значительно отличается от окружения, в котором приложение реально будет работать. Тот факт, что различные компьютеры будут сконфигурированы по-разному — очевиден и предсказуем, но при этом различное поведение приложения на этих компьютерах недопустимо.
С учетом описанных трудностей, контейнерные технологии фактически стали революцией в деплойменте, а разработки, такие как Docker, привели к взрывному росту популярности. Что же делают контейнеры? Позволяют развернуть ПО вместе со всеми необходимыми зависимостями и в конфигурации, необходимой для успешной работы приложения в пользовательской среде выполнения. Таким образом, контейнерные образы позволяют «упакованной», конечной среде выполнения быть почти идентичной среде разработки, при этом избегая затратной эмуляции операционной системы.
В результате получаем весьма легковесный пакет, зачастую запускающий всего несколько процессов, специфичных для приложения. Такой пакет легко распространять, деплоить и запускать на различных инстансах. Если подытожить вышесказанное, контейнеры гарантируют одинаковое поведение приложения в различной программной среде.
В этой статье — краткий обзор нескольких важных инструментов управления контейнерами. Если вы планируете работать с контейнерными технологиями, вам необходимо хотя бы ознакомится с этим набором приложений.
Это не детальный обзор, так же не предоставляет сравнение или оценку. Рассматривайте ее как начальную точку в исследовании инструментов управления контейнерами. Ниже небольшой список и краткий обзор, в надежде помочь вам выбрать инструменты для дальнейшего более глубокого изучения.
Docker
Docker – одна из наиболее популярных платформ. Вполне возможно, что именно Докер является причиной недавнего взлета популярности технологии контейнеров (сама технология не так уж нова, и существует более 10 лет).
Docker обеспечивает функционал для развертывания и запуска контейнерных приложений. Контейнеры чем-то напоминают виртуальные машины, но реализованы на более высоком уровне, чем ОС и с меньшей изоляцией. Вместо упаковки всей операционной системы со всем необходимым софтом, контейнеры упаковывают только приложение и его прямые зависимости. Это основная концепция, реализованная Docker.
Формат Docker похож на обычный package, за исключением того, что пакет является автономным, и несколько копий может быть запущено на одном хосте (или на различных хостах). Такой подход максимально эффективно использует ресурсы, повышает производительность и снижает размер приложения. При этом Docker обеспечивает высокую степень изоляции, ограничивая проблемы приложения внутри самого контейнера, без ущерба для машины.
Kubernetes
Docker отлично подходит для работы с контейнерами на одном хосте и обеспечивает весь необходимый функционал для этой цели. Но в сегодняшних реалиях распределенных сервисов важной задачей является управление ресурсами и рабочими нагрузками на серверах и в сложных инфраструктурах.
Одним из таких инструментов является Google Kubernetes. Это непривычное греческое слово переводится как «губернатор» или «командир». Как подсказывает название, Kubernetes берет на себя тяжелую работу по оркестрации (организации) контейнеров на многих узлах, предлагая большой выбор полезных функций.
Service Discovery
В последнее время экосистема контейнерных приложений выросла вместе с ростом популярности архитектурного стиля Микросервисов. Идея Microservices Architecture состоит в разделении тяжелого монолитного приложения на небольшие (полу)автономные службы, которые взаимосвязаны между собой в распределенной системе. А поскольку количество сервисов в такой системе увеличивается в разы, нет смысла вручную назначать и учитывать порты, которые приложения «прослушивают». Разумнее после развертывания контейнера назначить порт автоматически. И хотя такой подход решает проблему конфликта между портами, он же делает невозможным поиск нужного сервиса и предоставление его другим службам.
Решение указанной проблемы – технология Service Discovery. Работает Service Discovery следующим образом: в момент запуска служб происходит регистрация в реестре распределенных ключей / значений с IP-адресом и номером порта, где другие службы могут легко находить и вызывать нужный сервис.
Планировщик (Sheduler)
Другая важная функция, предоставляемая Kubernetes, — планирование. Планировщик берет на себя задачу запуска контейнеризованных приложений с учетом доступных ресурсов, текущих задач и запросов. Другими словами, планировщик выполняет масштабирование, переназначение задач на разные хосты и перемещение рабочих нагрузок между мощностями в случае неполадок.
Благодаря множеству полезных функций и большому комьюнити, популярность Kubernetes последнее время быстро растет.
CoreOS
CoreOS — это операционная система на базе Linux, которая поставляется в комплекте с функционалом, необходимым для развертывания и запуска контейнерных приложений. Несмотря на относительно небольшие возможности по распределению нагрузки, CoreOS подходит как для односерверных, так и для кластерных вычислительных сред.
CoreOS выглядит серьезным конкурентом для других популярных дистрибутивов Linux благодаря своей встроенной возможности работать с контейнерами и адаптации для работы с публичными облачными приложениями.
CoreOS начинал с использования Docker как дополнительного уровня абстракции – и как стандартизованного формата для контейнеров, но позднее выпустил и поддерживает собственный контейнерный движок Rocket (rkt — keep reading).
Хотя CoreOS – ПО с открытым исходным кодом, доступна так же коммерческая версия системы под названием Tectonic. Tectonic является «freemium», его серьезным преимуществом является наличие в дистрибутиве Kubernetes для оркестровки контейнеров.
Etcd
Etcd, разработанный CoreOS, представляет собой легковесное распределенное хранилище ключ / значение с открытым исходным кодом. Etcd предоставляет приложениям надежный инструмент хранения данных в кластере серверов и позволяет им соответственно реагировать на изменения значений. Он используется Kubernetes как центральное хранилище, где все узлы кластера могут считывать / записывать данные конфигурации, а также для обнаружения сервисов (Service Discovery) и для управления выбором лидера (Leader Election).
rkt
rkt — платформа управления контейнерами для кластеров Linux. Базируясь на дизайне собственной ОС и на опыте взаимодействия с Docker, CoreOS разработал инструмент для создания, верификации и запуска контейнерных приложений с изоляцией.
rkt, как альтернатива Docker, была выпущена почти год спустя и с тех пор набирает популярность. Можно рассматривать rkt как улучшение Докера как минимум по двум причинам:
— обладает большей безопасностью, так как использует проверку подписи и разделение привилегий по умолчанию;
— обеспечивает переносимость: помимо возможности запуска образов Docker, rkt предназначен для запуска App Container Images (ACI) – образов в формате, указанном в открытой спецификации App Container Specification (appc).
Mesos
Apache Mesos — это ядро для распределенных вычислительных систем, построенное на тех же принципах, что и ядро Linux, но с другим уровнем абстракции. Его основная цель — с высоким уровнем изоляции консолидировать вычислительные ресурсы нескольких физических или виртуальных машин и сделать их доступными для центральной службы управления, как если бы это был один большой пул ресурсов. В двух словах, Mesos позволяет использовать кластер серверов как единую вычислительную мощность.
Размещая агента, который измеряет и сообщает о доступности ресурсов на каждой машине, Mesos может планировать и организовывать выполнение задач, а также проводить проверку их выполнения. Таким образом, задачи параллельно выполняются на нескольких серверах, чьи доступные ресурсы рассматриваются как единый пул (так называемые Mesos Frameworks).
Consul
Consul — это распределенная система, которая включает множество операций, но главное значение в ней имеют функции обнаружения сервисов (Service Discovery) и предоставление хранилища ключ / значение.
Как инструмент обнаружения сервисов, Consul позволяет приложениям регистрироваться у себя в качестве клиентов, предоставляющих услуги, такие как API. Затем другие системы могут обращаться непосредственно к Consul для поиска доступных сервисов. Встроенная проверка health check обеспечивает возможность принимать меры при возникновении угрозы, например, отказ принимать трафик от узлов, не прошедших проверку.
В качестве хранилища ключ / значение Consul предоставляет приложениям возможность сохранять данные конфигурации по узлам и реагировать на изменения этих данных, так же как и etcd. Consul, кроме этого, обеспечивает нативную поддержку нескольких дата-центров, более полную систему проверки работоспособности, основанную на gossip pool, свой собственный пул поиска сервисов и веб-интерфейс для мониторинга служб.
Google Container Engine
Google Container Engine (GKE) — это менеджер кластеров и система оркестровки для контейнеров Docker. Система с открытым исходным кодом, созданная кампанией Google на основе Kubernetes, может использоваться для:
- создания, изменения размеров и отладки кластеров контейнеров
- автоматического масштабирования приложений
- создания и управления подами (pods)
В сравнении с Kubernetes, Google Container Engine предоставляет дополнительный набор сервисов для разработчиков и системных администраторов. Например, балансировка нагрузки, отслеживание метрик и логирование обеспечиваются системой GKE.
AWS ECS
Аналог Гугловского GKE производства Amazon — контейнерная служба EC2 (ECS). Как и большинство подобных сервисов, ECS поддерживает Docker и позволяет запускать контейнеризованные приложения на инстансах EC2 от Amazon.
Как и GKE, ECS — это активно управляемый сервис с множеством удобных функций, в том числе развертывание контейнеров, планирование, автоматическое масштабирование, балансировка нагрузки, мониторинг ресурсов на уровне кластера, а также бесшовное взаимодействие с остальным стеком сервисов AWS. Хотя ECS работает только на VPC (Amazon Virtual Private Cloud), сама служба предоставляется бесплатно, поэтому платить придётся только за использование ресурсов Amazon по обычному тарифу.
На правах рекламы. Это не просто виртуальные серверы! Это VPS (KVM) с выделенными накопителями, которые могут быть не хуже выделенных серверов, а в большинстве случаев — лучше! Мы сделали VPS (KVM) c выделенными накопителями в Нидерландах и США (конфигурации от VPS (KVM) — E5-2650v4 (6 Cores) / 10GB DDR4 / 240GB SSD или 4TB HDD / 1Gbps 10TB доступными по уникально низкой цене — от $29 / месяц, доступны варианты с RAID1 и RAID10), не упустите шанс оформить заказ на новый тип виртуального сервера, где все ресурсы принадлежат Вам, как на выделенном, а цена значительно ниже, при гораздо более производительном «железе»!
Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки? Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 ТВ от $249 в Нидерландах и США!