Rambler's Top100
Статьи
Гордон ХАФФ  25 мая 2018

Контейнеры объединяются с микросервисами и DevOps

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

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

Согласно недавнему исследованию Forrester Consulting, проведенному при поддержке Red Hat, контейнеры имеют целый ряд преимуществ, основными из которых, по мнению участников опроса, являются рост качества релизов ПО (31% респондентов), повышение масштабируемости приложений (29%) и более простое управление (28%). Специалисты Forrester отмечают, что «столь высокая повторяемость этих ответов свидетельствует о большой привлекательности контейнеров для организаций, преследующих самые разные цели».

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

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

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



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

Согласно вышеупомянутому исследованию Forrester, контейнеры предлагают более простой путь к реализации DevOps, особенно в сочетании с дополнительными инструментами. В частности, организации, взявшие на вооружение системы управления конфигурациями и кластерами, начали успешно избавляться от вертикальных схем жизненного цикла разработки ПО. Респонденты, применяющие такие системы, считают, что следуют концепции DevOps, в три раза чаще по сравнению с теми, кто использует только контейнеры (45% и 15% опрошенных соответственно).

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

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

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

Все соображения по обеспечению безопасности, оптимизации производительности, проектированию, надежности и сертификации, которые относятся к виртуальным средам, сохраняют актуальность и в мире контейнеров. Фактически на операционную систему возлагается еще большая ответственность за обеспечение безопасности и изоляцию ресурсов, чем в тех случаях, когда часть этих задач берет на себя гипервизор. Среди прочего, отсюда следует, что вы должны использовать соответствующие возможности операционной системы Linux, такие как, например, SELinux, следуя ведущим практикам запуска контейнеризованных сервисов, точно так же, как и при работе на «голом железе». В частности, это означает, что необходимо как можно быстрее понижать привилегии и запускать службы с root-доступом только там, где без этого не обойтись.

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

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

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

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

Особенно показателен в этом смысле интернет вещей (IoT), где конвергенция технологий весьма благотворно сказывается на практичности решений, опирающихся на повсеместное использование сенсоров на основе дешевых процессоров с низким энергопотреблением, беспроводных сетей и возможностей хранить и анализировать большие объемы данных не только в облаке, но и непосредственно на месте сбора (так называемые граничные вычисления, Edge Computing). Это, свою очередь, открывает новые возможности для инноваций, роста доходов и повышения эффективности.

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

Гордон Хафф, облачный стратег, Red Hat
Заметили неточность или опечатку в тексте? Выделите её мышкой и нажмите: Ctrl + Enter. Спасибо!