Виртуализация на уровне ОС
Эта статья нуждается в дополнительных цитатах для проверки . ( ноябрь 2020 г. ) |
Виртуализация на уровне ОС — это операционной системы (ОС) парадигма виртуализации , в которой ядро допускает существование нескольких изолированных экземпляров пользовательского пространства , называемых контейнерами ( LXC , контейнеры Solaris , AIX WPAR , контейнеры HP-UX SRP, Docker , Podman ), зонами. ( контейнеры Solaris ), виртуальные частные серверы ( OpenVZ ), разделы , виртуальные среды (VE), виртуальные ядра ( DragonFly BSD ) или тюрьмы ( тюрьма FreeBSD или клетка chroot ). [1] Такие экземпляры могут выглядеть как настоящие компьютеры с точки зрения работающих на них программ. Компьютерная программа, работающая в обычной операционной системе, может видеть все ресурсы (подключенные устройства, файлы и папки, общие сетевые ресурсы , мощность процессора, измеримые аппаратные возможности) этого компьютера. Однако программы, работающие внутри контейнера, могут видеть только его содержимое и устройства, назначенные ему.
В Unix-подобных операционных системах эту функцию можно рассматривать как расширенную реализацию стандартного механизма chroot , который изменяет видимую корневую папку для текущего запущенного процесса и его дочерних элементов. Помимо механизмов изоляции, ядро часто предоставляет функции управления ресурсами , позволяющие ограничить влияние действий одного контейнера на другие контейнеры. Все контейнеры Linux основаны на механизмах виртуализации, изоляции и управления ресурсами, предоставляемых ядром Linux , в частности, Linux пространствами имен и контрольными группами . [2]
Термин « контейнер» , чаще всего относящийся к системам виртуализации на уровне ОС, иногда неоднозначно используется для обозначения более полных сред виртуальных машин, работающих в различной степени согласованности с хостовой ОС, например, контейнеров Microsoft Hyper-V . Более исторический обзор виртуализации в целом с 1960 года можно найти в разделе «Хронология развития виртуализации» .
Операция
[ редактировать ]В обычных операционных системах для персональных компьютеров компьютерная программа может видеть (даже если у нее нет доступа) все ресурсы системы. Они включают в себя:
- Возможности аппаратного обеспечения, такие как ЦП и сетевое соединение.
- Данные, которые можно читать или записывать, например файлы, папки и общие сетевые ресурсы.
- Подключенные периферийные устройства , с которыми он может взаимодействовать, например веб-камера , принтер , сканер или факс.
Операционная система может разрешить или запретить доступ к таким ресурсам в зависимости от того, какая программа их запрашивает, а также учетной записи пользователя в контексте, в котором она работает. Операционная система также может скрывать эти ресурсы, чтобы, когда компьютерная программа их перечисляет, они не появлялись в результатах перечисления. Тем не менее, с точки зрения программирования, компьютерная программа взаимодействовала с этими ресурсами, а операционная система управляла процессом взаимодействия.
С помощью виртуализации операционной системы или контейнеризации можно запускать программы внутри контейнеров, которым выделяется только часть этих ресурсов. Программа, ожидающая увидеть весь компьютер, будучи запущенной внутри контейнера, может видеть только выделенные ресурсы и считает, что это все, что доступно. В каждой операционной системе можно создать несколько контейнеров, каждому из которых выделяется подмножество ресурсов компьютера. Каждый контейнер может содержать любое количество компьютерных программ. Эти программы могут работать одновременно или по отдельности и даже могут взаимодействовать друг с другом.
Контейнеризация имеет сходство с виртуализацией приложений : в последней только одна компьютерная программа помещается в изолированный контейнер, и изоляция применяется только к файловой системе.
Использование
[ редактировать ]Виртуализация на уровне операционной системы обычно используется в средах виртуального хостинга , где она полезна для безопасного распределения конечных аппаратных ресурсов между большим количеством взаимно не доверяющих пользователей. Системные администраторы также могут использовать его для консолидации серверного оборудования путем перемещения служб на отдельных хостах в контейнеры на одном сервере.
Другие типичные сценарии включают разделение нескольких программ на отдельные контейнеры для повышения безопасности, независимости от оборудования и дополнительных функций управления ресурсами. [3] Однако улучшенная безопасность, обеспечиваемая использованием механизма chroot, не идеальна. [4] Реализации виртуализации на уровне операционной системы, поддерживающие живую миграцию, также могут использоваться для динамической балансировки нагрузки контейнеров между узлами в кластере.
Накладные расходы
[ редактировать ]Виртуализация на уровне операционной системы обычно требует меньших накладных расходов, чем полная виртуализация , поскольку программы в виртуальных разделах уровня ОС используют обычный интерфейс системных вызовов операционной системы и не требуют эмуляции или запуска на промежуточной виртуальной машине , как это происходит при виртуализации на уровне операционной системы. случай с полной виртуализацией (например, VMware ESXi , QEMU или Hyper-V ) и паравиртуализацией (например, Xen или 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) на уровне файла Некоторые реализации предоставляют механизмы копирования при записи . (Чаще всего стандартная файловая система используется совместно между разделами, и те разделы, которые изменяют файлы, автоматически создают свои собственные копии.) Это легче создавать резервные копии, более эффективно использует пространство и проще кэшировать, чем копирование на уровне блоков. -писать схемы, общие для виртуализаторов всей системы. Однако виртуализаторы всей системы могут работать с неродными файловыми системами, создавать и откатывать снимки состояния всей системы.
Реализации
[ редактировать ]Механизм | Операционная система | Лицензия | Активно разрабатывается с или между | Функции | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Изоляция файловой системы | Копировать при записи | Дисковые квоты | Ограничение скорости ввода-вывода | Ограничения памяти | Квоты процессора | Сетевая изоляция | Вложенная виртуализация | Контрольная точка раздела и живая миграция | Изоляция корневых привилегий | ||||
chroot | Большинство UNIX-подобных операционных систем | Зависит от операционной системы | 1982 | Частичный [а] | Нет | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет |
Докер | Линукс , [10] Windows х64 [11] macOS [12] | Лицензия Apache 2.0 | 2013 | Да | Да | Не напрямую | Да (с версии 1.10) | Да | Да | Да | Да | Только в экспериментальном режиме с ЦНИИУ [1] | Да (с версии 1.10) |
Linux-VServer (контекст безопасности) | Линукс , Виндовс Сервер 2016. | GNU GPLv2 | 2001 | Да | Да | Да | Да [б] | Да | Да | Частичный [с] | ? | Нет | Частичный [д] |
lmctfy | Линукс | Лицензия Apache 2.0 | 2013–2015 | Да | Да | Да | Да [б] | Да | Да | Частичный [с] | ? | Нет | Частичный [д] |
ЛХС | Линукс | GNU GPLv2 | 2008 | Да [14] | Да | Частичный [и] | Частичный [ф] | Да | Да | Да | Да | Да | Да [14] |
Сингулярность | Линукс | Лицензия БСД | 2015 [15] | Да [16] | Да | Да | Нет | Нет | Нет | Нет | Нет | Нет | Да [17] |
ОпенВЗ | Линукс | GNU GPLv2 | 2005 | Да | Да [18] | Да | Да [г] | Да | Да | Да [час] | Частичный [я] | Да | Да [Дж] |
Виртуозо | Линукс , Винда | Пробная версия | 2000 [22] | Да | Да | Да | Да [к] | Да | Да | Да [час] | Частичный [л] | Да | Да |
Контейнеры Solaris (зоны) | иллюзии ( OpenSolaris ), Солярис | CDDL , Собственный | 2004 | Да | Да (ЗФС) | Да | Частичный [м] | Да | Да | Да [н] [25] [26] | Частичный [the] | Частичный [п] [д] | Да [р] |
Тюрьма FreeBSD | FreeBSD , DragonFly BSD | Лицензия БСД | 2000 [28] | Да | Да (ЗФС) | Да [с] | Да | Да [29] | Да | Да [30] | Да | Частичный [31] [32] | Да [33] |
vkernel | Стрекоза БСД | Лицензия БСД | 2006 [34] | Да [35] | Да [35] | — | ? | Да [36] | Да [36] | Да [37] | ? | ? | Да |
шить тюрьму | OpenBSD , NetBSD | Лицензия БСД | 2006–2009 | Да | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет | ? |
разделы WPAR | ЭКС | Коммерческое проприетарное программное обеспечение | 2007 | Да | Нет | Да | Да | Да | Да | Да [т] | Нет | Да [39] | ? |
Виртуальные учетные записи iCore | Windows ХР | Бесплатное ПО | 2008 | Да | Нет | Да | Нет | Нет | Нет | Нет | ? | Нет | ? |
Песочница | Окна | GNU GPLv3 | 2004 | Да | Да | Частичный | Нет | Нет | Нет | Частичный | Нет | Нет | Да |
Systemd-nspawn | Линукс | GNU LGPLv2.1+ | 2010 | Да | Да | Да [40] [41] | Да [40] [41] | Да [40] [41] | Да [40] [41] | Да | ? | ? | Да |
Турбо | Окна | Фримиум | 2012 | Да | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет | Да |
ркт ( ракета ) | Линукс | Лицензия Apache 2.0 | 2014 [42] –2018 | Да | Да | Да | Да | Да | Да | Да | ? | ? | Да |
Контейнеры Linux, не перечисленные выше, включают:
- LXD , альтернативная оболочка LXC, разработанная Canonical. [43]
- Субман , [44] усовершенствованная, готовая к Kubernetes, безопасная замена Docker без root-доступа с поддержкой нескольких форматов образов контейнеров, включая образы OCI и Docker.
- Charliecloud — набор контейнерных инструментов, используемых в системах HPC. [45]
- Ката-контейнеры Платформа MicroVM [46]
- Bottlerocket — это операционная система с открытым исходным кодом на базе Linux, специально созданная Amazon Web Services для запуска контейнеров на виртуальных машинах или хостах с «голым железом». [47]
- Azure Linux — это дистрибутив Linux с открытым исходным кодом, специально созданный Microsoft Azure и похожий на Fedora CoreOS.
См. также
[ редактировать ]- Контейнер Linux
- Оркестровка контейнеров
- Flatpak Менеджер пакетов
- Группы Linux
- Пространства имен Linux
- Гипервизор
- Создатели портативных приложений
- Инициатива «Открытый контейнер»
- Песочница (разработка программного обеспечения)
- Разделительное ядро
- Бессерверные вычисления
- Snap Менеджер пакетов
- Гипервизор хранилища
- Виртуальный частный сервер (VPS)
- Разделение виртуальных ресурсов
Примечания
[ редактировать ]- ^ Пользователь root может легко выйти из chroot. Chroot никогда не предполагалось использовать в качестве механизма безопасности. [9]
- ^ Jump up to: а б При использовании планировщика CFQ для каждого гостя создается отдельная очередь.
- ^ Jump up to: а б Сеть основана на изоляции, а не на виртуализации.
- ^ Jump up to: а б Всего в контейнере безопасными считаются 14 пользовательских возможностей. Остальное нельзя предоставить процессам внутри этого контейнера, не позволяя этому процессу потенциально вмешиваться в дела за пределами этого контейнера. [13]
- ^ Дисковые квоты для каждого контейнера возможны при использовании отдельных разделов для каждого контейнера с помощью LVM или когда базовой файловой системой хоста является btrfs, и в этом случае подтома btrfs используются автоматически.
- ^ Ограничение скорости ввода-вывода поддерживается при использовании Btrfs .
- ^ Доступно начиная с ядра Linux 2.6.18-028stable021. Реализация основана на дисковом планировщике ввода-вывода CFQ, но это двухуровневая схема, поэтому приоритет ввода-вывода устанавливается не для каждого процесса, а для каждого контейнера. [19]
- ^ Jump up to: а б Каждый контейнер может иметь свои собственные IP-адреса, правила брандмауэра, таблицы маршрутизации и так далее. Возможны три различные сетевые схемы: на основе маршрута, на основе моста и назначение реального сетевого устройства ( NIC ) контейнеру.
- ^ Контейнеры Docker могут работать внутри контейнеров OpenVZ. [20]
- ^ Каждый контейнер может иметь root-доступ, не затрагивая другие контейнеры. [21]
- ^ Доступно с версии 4.0, январь 2008 г.
- ^ Контейнеры Docker могут работать внутри контейнеров Virtuozzo. [23]
- ^ Да, с иллюзиями [24]
- ^ см . в разделе «Виртуализация сети Solaris и управление ресурсами» . Дополнительные сведения
- ^ Только если верхний уровень — это зона KVM (иллюмо) или зона kz (Oracle).
- ^ Начиная с бета-версии Solaris 11.3, зоны ядра Solaris могут использовать динамическую миграцию.
- ^ Реализована холодная миграция (выключение-перемещение-перезапуск).
- ^ Неглобальные зоны ограничены, поэтому они не могут влиять на другие зоны с помощью подхода ограничения возможностей. Глобальная зона может управлять неглобальными зонами. [27]
- ^ проверьте параметр «allow.quotas» и раздел «Джейлы и файловые системы» на странице руководства по тюрьме FreeBSD . Подробности
- ^ Доступно с TL 02. [38]
Ссылки
[ редактировать ]- ^ Хогг, Скотт (26 мая 2014 г.). «Программные контейнеры: используются чаще, чем многие думают» . Сетевой мир . Сетевой мир, Inc. Проверено 9 июля 2015 г.
Существует множество других систем виртуализации на уровне ОС, таких как: Linux OpenVZ, Linux-VServer, FreeBSD Jails, разделы рабочей нагрузки AIX (WPAR), контейнеры HP-UX (SRP), контейнеры Solaris и другие.
- ^ Рами, Розен. «Пространства имен и Cgroups, основа контейнеров Linux» (PDF) . Проверено 18 августа 2016 г.
- ^ «Безопасное развертывание Bottlerocket на Amazon EKS с помощью KubeArmor | Containers» . aws.amazon.com . 20 октября 2022 г. Проверено 20 июня 2023 г.
- ^ Корф, Янек; Надеюсь, Пако; Поттер, Брюс (2005). Освоение безопасности FreeBSD и OpenBSD . Серия О'Рейли. О'Рейли Медиа, Инк. с. 59. ИСБН 0596006268 .
- ^ Хуанг, Д. (2015). «Опыт использования виртуализации на уровне ОС для блочного ввода-вывода». Материалы 10-го семинара по параллельному хранению данных . стр. 13–18. дои : 10.1145/2834976.2834982 . ISBN 9781450340083 . S2CID 3867190 .
- ^ «Руководство по системному администрированию: управление ресурсами контейнеров Oracle Solaris и зоны Oracle Solaris, Глава 16: Введение в зоны Solaris» . Корпорация Оракл . 2010 . Проверено 2 сентября 2014 г.
- ^ «Руководство по системному администрированию: Управление контейнерами-ресурсами Oracle Solaris и зоны Oracle Solaris, Глава 31: О фирменных зонах и фирменной зоне Linux» . Корпорация Оракл . 2010 . Проверено 2 сентября 2014 г.
- ^ Брайан Кэнтрилл (28 сентября 2014 г.). «Мечта жива! Запуск контейнеров Linux на ядре Illumos» . SlideShare.net . Проверено 10 октября 2014 г.
- ^ «3.5. Ограничение среды вашей программы» . freebsd.org .
- ^ «Docker удаляет LXC как среду выполнения по умолчанию» . ИнфоQ .
- ^ «Установить рабочий стол Docker в Windows | Документация Docker» . Докер . 9 февраля 2023 г.
- ^ «Начало работы с Docker Desktop для Mac» . Документация по докеру . 6 декабря 2019 г.
- ^ «Бумага — Linux-VServer» . linux-vserver.org .
- ^ Jump up to: а б Грабер, Стефан (1 января 2014 г.). «LXC 1.0: Функции безопасности [6/10]» . Проверено 12 февраля 2014 г.
LXC теперь поддерживает пространства имен пользователей. [...] LXC больше не работает от имени пользователя root, поэтому даже если злоумышленнику удастся выйти из контейнера, он обнаружит, что имеет привилегии обычного пользователя на хосте.
- ^ «Sylabs внедряет контейнеры Singularity в коммерческие высокопроизводительные вычисления | Топ-500 суперкомпьютерных сайтов» . www.top500.org .
- ^ «SIF — Содержимое ваших контейнеров» . www.sylabs.io . 14 марта 2018 г.
- ^ Курцер, Грегори М.; Сочат, Ванесса; Бауэр, Майкл В. (11 мая 2017 г.). «Сингулярность: научные контейнеры для мобильности вычислений» . ПЛОС ОДИН . 12 (5): e0177459. Бибкод : 2017PLoSO..1277459K . дои : 10.1371/journal.pone.0177459 . ПМЦ 5426675 . ПМИД 28494014 .
- ^ Бронников Сергей. «Сравнение на вики-странице OpenVZ» . ОпенВЗ Wiki . ОпенВЗ . Проверено 28 декабря 2018 г.
- ^ «Приоритеты ввода-вывода для контейнеров» . OpenVZ Virtuozzo Containers Wiki .
- ^ «Докер внутри CT» .
- ^ «Контейнер» . OpenVZ Virtuozzo Containers Wiki .
- ^ «Первоначальная публичная предварительная версия Virtuozzo (в то время называвшаяся ASPcomplete)» .
- ^ «Parallels Virtuozzo теперь обеспечивает встроенную поддержку Docker» .
- ^ Пиевски, Билл. «Наш дроссель ввода-вывода ZFS» .
- ^ Часто задаваемые вопросы по виртуализации сети и управлению ресурсами (Арбалет). Архивировано 1 июня 2008 г. на Wayback Machine.
- ^ «Управление сетевой виртуализацией и сетевыми ресурсами в Oracle® Solaris 11.2» . docs.oracle.com .
- ^ Администрирование Oracle Solaris 11.1, зоны Oracle Solaris, зоны Oracle Solaris 10 и управление ресурсами E29024.pdf, стр. 356–360. Доступен в архиве .
- ^ «Сдерживайте свой энтузиазм. Часть вторая: тюрьмы, зоны, OpenVZ и LXC» .
Впервые тюрьмы были представлены во FreeBSD 4.0 в 2000 году.
- ^ «Иерархические ограничения ресурсов — FreeBSD Wiki» . Wiki.freebsd.org. 27 октября 2012 г. Проверено 15 января 2014 г.
- ^ «Реализация клонируемого сетевого стека в ядре FreeBSD» (PDF) . usenix.org. 13 июня 2003 г.
- ^ «VPS для FreeBSD» . Проверено 20 февраля 2016 г.
- ^ «[Объявление] VPS // Виртуализация ОС // альфа-релиз» . 31 августа 2012 года . Проверено 20 февраля 2016 г.
- ^ «3.5. Ограничение среды вашей программы» . Freebsd.org . Проверено 15 января 2014 г.
- ^ Мэтью Диллон (2006). "sys/vkernel.h" . Перекрестная ссылка BSD . Драгонфлай БСД .
- ^ Jump up to: а б «vkd(4) — Виртуальный диск ядра» . Драгонфлай БСД .
рассматривает образ диска как копирование при записи.
- ^ Jump up to: а б Саша Вильднер (8 января 2007 г.). «vkernel, vcd, vkd, vke — архитектура виртуального ядра» . Прочее информационное руководство по DragonFly . Драгонфлай БСД .
- «vkernel, vcd, vkd, vke — архитектура виртуального ядра». Прочее информационное руководство по DragonFly .
- ^ «vkernel, vcd, vkd, vke — архитектура виртуального ядра» . Страницы онлайн-руководства DragonFly . Драгонфлай БСД .
- ^ «Информация о пакете исправлений IBM для: сетевой изоляции WPAR — США» . IBM.com . 21 июля 2011 г.
- ^ «Мобильность живых приложений в AIX 6.1» . www.ibm.com . 3 июня 2008 г.
- ^ Jump up to: а б с д «системд-нспаун» . www.freedesktop.org .
- ^ Jump up to: а б с д «2.3. Изменение групп управления Red Hat Enterprise Linux 7» . Портал для клиентов Red Hat .
- ^ Полви, Алекс. «CoreOS создает среду выполнения контейнера, rkt» . Блог CoreOS . Архивировано из оригинала 01 апреля 2019 г. Проверено 12 марта 2019 г.
- ^ «ЛХД» . linuxcontainers.org . Проверено 11 февраля 2021 г.
- ↑ Безкорневые контейнеры с Podman и накладками на предохранители , семинар ЦЕРН, 4 июня 2019 г.
- ^ «Обзор — документация Charliecloud 0.25» . Проверено 4 октября 2020 г.
- ^ "Дом" . katacontainers.io .
- ^ «Bottlerocket — это операционная система на базе Linux, специально созданная для запуска контейнеров» .
Внешние ссылки
[ редактировать ]- Введение в виртуализацию. Архивировано 28 ноября 2019 г. на Wayback Machine.
- Краткое введение в три различных метода виртуализации
- Виртуализация и контейнеризация инфраструктуры приложений: сравнение , 22 июня 2015 г., Матийс Йерун Шиперс
- Контейнеры и постоянные данные , LWN.net , 28 мая 2015 г., Джош Беркус