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

В традиционной среде развертывание серверов осуществляется, в частности, путем определения схемы хранения, сетевой интерфейсной карты (network interface card, NIC), процессора и других параметров конфигурации. И это помимо выяснения марки сервера, который нужно купить, заказа и ожидания доставки.

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

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

1. Kubernetes

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

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

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

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

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

2. Docker

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

Первое, что необходимо отметить, — это необходимость создать кластер Kubernetes. Облегчить эту задачу позволяет инструмент под названием «kops», который поможет установить кластер, поверх которого можно будет запустить Docker. Это одна из тех операций, которые лучше выполнять на собственном сервере, а не на сервере, предоставленном облачным провайдером. Это может быть непростая операция, и хотя Kubernetes облегчает ее, некоторые опасаются привязки к серверу поставщика, если потребуется его заменить на другой. Google рекомендует для этой задачи приобрести новый сервер. Помимо этого также необходимо установить дистрибутив Linux и клиент Docker.

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

Цель состоит в том, чтобы заставить Docker поддерживать сеть «многие ко многим» (many-to-many), то есть запускать много контейнеров одновременно и без замедления, но этот вопрос до конца еще не решен.

3. Apache Mesos

Apache Mesos был выпущен в 2012 г. как платформа с открытым исходным кодом для автоматизации развертывания, масштабирования и управления большими кластерами приложений на основе контейнеров. В основе системы лежит менеджер кластеров Marathon, а также сетевой фреймворк Shipworm и легкий демон, также называемый Marathon, который обеспечивает управление и координацию между этими компонентами. Это настраиваемая платформа, которая может использоваться в различных приложениях — от рабочих процессов до бизнес-аналитики.

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

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

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

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

Распределенная природа Docker означает, что ему не нужно доверять базовой операционной системе. Каждый контейнер может быть настолько самодостаточным, насколько захочет.

Однако на практике Docker — не единственная технология, которую можно использовать для запуска распределенной программы. Чтобы программа считалась «распределенной», приложение должно обращаться к сервисам, которые также доступны как сервисы в распределенной сети.

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

4. OKD

OpenShift — это облачная контейнерная платформа Red Hat для создания и управления контейнерами. Используя возможности Kubernetes, она позволяет развертывать и управлять распределенными приложениями с помощью контейнеров Docker, онпремисных систем или публичного облака. OKD является эффективной Open Source-альтернативой OpenShift, предоставляя большинство тех же возможностей и функций, что и OpenShift. Они включают:

  • автоматическое развертывание Kubernetes на Azure, AWS, GCP и платформах других ведущих облачных провайдеров, а также на «голом» железе, Red Hat OpenStack и других провайдерах виртуализации;
  • быстрое создание приложений с помощью интегрированного обнаружения сервисов и постоянного хранилища;
  • масштабирование приложений для управления растущим спросом;
  • поддержка автоматической высокой доступности, балансировки нагрузки, проверки работоспособности и обхода отказа;
  • предоставление инструментов CI/CD и консоли для создания контейнерных приложений на Kubernetes.

OKD располагает сильным и процветающим сообществом Open Source-разработчиков.

5. Operator Hub

Operator Hub — это первоклассная оболочка Node.js API для Kubernetes API. Она предоставляет API для создания, управления и мониторинга всего кластера Kubernetes.

Чтобы начать работу с ней, нужно создать проект Operator Hub на GitHub и указать свой репозиторий GitHub в корне вашего проекта Kubernetes. Затем можно зарегистрировать поды Kubernetes, зайдя в kubectl и указав префикс cluster_NAME своего проекта Operator Hub.

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

Чтобы запустить кластеры Kubernetes без регистрации подов, просто выполните $ kubectl join default, где default — это имя мастера или кластера, к которому вы хотите присоединиться.

Меняющийся ландшафт

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