Контейнеры и виртуализация: быстрее, эффективнее, надежнее

в 9:56, , рубрики: containers, paravirtualization, unikernels, virtuozzo, vm, Блог компании Virtuozzo, виртуализация, контейнеры

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

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

Именно поэтому, когда наша компания только начинала работать над продуктом, который называется сегодня Virtuozzo, мы выбрали направление, которое называют сегодня «Контейнерами ОС» или «Легкими ВМ». В чем разница? А разница в том, что наши легкие ВМ не требовали и не требуют запуска отдельного ядра для каждой «сущности», работающей на сервере. Вместо этого мы берем готовое ядро Linux и предлагаем ему разделить все ресурсы между разными пользователями. Речь, конечно, шла не совсем о стандартном дистрибутиве Linux, а о модифицированной версии, которая могла изолировать пользователей между собой, предоставляя им доступ, например, только к отдельным частям дерева процессов, к отдельным сетевым адаптерам и так далее. Все это было очень востребовано, так как работала в десятки раз быстрее, чем полная виртуализация.

Но а пользователь фактически получал свой изолированный дистрибутив Linux: при доступе через SSH он видит определенные ресурсы, разрешенные процессы и не может влиять на других пользователей. Именно так и сложилась модель предоставления виртуального хостинга на базе контейнеров ОС (или «Легких ВМ») – максимум эффективности при минимальной нагрузке на серверы.

Прогресс неизбежен

С тех пор, как первая версия Virtuozzo была представлена в далеком 1999 году, прошло много времени, за которое технологии виртуализации – как контейнерной, так и полной – претерпели серьезные изменения, и наметились основные вектора поиска «Святого Грааля» — оптимального по своим характеристикам решения для современных cloud-native задач.

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

Что же, за это время средства виртуализации, позволяющие запускать полные версии гостевых ОС, сильно шагнули вперед, что в частности, видно на продуктах VMware. Благодаря тому, что современные процессоры поддерживают ряд оптимизаций для работы с виртуальными средами, количество процессов, которые приходится эмулировать, намного уменьшилось. В результате гостевое ядро все чаще обращается напрямую к оборудованию и лишь по требованию запросы проходят через гипервизор.
image
Зачем эмулировать простейшие инструкции? Например, арифметика или перемещение байтов могут выполняться процессором непосредственно. То же самое можно сказать и про функцию ret (возврат результата выполнения процедуры). Благодаря тому, что за данными не нужно каждый раз обращаться к гипервизору, виртуальные среды стали работать быстрее. И сегодня производители процессоров продолжают добавлять виртуальный контекст в свои продукты, делая системы виртуализации еще эффективнее.
image
Контейнерные технологии тоже становились все совершеннее. Например, в нашей собственной версии Virtuozzo Linux была реализована технология ReadyKernel, которая позволяет устанавливать обновления безопасности без перезагрузки сервисов, а значит – делать это в любое время, в том числе, моментально после их анонса. Или другой пример – шифрование дисков контейнеров, чтобы избежать возможности кражи данных, когда «Легкая ВМ» находится в неактивном состоянии. Так что пока средства полной виртуализации становились быстрее, их альтернатива в виде контейнеров ОС становилась более защищенной.

Паравиртуализация

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

Проксирование

image
Другая интересная технология, которая сегодня только набирает обороты и может дать большой толчок в развитии именно «Легких ВМ» — это проксирование. Первыми о данном решении заявили в компании Apporeto. Разработчики предложили следующую идею: они проанализировали базу данных уязвимостей и сделали вывод, что уязвимости в файловых системах и сетевом стеке находят всего 1-2 раза в год. Но в интерфейсной части это происходит намного чаще. В результате было предложено использовать всем клиентам один и тот же слой работы с сетью, файлами и другими «глубокими» сервисами ОС, но при этом вынести в гостевые системы все, что связано с интерфейсами. Таким образом, даже если злоумышленник сможет использовать свежую уязвимость, он не сможет пробраться дальше конкретной «Легкой ВМ». На данный момент для реализации подхода необходимо использовать специальный дистрибутив Linux, но учитывая перспективность подхода, в скором времени мы увидим реализацию этого принципа в большинстве стандартных дистрибутивов.

С прицелом на приложения

Впрочем, победоносное шествие Docker определило еще один очень интересный тренд: многим хочется запускать готовые микросервисы – отдельные приложения. И затевать для этого целую виртуальную машину, вроде бы, не имеет смысла. В этом случае можно предоставить владельцу возможность выбирать, какие функции доступны приложению. И этот подход стал весьма популярен за неимением иных готовых решений. Но он подходит только для тех приложений, которым не нужно много функций. В противном случае приходится чем-то жертвовать, а это – не интересно.
image
Вместо этого стали появляться возможности запустить приложение в гипервизоре без ядра, но снабдить его нужными библиотеками. Такие решения называются Unikernel. Они включают в себя модифицированные системные библиотеки, которые изначально знают, что работают в гипервизоре. Для гипервизора гостевая ОС представляет собой 1 процесс. Так какая разница? Почему не запустить в виде этого 1 процесса наше приложение?

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

Перспективы

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

Автор: Virtuozzo

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js