Есть ли альтернатива контейнерам?

image

Половина приложений в мире в той или иной степени контейнеризована. Сегодня контейнеры и K8s использует 70% компаний [по крайней мере, по оценке Gartner]. Контейнеры «разбивают» устоявшиеся за долгие десятилетия монолиты. Контейнеры упрощают перенос микросервисных приложений в «боевую» среду и помогают исключить возникновение сюрпризов при развертывании. Проверить это на практике можно с помощью сервиса контейнеризации Containerum Managed Kubernetes Service.

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

Как сделать контейнеры более безопасными


Cпециалисты из Исследовательского института в Хайдельберге считают, что контейнеры предлагают слабую изоляцию вычислительных ресурсов. Механизмы вроде namespace, root jail, seccomp позволяют распределить мощности, выделить контейнерам собственные «песочницы». Но разного рода эксплоиты, связанные с монополизацией памяти, процессорного времени и влиянием на соседние приложения, все равно присутствуют.

В списке потенциальной замены для контейнеров на первом месте стоит технология «компактных виртуальных машин», или unikernels.

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

В отличие от классических контейнеров со всеми необходимыми для работы зависимостями, unikernels дополнительно включают компоненты ядра операционной системы. Такой подход дает ряд преимуществ в контексте ИБ — так, внутри виртуальной машины можно настроить IDS или VPN. Еще один плюс unikernels — отказ от shell, что сокращает риски потенциальных атак.

Примеры использования


У unikernels есть плюсы и с точки зрения производительности. Концепция подразумевает, что на компактной виртуальной машине присутствует всего один процесс. Такая ВМ может быть даже «легче» контейнера, и инженеры из Исследовательского института в Хайдельберге продемонстрировали это свойство на практике. Они разработали инструмент виртуализации на базе Zen — LightVM. Он способен сформировать и запустить минималистичную ВМ в течение 2,3 мс, которая будет на два порядка быстрее Docker. Причем цифры практически не зависят от числа виртуальных машин на кластере.

В то же время принцип «одна виртуальная машина — один процесс» позволяет кастомизировать ОС под задачи конкретного приложения. Так, с помощью утилиты Unikernel Linux (UKL) можно сформировать unikernels с любой программой без каких-либо модификаций в коде. Получается, что компактные виртуальные машины могут обладать большей защищенностью и превосходить классические контейнеры по производительности.

ОС HermiTux позволяет напрямую запускать приложения поверх гипервизора без дополнительных прослоек, обеспечивая бинарную совместимость с приложениями для Linux на уровне ABI. HermiTux предоставляет минимальное окружение ОС со своим ядром, которое потребляет существенно меньше ресурсов, чем при создании окружений на базе штатного ядра Linux, и позволяет очень быстро (не более 0,1 сек) запускать приложения поверх гипервизора.

Ограничения и недостатки unikernels


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

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

В то же время unikernels усложняют дебаггинг. В этом случае нельзя использовать не только классические утилиты вроде htop, netstat или ping, но и более современный инструментарий (DTrace).

Кроме того, у контейнеров есть повсеместный стандарт Open Container Initiative (OCI), который хорошо помогает добиться совместимости между различными инструментами и избежать зависимости от одной компании или проекта.

Больше подробностей о работе с контейнерами вы можете узнать на вебинаре 13 марта «Основы Kubernetes: секреты от #CloudMTS».

© Habrahabr.ru