Виртуализация на уровне ОС - это операционная системная парадигма, в которой ядро допускает существование нескольких изолированных экземпляров пользовательского пространства. Такие экземпляры, называемые контейнерами (LXC, контейнерами Solaris, Docker ), зонами (Solaris контейнеры ), виртуальные частные серверы (OpenVZ ), разделы, виртуальные среды (VE), виртуальные ядра (DragonFly BSD ) или jail (FreeBSD jail или chroot jail ), могут выглядеть как настоящие компьютеры с точки зрения просмотра запущенных в них программ. Компьютерная программа, работающая в обычной операционной системе, может видеть все ресурсы (подключенные устройства, файлы и папки, общие сетевые ресурсы, мощность процессора, поддающиеся количественной оценке аппаратные возможности) этого компьютера. Однако программы, работающие внутри контейнера, могут видеть только содержимое контейнера и устройства, назначенные ему.
В Unix-подобных операционных системах эту функцию можно рассматривать как расширенную реализацию стандартного механизма chroot, который изменяет кажущуюся корневую папку для текущего запущенного процесс и его дочерние элементы. Помимо механизмов изоляции, ядро часто предоставляет функции управления ресурсами, чтобы ограничить влияние действий одного контейнера на другие контейнеры.
Термин контейнер, хотя чаще всего относится к системам виртуализации на уровне ОС, иногда неоднозначно используется для обозначения более полных виртуальных машин сред, работающих в разной степени согласованно с ОС хоста, например Контейнеры Microsoft Hyper-V.
В обычных операционных системах для персональных компьютеров компьютерная программа может видеть (даже если она может не иметь доступа) все ресурсы системы. К ним относятся:
. Операционная система может разрешать или запрещать доступ к таким ресурсы в зависимости от того, какая программа их запрашивает, и учетной записи пользователя , в контексте которой она выполняется. Операционная система может также скрывать эти ресурсы, так что когда компьютерная программа перечисляет их, они не появляются в результатах перечисления. Тем не менее, с точки зрения программирования, компьютерная программа взаимодействовала с этими ресурсами, а операционная система управляла актом взаимодействия.
С помощью виртуализации операционной системы или контейнеризации можно запускать программы в контейнерах, которым выделяются только части этих ресурсов. Программа, ожидающая увидеть весь компьютер после запуска внутри контейнера, может видеть только выделенные ресурсы и полагает, что это все, что доступно. В каждой операционной системе может быть создано несколько контейнеров, для каждой из которых выделяется подмножество ресурсов компьютера. Каждый контейнер может содержать любое количество компьютерных программ. Эти программы могут работать одновременно или по отдельности и даже могут взаимодействовать друг с другом.
Контейнеризация имеет сходство с виртуализацией приложений : в последнем только одна компьютерная программа помещается в изолированный контейнер, а изоляция применяется только к файловой системе.
Виртуализация на уровне операционной системы обычно используется в средах виртуального хостинга, где она полезна для безопасного распределения конечных аппаратных ресурсов среди большого количества взаимно недоверие к пользователям. Системные администраторы также могут использовать его для консолидации серверного оборудования, перемещая службы на отдельных хостах в контейнеры на одном сервере.
Другие типичные сценарии включают разделение нескольких программ на отдельные контейнеры для повышения безопасности, независимости оборудования и дополнительных функций управления ресурсами. Однако улучшенная безопасность, обеспечиваемая использованием механизма chroot, далека от надежной. Реализации виртуализации на уровне операционной системы, поддерживающие динамическую миграцию, также можно использовать для динамической балансировки нагрузки контейнеров между узлами в кластере.
Виртуализация на уровне операционной системы обычно требует меньше накладных расходов, чем полная виртуализация, потому что программы в виртуальных разделах уровня ОС используют обычный системный вызов операционной системы., и не нужно подвергать эмуляции или запускать на промежуточной виртуальной машине, как в случае с полной виртуализацией (например, VMware ESXi, QEMU или Hyper-V ) и паравиртуализация (например, Xen или Linux в пользовательском режиме ). Эта форма виртуализации также не требует аппаратной поддержки для повышения производительности.
Виртуализация на уровне операционной системы не такая гибкая, как другие подходы к виртуализации, поскольку она не может размещать гостевую операционную систему, отличную от хоста, или другое гостевое ядро. Например, для Linux другие дистрибутивы подходят, но другие операционные системы, такие как Windows, не могут быть размещены. Операционные системы, использующие систематику ввода переменных, имеют ограничения в рамках виртуализированной архитектуры. Методы адаптации, включая аналитику ретрансляции облачных серверов, поддерживают виртуальную среду на уровне ОС в этих приложениях.
Solaris частично преодолевает описанные выше ограничения с помощью функции фирменных зон, которая обеспечивает возможность запуска среда внутри контейнера, которая имитирует более старую версию Solaris 8 или 9 на хосте Solaris 10. Фирменные зоны Linux (называемые фирменными зонами «lx») также доступны в системах Solaris на основе x86, обеспечивая полное пользовательское пространство Linux и поддержку выполнения приложений Linux; Кроме того, Solaris предоставляет утилиты, необходимые для установки Red Hat Enterprise Linux 3.x или CentOS 3.x дистрибутивов Linux внутри зон «lx». Однако в 2010 году фирменные зоны Linux были удалены из Solaris; в 2014 году они были повторно представлены в Illumos, ответвлении Solaris с открытым исходным кодом, поддерживающем 32-битные ядра Linux.
Некоторые реализации обеспечивают файловый уровень механизмы копирования при записи (CoW). (Чаще всего стандартная файловая система используется совместно между разделами, и те разделы, которые изменяют файлы, автоматически создают свои собственные копии.) Это легче выполнять резервное копирование, более эффективно использовать пространство и проще кэшировать, чем копирование на уровне блоков. -записать схемы, общие для виртуализаторов всей системы. Однако виртуализаторы всей системы могут работать с неродными файловыми системами и создавать и откатывать моментальные снимки всего состояния системы.
Механизм | Операционная система | Лицензия | Активно разрабатывается с | Возможности | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Изоляция файловой системы. | Копирование при записи | Дисковые квоты | Ограничение скорости ввода-вывода | Ограничение памяти | Сетевая изоляция | Вложенная виртуализация | Контрольные точки раздела и в реальном времени миграция | Изоляция привилегий root | |||||
chroot | Большинство UNIX-подобных операционных систем | Зависит от операционной системы | 1982 | Частично | Нет | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет |
Docker | Linux, FreeBSD, Windows x64 (Pro, Enterprise и Education) macOS | Лицензия Apache 2.0 | 2013 | Да | Да | Не напрямую | Да (с версии 1.10) | Да | Да | Да | Да | Только в экспериментальном режиме с CRIU [1] | Да (начиная с версии 1.10) |
Linux-VServer. (контекст безопасности) | Linux, Wi ndows Server 2016 | GNU GPLv2 | 2001 | Да | Да | Да | Да | Да | Да | Частично | ? | Нет | Частично |
lmctfy | Linux | Лицензия Apache 2.0 | 2013–2015 гг. | Да | Да | Да | Да | Да | Да | Частично | ? | Нет | Частично |
LXC | Linux | GNU GPLv2 | 2008 | Да | Да | Частично | Частично | Да | Да | Да | Да | Да | Да |
Singularity | Linux | Лицензия BSD | 2015 | Да | Да | Да | Нет | Нет | Нет | Нет | Нет | Нет | Да |
OpenVZ | Linux | GNU GPLv2 | 2005 | Да | Да | Да | Да | Да | Да | Да | Частично | Да | Да |
Virtuozzo | Linux, Windows | Пробная версия | 2000 | Да | Да | Да | Да | Да | Да | Да | Частично | Да | Да |
Сол Контейнеры aris (Зоны) | illumos (OpenSolaris ),. Solaris | CDDL,. Собственные | 2004 | Да | Да (ZFS) | Да | Частично | Да | Да | Да | Частично | Частично | Да |
FreeBSD jail | FreeBSD, DragonFly BSD | Лицензия BSD | 2000 | Да | Да (ZFS) | Да | Да | Да | Да | Да | Да | Частично | Да |
vkernel | DragonFly BSD | Лицензия BSD | 2006 | Да | Да | Н / Д | ? | Да | Да | Да | ? | ? | Да |
sysjail | OpenBSD, NetBSD | Лицензия BSD | 2006–2009 | Да | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет | ? |
WPARs | AIX | Коммерческое проприетарное программное обеспечение | 2007 | Да | Нет | Да | Да | Да | Да | Да | Нет | Да | ? |
Виртуальные учетные записи iCore | Windows XP | Бесплатное ПО | 2008 | Да | N o | Да | Нет | Нет | Нет | Нет | ? | Нет | ? |
Sandboxie | Windows | GNU GPLv3 | 2004 | Да | Да | Частично | Нет | Нет | Нет | Частично | Нет | Нет | Да |
systemd-nspawn | Linux | GNU LGPLv2.1 + | 2010 | Да | Да | Да | Да | Да | Да | Да | ? | ? | Да |
Turbo | Windows | Freemium | 2012 | Да | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет | Да |
RKT | Linux | Apache Лицензия 2.0 | 2014 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |