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».

Комментарии (10)


  1. Evengard
    00.00.0000 00:00

    Есть ещё Kata Containers, позволяющие по сути запускать контейнеры в виртуальных машинах.


    1. shred_dev_sda
      00.00.0000 00:00

      • + gVisor


  1. DikSoft
    00.00.0000 00:00
    +2

    У контейнеров при всех их плюсах есть одно очень нехорошее свойство. За которое его так любят недостаточно ответственные разработчики. Коих весьма много в общей массе, как оказалось. Контейнерный подход поощряет .. раздолбайство. Зависло, сбойнуло - по-умолчанию тупо перезапустим и продолжим. И не надо рассказывать сказки про тщательное изучение обвешанных прометеусами контейнерных клубков приложений. В логи вообще мало кто после выкатки в прод заглядывает. Если только когда всё вразнос пошло. ДоДо пицца тут иногда такие истории выкладывает, считая, что это реклама хорошей практики.
    Поэтому шансов заменить контейнеры на что-то другое в ближайшем будущем мало. Плюс они создают кучу рабочих мест, где вместо одного небольшого приложения со скромной командой поддержки приходится содержать армию переоценённых девопсов и платить за обвесок для K8S больше, чем за само приложение.


    1. akurilov
      00.00.0000 00:00
      +1

      1. Уж лучше бы падение контейнера на проде не приводило бы к катастрофе. А за регулярные рестарты можно и спросить с разработчика в спокойной обстановке. Зачем лишний стресс разработчикам и лишние потери денег бизнесу? Чисто чтобы жисть малиной не казалась?

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


    1. Nasreddin_Hodja
      00.00.0000 00:00
      +2

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


      1. Chupaka
        00.00.0000 00:00

        Как будто без контейнеров всё по-другому :)


  1. 13werwolf13
    00.00.0000 00:00

    уфф

    опять люди считающие что контейнеры это docker и ничто другое набежали..


  1. Chupaka
    00.00.0000 00:00

    LightVM. Он способен сформировать и запустить минималистичную ВМ в течение 2,3 мс, которая будет на два порядка быстрее Docker.

    А по каким параметрам быстрее? Так-то заменить 200 ЦПУ на 2 с той же производительностью — весьма неплохо, но что-то мне подсказывает...


    1. fedorro
      00.00.0000 00:00

      Она только запускается на два порядка быстрее (за время порядков fork() ), вычисления там не особо ускоряются.


      1. Chupaka
        00.00.0000 00:00

        Ага, значит, слова "которая будет" лишние и лишь сбивают с толку.