Виртуализация на уровне ОС — это парадигма виртуализации операционной системы (ОС) , в которой ядро допускает существование нескольких изолированных экземпляров пользовательского пространства , включая контейнеры ( LXC , контейнеры Solaris , AIX WPAR , контейнеры HP-UX SRP, Docker , Podman ), зоны ( контейнеры Solaris ), виртуальные частные серверы ( OpenVZ ), разделы , виртуальные среды ( VE ), виртуальные ядра ( DragonFly BSD ) и тюрьмы ( FreeBSD jail и chroot ). [1] Такие экземпляры могут выглядеть как реальные компьютеры с точки зрения программ, работающих в них. Компьютерная программа, работающая в обычной операционной системе, может видеть все ресурсы (подключенные устройства, файлы и папки, сетевые ресурсы , мощность ЦП, количественные аппаратные возможности) этого компьютера. Программы, работающие внутри контейнера, могут видеть только содержимое контейнера и устройства, назначенные контейнеру.
В операционных системах типа Unix эту функцию можно рассматривать как расширенную реализацию стандартного механизма chroot , который изменяет видимую корневую папку для текущего запущенного процесса и его потомков. В дополнение к механизмам изоляции ядро часто предоставляет функции управления ресурсами для ограничения влияния действий одного контейнера на другие контейнеры. Все контейнеры Linux основаны на механизмах виртуализации, изоляции и управления ресурсами, предоставляемых ядром Linux , в частности, пространствах имен Linux и cgroups . [2]
Хотя слово « контейнер» чаще всего относится к виртуализации на уровне ОС, иногда его используют для обозначения более полных виртуальных машин, работающих в различной степени согласованно с хостовой ОС, [ требуется ссылка ] например, контейнеров Hyper-V от Microsoft . [ требуется ссылка ] Для обзора виртуализации с 1960 года см. Хронология технологий виртуализации .
В обычных операционных системах для персональных компьютеров компьютерная программа может видеть (даже если она не может получить к ним доступ) все ресурсы системы. Они включают в себя:
Операционная система может разрешать или запрещать доступ к таким ресурсам на основе того, какая программа их запрашивает, и учетной записи пользователя в контексте, в котором она работает. Операционная система также может скрывать эти ресурсы, так что когда компьютерная программа перечисляет их, они не появляются в результатах перечисления. Тем не менее, с точки зрения программирования, компьютерная программа взаимодействовала с этими ресурсами, и операционная система управляла актом взаимодействия.
С помощью виртуализации операционной системы или контейнеризации можно запускать программы в контейнерах, которым выделяются только части этих ресурсов. Программа, ожидающая увидеть весь компьютер, будучи запущенной внутри контейнера, может видеть только выделенные ресурсы и считает, что это все, что доступно. В каждой операционной системе можно создать несколько контейнеров, каждому из которых выделяется подмножество ресурсов компьютера. Каждый контейнер может содержать любое количество компьютерных программ. Эти программы могут работать одновременно или по отдельности и даже могут взаимодействовать друг с другом.
Контейнеризация имеет сходство с виртуализацией приложений : в последнем случае в изолированный контейнер помещается только одна компьютерная программа, а изоляция применяется только к файловой системе.
Виртуализация на уровне операционной системы обычно используется в средах виртуального хостинга , где она полезна для безопасного распределения конечных аппаратных ресурсов среди большого числа взаимно недоверяющих пользователей. Системные администраторы также могут использовать ее для консолидации серверного оборудования путем перемещения служб на отдельных хостах в контейнеры на одном сервере.
Другие типичные сценарии включают разделение нескольких программ на отдельные контейнеры для повышения безопасности, аппаратной независимости и дополнительных функций управления ресурсами. [3] Однако улучшенная безопасность, обеспечиваемая использованием механизма chroot, не идеальна. [4] Реализации виртуализации на уровне операционной системы, способные к живой миграции, также могут использоваться для динамической балансировки нагрузки контейнеров между узлами в кластере.
Виртуализация на уровне операционной системы обычно накладывает меньшие накладные расходы, чем полная виртуализация , поскольку программы в виртуальных разделах на уровне ОС используют обычный интерфейс системных вызовов операционной системы и не нуждаются в эмуляции или запуске на промежуточной виртуальной машине , как в случае с полной виртуализацией (например, VMware ESXi , QEMU или Hyper-V ) и паравиртуализацией (например, Xen или User-mode Linux ). Эта форма виртуализации также не требует аппаратной поддержки для эффективной производительности.
Виртуализация на уровне операционной системы не так гибка, как другие подходы к виртуализации, поскольку она не может размещать гостевую операционную систему, отличную от хостовой, или другое гостевое ядро. Например, с Linux , другие дистрибутивы хороши, но другие операционные системы, такие как Windows, не могут быть размещены. Операционные системы, использующие переменные входные систематики, подвержены ограничениям в рамках виртуализированной архитектуры. Методы адаптации, включая аналитику ретрансляции облачного сервера, поддерживают виртуальную среду на уровне ОС в этих приложениях. [5]
Solaris частично преодолевает описанное выше ограничение с помощью функции фирменных зон , которая обеспечивает возможность запуска среды в контейнере, эмулирующей старую версию Solaris 8 или 9 на хосте Solaris 10. Фирменные зоны Linux (называемые фирменными зонами «lx») также доступны в системах Solaris на базе x86 , предоставляя полное пользовательское пространство Linux и поддержку для выполнения приложений Linux; кроме того, Solaris предоставляет утилиты, необходимые для установки дистрибутивов Red Hat Enterprise Linux 3.x или CentOS 3.x Linux внутри зон «lx». [6] [7] Однако в 2010 году фирменные зоны Linux были удалены из Solaris; в 2014 году они были вновь введены в Illumos , который является ответвлением Solaris с открытым исходным кодом , поддерживающим 32-битные ядра Linux . [8]
Некоторые реализации предоставляют механизмы копирования при записи (CoW) на уровне файлов . (Чаще всего стандартная файловая система разделяется между разделами, и те разделы, которые изменяют файлы, автоматически создают свои собственные копии.) Это проще для резервного копирования, более эффективно с точки зрения пространства и проще для кэширования, чем схемы копирования при записи на уровне блоков, распространенные в виртуализаторах всей системы. Однако виртуализаторы всей системы могут работать с неродными файловыми системами и создавать и откатывать моментальные снимки состояния всей системы.
Механизм | Операционная система | Лицензия | Активно разрабатывается с или между | Функции | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Изоляция файловой системы | Копировать при записи | Дисковые квоты | Ограничение скорости ввода-вывода | Ограничения памяти | квоты ЦП | Сетевая изоляция | Вложенная виртуализация | Контрольные точки разделов и живая миграция | Изоляция привилегий root | ||||
chroot | Большинство UNIX-подобных операционных систем | Зависит от операционной системы | 1982 | Частичный [а] | Нет | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет |
Докер | Linux , [10] Windows x64 [11] macOS [12] | Лицензия Apache 2.0 | 2013 | Да | Да | Не напрямую | Да (с 1.10) | Да | Да | Да | Да | Только в экспериментальном режиме с CRIU [1] | Да (с 1.10) |
Linux-VServer (контекст безопасности) | Linux , Windows Server 2016 | GNU GPLv2 | 2001 | Да | Да | Да | Да [б] | Да | Да | Частичный [c] | ? | Нет | Частичный [d] |
lmctfy | линукс | Лицензия Apache 2.0 | 2013–2015 | Да | Да | Да | Да [б] | Да | Да | Частичный [c] | ? | Нет | Частичный [d] |
LXC | линукс | GNU GPLv2 | 2008 | Да [14] | Да | Частичный [е] | Частичный [ж] | Да | Да | Да | Да | Да | Да [14] |
Сингулярность | линукс | Лицензия BSD | 2015 [15] | Да [16] | Да | Да | Нет | Нет | Нет | Нет | Нет | Нет | Да [17] |
OpenVZ | линукс | GNU GPLv2 | 2005 | Да | Да [18] | Да | Да [г] | Да | Да | Да [ч] | Частичный [я] | Да | Да [ж] |
Виртуоз | Linux , Windows | Пробная версия | 2000 [22] | Да | Да | Да | Да [к] | Да | Да | Да [ч] | Частичный [л] | Да | Да |
Контейнеры Solaris (Зоны) | иллюзии ( OpenSolaris ), Солярис | CDDL , фирменный | 2004 | Да | Да (ЗФС) | Да | Частичный [м] | Да | Да | Да [н] [25] [26] | Частичный [о] | Частичный [п] [к] | Да [р] |
FreeBSD тюрьма | FreeBSD , DragonFly BSD | Лицензия BSD | 2000 [28] | Да | Да (ЗФС) | Да [с] | Да | Да [29] | Да | Да [30] | Да | Частичный [31] [32] | Да [33] |
vkernel | DragonFly BSD | Лицензия BSD | 2006 [34] | Да [35] | Да [35] | — | ? | Да [36] | Да [36] | Да [37] | ? | ? | Да |
sysjail | OpenBSD , NetBSD | Лицензия BSD | 2006–2009 | Да | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет | ? |
WPAR-ы | ЭКС | Коммерческое фирменное программное обеспечение | 2007 | Да | Нет | Да | Да | Да | Да | Да [т] | Нет | Да [39] | ? |
Виртуальные счета iCore | Windows XP | Бесплатное ПО | 2008 | Да | Нет | Да | Нет | Нет | Нет | Нет | ? | Нет | ? |
Песочница | Окна | GNU GPLv3 | 2004 | Да | Да | Частичный | Нет | Нет | Нет | Частичный | Нет | Нет | Да |
systemd-nspawn | линукс | GNU LGPLv2.1+ | 2010 | Да | Да | Да [40] [41] | Да [40] [41] | Да [40] [41] | Да [40] [41] | Да | ? | ? | Да |
Турбо | Окна | Freemium | 2012 | Да | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет | Да |
ркт ( ракета ) | линукс | Лицензия Apache 2.0 | 2014 [42] –2018 | Да | Да | Да | Да | Да | Да | Да | ? | ? | Да |
Контейнеры Linux, не перечисленные выше, включают:
Существует множество других систем виртуализации на уровне ОС, таких как: Linux OpenVZ, Linux-VServer, FreeBSD Jails, AIX Workload Partitions (WPARs), HP-UX Containers (SRP), Solaris Containers и другие.
теперь поддерживает пользовательские пространства имен. [...] LXC больше не работает как root, поэтому даже если злоумышленнику удастся покинуть контейнер, он обнаружит, что у него есть привилегии обычного пользователя на хосте.
Jails были впервые представлены в FreeBSD 4.0 в 2000 году.
обрабатывает образ диска как копирование при записи.