Виртуализация на уровне ОС - OS-level virtualization

Виртуализация на уровне ОС является Операционная система парадигма, в которой ядро допускает существование нескольких изолированных пространство пользователя экземпляры. Такие экземпляры, называемые контейнеры (LXC, Контейнеры Solaris, Докер ), Зоны (Контейнеры Solaris ), виртуальные частные серверы (OpenVZ ), перегородки, виртуальные среды (VEs), виртуальные ядра (DragonFly BSD ), или тюрьмы (FreeBSD тюрьма или chroot jail ),[1] могут выглядеть как настоящие компьютеры с точки зрения запущенных на них программ. Компьютерная программа, работающая в обычной операционной системе, может видеть все ресурсы (подключенные устройства, файлы и папки, сетевые ресурсы, Мощность процессора, поддающиеся количественной оценке аппаратные возможности) этого компьютера. Однако программы, работающие внутри контейнера, могут видеть только содержимое контейнера и устройства, назначенные ему.

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

Период, термин контейнер, хотя чаще всего относится к системам виртуализации на уровне ОС, иногда неоднозначно используется для обозначения более полного виртуальная машина среды, работающие в различной степени согласованно с ОС хоста, например Microsoft Hyper-V контейнеры.

Операция

В обычных операционных системах для персональных компьютеров компьютерная программа может видеть (даже если она может не иметь доступа) все ресурсы системы. Они включают:

  1. Возможности оборудования, которые можно использовать, например ЦПУ и сетевое подключение
  2. Данные, которые можно читать или записывать, например файлы, папки и сетевые ресурсы
  3. Связанный периферийные устройства он может взаимодействовать, например ВЭБ-камера, принтер, сканер или факс

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

С помощью виртуализации операционной системы или контейнеризации можно запускать программы в контейнерах, которым выделяются только части этих ресурсов. Программа, ожидающая увидеть весь компьютер после запуска внутри контейнера, может видеть только выделенные ресурсы и полагает, что это все, что доступно. В каждой операционной системе может быть создано несколько контейнеров, для каждой из которых выделяется подмножество ресурсов компьютера. Каждый контейнер может содержать любое количество компьютерных программ. Эти программы могут работать одновременно или по отдельности и даже могут взаимодействовать друг с другом.

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

Использует

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

Другие типичные сценарии включают разделение нескольких программ на отдельные контейнеры для повышения безопасности, независимости оборудования и дополнительных функций управления ресурсами. Однако улучшенная безопасность, обеспечиваемая использованием механизма chroot, далека от надежной.[2] Реализации виртуализации на уровне операционной системы, способные живая миграция также может использоваться для динамической балансировки нагрузки контейнеров между узлами в кластере.

Накладные расходы

Виртуализация на уровне операционной системы обычно требует меньше накладных расходов, чем полная виртуализация потому что программы в виртуальных разделах уровня ОС используют обычные системный вызов интерфейс и не нужно подвергать подражание или работать в промежуточном виртуальная машина, как и в случае с полной виртуализацией (например, VMware ESXi, QEMU, или Hyper-V ) и паравиртуализация (такие как Xen или Пользовательский режим Linux ). Эта форма виртуализации также не требует аппаратной поддержки для повышения производительности.

Гибкость

Виртуализация на уровне операционной системы не такая гибкая, как другие подходы к виртуализации, поскольку она не может размещать гостевую операционную систему, отличную от хоста, или другое гостевое ядро. Например, с Linux, разные дистрибутивы подходят, но другие операционные системы, такие как Windows, не могут быть размещены. Операционные системы, использующие систематику ввода переменных, имеют ограничения в рамках виртуализированной архитектуры. Методы адаптации, включая аналитику ретрансляции облачных серверов, поддерживают виртуальную среду на уровне ОС в этих приложениях.[3]

Солярис частично преодолевает ограничение, описанное выше, с его брендовые зоны функция, которая дает возможность запускать среду в контейнере, которая имитирует более старую Solaris 8 или 9 версии на хосте Solaris 10. Фирменные зоны Linux (называемые фирменными зонами "lx") также доступны на x86 -системы Solaris, обеспечивающие полный Linux пространство пользователя и поддержка выполнения приложений Linux; кроме того, Solaris предоставляет утилиты, необходимые для установки Red Hat Enterprise Linux 3.x или CentOS 3.x Дистрибутивы Linux внутри зон "lx".[4][5] Однако в 2010 году фирменные зоны Linux были удалены из Solaris; в 2014 году они были повторно представлены в Иллюмос, это форк Solaris с открытым исходным кодом, поддерживающий 32-разрядную версию Ядра Linux.[6]

Место хранения

Некоторые реализации предоставляют файловый уровень копирование при записи (CoW) механизмы. (Чаще всего стандартная файловая система используется совместно между разделами, и те разделы, которые изменяют файлы, автоматически создают свои собственные копии.) Это легче выполнять резервное копирование, более эффективно использовать пространство и проще кэшировать, чем копирование на уровне блоков. -записать схемы, общие для виртуализаторов всей системы. Однако виртуализаторы всей системы могут работать с неродными файловыми системами и создавать и откатывать моментальные снимки всего состояния системы.

Реализации

МеханизмОперационная системаЛицензияАктивно развивается с или междуособенности
Изоляция файловой системыКопирование при записиДисковые квотыОграничение скорости ввода / выводаОграничения памятиКвоты ЦПСетевая изоляцияВложенная виртуализацияКонтрольные точки раздела и живая миграцияИзоляция привилегий root
chrootНаиболее UNIX-подобный операционные системыЗависит от операционной системы1982Частичное[а]НетНетНетНетНетНетдаНетНет
ДокерLinux,[8] FreeBSD,[9] Windows x64 (Pro, Enterprise и Education)[10] macOS [11]Лицензия Apache 2.02013дадаНе прямода (с 1.10)дадададаТолько в экспериментальном режиме с CRIU [1]да (с 1.10)
Linux-VServer
(контекст безопасности)
Linux, Windows Server 2016GNU GPLv22001дададада[b]дадаЧастичное[c]?НетЧастичное[d]
lmctfyLinuxЛицензия Apache 2.02013–2015дададада[b]дадаЧастичное[c]?НетЧастичное[d]
LXCLinuxGNU GPLv22008да[13]даЧастичное[e]Частичное[f]дададададада[13]
СингулярностьLinuxЛицензия BSD2015[14]да[15]дадаНетНетНетНетНетНетда[16]
OpenVZLinuxGNU GPLv22005дада [17]дада[г]дадада[час]Частичное[я]дада[j]
ВиртуоззоLinux, WindowsПробная версия2000[21]дададада[k]дадада[час]Частичное[l]дада
Контейнеры Solaris (Зоны)иллюзия (OpenSolaris ),
Солярис
CDDL,
Проприетарный
2004даДа (ZFS)даЧастичное[м]дадада[n][24][25]Частичное[o]Частичное[п][q]да[р]
FreeBSD тюрьмаFreeBSD, DragonFly BSDЛицензия BSD2000[27]даДа (ZFS)да[s]дада[28]дада[29]даЧастичное[30][31]да[32]
vkernelDragonFly BSDЛицензия BSD2006[33]да[34]да[34]Нет данных?да[35]да[35]да[36]??да
sysjailOpenBSD, NetBSDЛицензия BSD2006–2009даНетНетНетНетНетдаНетНет?
WPARAIXКоммерческий проприетарное программное обеспечение2007даНетдадададада[т]Нетда[38]?
Виртуальные учетные записи iCoreWindows XPБесплатное ПО2008даНетдаНетНетНетНет?Нет?
ПесочницаWindowsGNU GPLv32004дадаЧастичноеНетНетНетЧастичноеНетНетда
systemd-nspawnLinuxGNU LGPLv2.1 +2010дадада[39][40]да[39][40]да[39][40]да[39][40]да??да
ТурбоWindowsFreemium2012даНетНетНетНетНетдаНетНетда
РКТLinuxЛицензия Apache 2.02014[41]??????????

Смотрите также

Заметки

  1. ^ Пользователь root может легко выйти из chroot. Chroot никогда не предполагалось использовать в качестве механизма безопасности.[7]
  2. ^ а б Используя CFQ планировщик, для каждого гостя отдельная очередь.
  3. ^ а б Сеть основана на изоляции, а не на виртуализации.
  4. ^ а б В контейнере безопасными считаются 14 пользовательских возможностей. Остальное не может быть предоставлено процессам в этом контейнере, не позволяя этому процессу потенциально мешать вещам за пределами этого контейнера.[12]
  5. ^ Дисковые квоты на контейнер возможны при использовании отдельных разделов для каждого контейнера с помощью LVM, или когда базовая файловая система хоста - btrfs, и в этом случае автоматически используются подтомы btrfs.
  6. ^ Ограничение скорости ввода-вывода поддерживается при использовании Btrfs.
  7. ^ Доступно, начиная с ядра Linux 2.6.18-028stable021. Реализация основана на планировщике дискового ввода-вывода CFQ, но это двухуровневая схема, поэтому приоритет ввода-вывода определяется не для каждого процесса, а для каждого контейнера.[18]
  8. ^ а б Каждый контейнер может иметь свои собственные IP-адреса, правила брандмауэра, таблицы маршрутизации и т. Д. Возможны три различных сетевых схемы: на основе маршрутов, на основе моста и с назначением реального сетевого устройства (NIC ) в контейнер.
  9. ^ Контейнеры Docker могут работать внутри контейнеров OpenVZ.[19]
  10. ^ Каждый контейнер может иметь root-доступ, не затрагивая другие контейнеры.[20]
  11. ^ Доступно с версии 4.0, январь 2008 г.
  12. ^ Контейнеры Docker могут работать внутри контейнеров Virtuozzo.[22]
  13. ^ Да с иллюминами[23]
  14. ^ Увидеть Виртуализация сети OpenSolaris и управление ресурсами Больше подробностей.
  15. ^ Только когда верхним уровнем является зона KVM (illumos) или зона kz (Oracle).
  16. ^ Начиная с бета-версии Solaris 11.3, зоны ядра Solaris могут использовать динамическую миграцию.
  17. ^ Реализована холодная миграция (выключение-перемещение-перезапуск).
  18. ^ Неглобальные зоны ограничены, поэтому они не могут влиять на другие зоны посредством подхода, ограничивающего возможности. Глобальная зона может управлять неглобальными зонами.[26]
  19. ^ Установите флажок "allow.quotas" и раздел "Jails и файловые системы" на Справочная страница FreeBSD jail для подробностей.
  20. ^ Доступно с TL 02.[37]

использованная литература

  1. ^ Хогг, Скотт (26 мая 2014 г.). «Программные контейнеры: используются чаще, чем можно себе представить». Сетевой мир. Network World, Inc. Получено 2015-07-09. Существует множество других систем виртуализации на уровне ОС, таких как Linux OpenVZ, Linux-VServer, FreeBSD Jails, разделы рабочей нагрузки AIX (WPAR), контейнеры HP-UX (SRP), контейнеры Solaris и другие.
  2. ^ Корф, Янек; Надежда, Пако; Поттер, Брюс (2005). Освоение безопасности FreeBSD и OpenBSD. Серия О'Рейли. O'Reilly Media, Inc. стр. 59. ISBN  0596006268.
  3. ^ Хуанг, Д. (2015). «Опыт использования виртуализации на уровне ОС для блочного ввода-вывода». Материалы 10-го семинара по параллельному хранению данных.
  4. ^ «Руководство системного администратора: Oracle Solaris Containers-Resource Management и Oracle Solaris Zones, Глава 16: Введение в зоны Solaris». Корпорация Oracle. 2010. Получено 2014-09-02.
  5. ^ «Руководство системного администратора: Oracle Solaris Containers-Resource Management и Oracle Solaris Zones, Глава 31: О типовых зонах и типизированной зоне Linux». Корпорация Oracle. 2010. Получено 2014-09-02.
  6. ^ Брайан Кэнтрилл (28 сентября 2014 г.). «Мечта жива! Запуск контейнеров Linux на ядре illumos». slideshare.net. Получено 2014-10-10.
  7. ^ «3.5. Ограничение среды вашей программы». freebsd.org.
  8. ^ «Docker отказывается от LXC в качестве среды выполнения по умолчанию». InfoQ.
  9. ^ «Докер приходит во FreeBSD». FreeBSDNews.com. 9 июля 2015 года.
  10. ^ «Начните работу с Docker для Windows». Докер.
  11. ^ «Начните работу с Docker Desktop для Mac». Документация Docker. 6 декабря 2019.
  12. ^ «Бумага - Linux-VServer». linux-vserver.org.
  13. ^ а б Грабер, Стефан (1 января 2014 г.). «LXC 1.0: Функции безопасности [6/10]». Получено 12 февраля 2014. LXC теперь поддерживает пространства имен пользователей. [...] LXC больше не работает с правами root, поэтому, даже если злоумышленнику удастся покинуть контейнер, он обнаружит, что имеет привилегии обычного пользователя на хосте.
  14. ^ "Sylabs переносит контейнеры Singularity на коммерческие сайты суперкомпьютеров HPC | TOP500". www.top500.org.
  15. ^ «Перенаправление…». www.sylabs.io.
  16. ^ Курцер, Грегори М .; Сочат, Ванесса; Бауэр, Майкл В. (11 мая 2017 г.). «Сингулярность: научные контейнеры для мобильности вычислений». PLOS ONE. 12 (5): e0177459. Дои:10.1371 / journal.pone.0177459. ЧВК  5426675. PMID  28494014 - через журналы PLoS.
  17. ^ Бронников, Сергей. «Сравнение на вики-странице OpenVZ». OpenVZ вики. OpenVZ. Получено 28 декабря 2018.
  18. ^ «Приоритеты ввода-вывода для контейнеров». OpenVZ Virtuozzo Containers вики.
  19. ^ «Докер внутри CT».
  20. ^ "Контейнер". OpenVZ Virtuozzo Containers вики.
  21. ^ «Первоначальный публичный пререлиз Virtuozzo (в то время он назывался завершенным ASP)».
  22. ^ «Parallels Virtuozzo теперь обеспечивает встроенную поддержку Docker».
  23. ^ Пиевский, Билл. "Наш дроссель ввода-вывода ZFS".
  24. ^ Виртуализация сети и управление ресурсами (арбалет): часто задаваемые вопросы В архиве 2008-06-01 на Wayback Machine
  25. ^ «Управление виртуализацией сети и сетевыми ресурсами в Oracle® Solaris 11.2». docs.oracle.com.
  26. ^ Администрирование Oracle Solaris 11.1, Oracle Solaris Zones, Oracle Solaris 10 Zones and Resource Management E29024.pdf, стр. 356–360. Имеется в наличии в архиве.
  27. ^ «Сдерживайте энтузиазм - Часть вторая: тюрьмы, зоны, OpenVZ и LXC». Тюрьмы были впервые представлены во FreeBSD 4.0 в 2000 году.
  28. ^ "Hierarchical_Resource_Limits - FreeBSD Wiki". Wiki.freebsd.org. 2012-10-27. Получено 2014-01-15.
  29. ^ «Реализация клонируемого сетевого стека в ядре FreeBSD» (PDF). usenix.org. 13 июня 2003 г.
  30. ^ «VPS для FreeBSD». Получено 2016-02-20.
  31. ^ "[Объявление] VPS // Виртуализация ОС // альфа-версия". Получено 2016-02-20.
  32. ^ «3.5. Ограничение среды вашей программы». Freebsd.org. Получено 2014-01-15.
  33. ^ Мэтью Диллон (2006). "sys / vkernel.h". Перекрестная ссылка BSD. DragonFly BSD.
  34. ^ а б "vkd (4) - Диск виртуального ядра". DragonFly BSD. обрабатывает образ диска как копирование при записи.
  35. ^ а б Саша Вильднер (2007-01-08). "vkernel, vcd, vkd, vke - архитектура виртуального ядра". Руководство по разной информации DragonFly. DragonFly BSD. Сложить резюме.
  36. ^ "vke (4) - Виртуальное ядро ​​Ethernet". DragonFly BSD.
  37. ^ "Информация о пакете исправлений IBM для: Изоляция сети WPAR - США". ibm.com.
  38. ^ «Мобильность приложений в реальном времени в AIX 6.1». www.ibm.com. 3 июня 2008 г.
  39. ^ а б c d "systemd-nspawn". www.freedesktop.org.
  40. ^ а б c d «2.3. Изменение групп управления Red Hat Enterprise Linux 7». Портал для клиентов Red Hat.
  41. ^ Полви, Алекс. "CoreOS создает среду выполнения контейнера, rkt". Блог CoreOS. Получено 12 марта 2019.

внешние ссылки