Парадигма операционной системы, допускающая несколько изолированных экземпляров пользовательского пространства
Виртуализация на уровне ОС — это парадигма виртуализации операционной системы (ОС) , в которой ядро допускает существование нескольких изолированных экземпляров пользовательского пространства , включая контейнеры ( 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) на уровне файлов . (Чаще всего стандартная файловая система разделяется между разделами, и те разделы, которые изменяют файлы, автоматически создают свои собственные копии.) Это проще для резервного копирования, более эффективно с точки зрения пространства и проще для кэширования, чем схемы копирования при записи на уровне блоков, распространенные в виртуализаторах всей системы. Однако виртуализаторы всей системы могут работать с неродными файловыми системами и создавать и откатывать моментальные снимки состояния всей системы.
Реализации
Контейнеры Linux, не перечисленные выше, включают:
- LXD , альтернативная оболочка вокруг LXC, разработанная Canonical [43]
- Podman [44] — усовершенствованная, готовая к работе с Kubernetes, защищенная замена Docker без прав root с поддержкой нескольких форматов образов контейнеров, включая образы OCI и Docker.
- Charliecloud, набор контейнерных инструментов, используемых в системах HPC [45]
- Платформа Kata Containers MicroVM [46]
- Bottlerocket — это операционная система с открытым исходным кодом на базе Linux, специально созданная Amazon Web Services для запуска контейнеров на виртуальных машинах или физических хостах [47]
- Azure Linux — это дистрибутив Linux с открытым исходным кодом, специально созданный Microsoft Azure и похожий на Fedora CoreOS.
Смотрите также
Примечания
- ^ Пользователь root может легко выйти из chroot. Chroot никогда не предполагалось использовать в качестве механизма безопасности. [9]
- ^ ab При использовании планировщика CFQ для каждого гостя создается отдельная очередь.
- ^ ab Сетевые технологии основаны на изоляции, а не на виртуализации.
- ^ ab Всего 14 пользовательских возможностей считаются безопасными в контейнере. Остальные не могут быть предоставлены процессам в этом контейнере без того, чтобы позволить этому процессу потенциально вмешиваться в вещи за пределами этого контейнера. [13]
- ^ Дисковые квоты на контейнер возможны при использовании отдельных разделов для каждого контейнера с помощью LVM или когда базовой файловой системой хоста является btrfs, в этом случае автоматически используются подтома btrfs.
- ^ Ограничение скорости ввода-вывода поддерживается при использовании Btrfs .
- ^ Доступно с ядра Linux 2.6.18-028stable021. Реализация основана на планировщике дискового ввода-вывода CFQ, но это двухуровневая схема, поэтому приоритет ввода-вывода не на процесс, а на контейнер. [19]
- ^ ab Каждый контейнер может иметь собственные IP-адреса, правила брандмауэра, таблицы маршрутизации и т. д. Возможны три различные сетевые схемы: на основе маршрутов, на основе мостов и назначение реального сетевого устройства ( NIC ) контейнеру.
- ^ Контейнеры Docker могут работать внутри контейнеров OpenVZ. [20]
- ^ Каждый контейнер может иметь root-доступ, не влияя на другие контейнеры. [21]
- ^ Доступно с версии 4.0, январь 2008 г.
- ^ Контейнеры Docker могут работать внутри контейнеров Virtuozzo. [23]
- ^ Да с иллюмосом [24]
- ^ Более подробную информацию см . в разделе Виртуализация сети Solaris и управление ресурсами .
- ^ Только когда верхний уровень — это зона KVM (illusomos) или зона kz (Oracle).
- ^ Начиная с Solaris 11.3 Beta, зоны ядра Solaris могут использовать живую миграцию.
- ^ Реализована холодная миграция (выключение-перемещение-перезапуск).
- ^ Неглобальные зоны ограничены, поэтому они не могут влиять на другие зоны через подход ограничения возможностей. Глобальная зона может администрировать неглобальные зоны. [27]
- ^ Подробности смотрите в параметре «allow.quotas» и разделе «Jails and file systems» на странице руководства FreeBSD jail.
- ↑ Доступно с TL 02. [38]
Ссылки
- ^ Хогг, Скотт (2014-05-26). "Программные контейнеры: используются чаще, чем многие думают". Network World . Network world, Inc . Получено 2015-07-09 .
Существует множество других систем виртуализации на уровне ОС, таких как: Linux OpenVZ, Linux-VServer, FreeBSD Jails, AIX Workload Partitions (WPARs), HP-UX Containers (SRP), Solaris Containers и другие.
- ^ Рами, Розен. «Пространства имен и Cgroups, основа контейнеров Linux» (PDF) . Получено 18 августа 2016 г.
- ^ «Безопасное развертывание Bottlerocket на Amazon EKS с помощью KubeArmor | Контейнеры». aws.amazon.com . 2022-10-20 . Получено 2023-06-20 .
- ^ Корфф, Янек; Хоуп, Пако; Поттер, Брюс (2005). Освоение безопасности FreeBSD и OpenBSD. Серия O'Reilly. O'Reilly Media, Inc. стр. 59. ISBN 0596006268.
- ^ Хуан, Д. (2015). «Опыт использования виртуализации на уровне ОС для блочного ввода-вывода». Труды 10-го семинара по параллельному хранению данных . стр. 13–18. doi :10.1145/2834976.2834982. ISBN 9781450340083. S2CID 3867190.
- ^ "Руководство по системному администрированию: контейнеры Oracle Solaris — управление ресурсами и зоны Oracle Solaris, Глава 16: Введение в зоны Solaris". Корпорация Oracle . 2010 . Получено 2014-09-02 .
- ^ "Руководство по системному администрированию: Oracle Solaris containers-resource nanagement и Oracle Solaris zones, Глава 31: О фирменных зонах и фирменной зоне Linux". Oracle Corporation . 2010 . Получено 2014-09-02 .
- ^ Брайан Кантрилл (28.09.2014). «Мечта жива! Запуск контейнеров Linux на ядре illumos». slideshare.net . Получено 10.10.2014 .
- ^ "3.5. Ограничение среды вашей программы". freebsd.org .
- ^ "Docker отказывается от LXC как среды выполнения по умолчанию". InfoQ .
- ^ "Установка рабочего стола Docker на Windows | Документация Docker". Docker . 9 февраля 2023 г.
- ^ "Начало работы с Docker Desktop для Mac". Документация Docker . 6 декабря 2019 г.
- ^ "Документ - Linux-VServer". linux-vserver.org .
- ^ ab Graber, Stéphane (1 января 2014 г.). "LXC 1.0: Функции безопасности [6/10]" . Получено 12 февраля 2014 г. LXC
теперь поддерживает пользовательские пространства имен. [...] LXC больше не работает как root, поэтому даже если злоумышленнику удастся покинуть контейнер, он обнаружит, что у него есть привилегии обычного пользователя на хосте.
- ^ "Sylabs внедряет контейнеры Singularity в коммерческие HPC | 500 лучших суперкомпьютерных сайтов". www.top500.org .
- ^ "SIF — Контейнеры для хранения ваших контейнеров". www.sylabs.io . 14 марта 2018 г.
- ^ Курцер, Грегори М.; Сохат, Ванесса; Бауэр, Майкл В. (11 мая 2017 г.). «Сингулярность: Научные контейнеры для мобильности вычислений». PLOS ONE . 12 (5): e0177459. Bibcode : 2017PLoSO..1277459K. doi : 10.1371/journal.pone.0177459 . PMC 5426675. PMID 28494014 .
- ^ Бронников, Сергей. «Сравнение на вики-странице OpenVZ». ОпенВЗ Wiki . ОпенВЗ . Проверено 28 декабря 2018 г.
- ^ "Приоритеты ввода-вывода для контейнеров". OpenVZ Virtuozzo Containers Wiki .
- ^ «Докер внутри CT».
- ^ "Контейнер". OpenVZ Virtuozzo Containers Wiki .
- ^ "Первоначальный публичный предварительный релиз Virtuozzo (тогда называвшийся ASPcomplete)".
- ^ «Parallels Virtuozzo теперь обеспечивает встроенную поддержку Docker».
- ^ Пиевски, Билл. «Наш дроссель ввода-вывода ZFS».
- ^ Виртуализация сети и управление ресурсами (Crossbow) FAQ Архивировано 01.06.2008 на Wayback Machine
- ^ "Управление виртуализацией сети и сетевыми ресурсами в Oracle® Solaris 11.2". docs.oracle.com .
- ^ Администрирование Oracle Solaris 11.1, зоны Oracle Solaris, зоны Oracle Solaris 10 и управление ресурсами E29024.pdf, стр. 356–360. Доступно в архиве.
- ^ "Удержи свой энтузиазм - Часть вторая: Jails, зоны, OpenVZ и LXC".
Jails были впервые представлены в FreeBSD 4.0 в 2000 году.
- ^ "Иерархические ограничения ресурсов - FreeBSD Wiki". Wiki.freebsd.org. 2012-10-27 . Получено 2014-01-15 .
- ^ "Реализация клонируемого сетевого стека в ядре FreeBSD" (PDF) . usenix.org. 2003-06-13.
- ^ "VPS для FreeBSD" . Получено 2016-02-20 .
- ^ "[Объявление] VPS // Виртуализация ОС // Альфа-релиз". 31 августа 2012 г. Получено 2016-02-20 .
- ^ "3.5. Ограничение среды вашей программы". Freebsd.org . Получено 2014-01-15 .
- ^ Мэтью Диллон (2006). "sys/vkernel.h". Перекрестная ссылка BSD . DragonFly BSD .
- ^ ab "vkd(4) — Виртуальный диск ядра". DragonFly BSD .
обрабатывает образ диска как копирование при записи.
- ^ ab Sascha Wildner (2007-01-08). "vkernel, vcd, vkd, vke — архитектура виртуального ядра". DragonFly различное информационное руководство . DragonFly BSD .
- "vkernel, vcd, vkd, vke - архитектура виртуального ядра". Руководство по различным сведениям о DragonFly.
- ^ "vkernel, vcd, vkd, vke - архитектура виртуального ядра". Страницы руководства DragonFly On-Line . DragonFly BSD .
- ^ "Информация о пакете исправлений IBM для: Изоляция сети WPAR — США". ibm.com . 21 июля 2011 г.
- ^ "Мобильность приложений в реальном времени в AIX 6.1". www.ibm.com . 3 июня 2008 г.
- ^ abcd "systemd-nspawn". www.freedesktop.org .
- ^ abcd "2.3. Изменение групп управления Red Hat Enterprise Linux 7". Портал клиентов Red Hat .
- ^ Полви, Алекс. "CoreOS создает среду выполнения контейнера, rkt". Блог CoreOS . Архивировано из оригинала 2019-04-01 . Получено 12 марта 2019 г.
- ^ "LXD". linuxcontainers.org . Получено 2021-02-11 .
- ^ Контейнеры без корней с Podman и fuse-overlayfs, семинар ЦЕРН, 2019-06-04
- ^ "Обзор — документация Charliecloud 0.25" . Получено 4 октября 2020 г. .
- ^ "Главная". katacontainers.io .
- ^ «Bottlerocket — это операционная система на базе Linux, специально созданная для запуска контейнеров».
Внешние ссылки
- Введение в виртуализацию Архивировано 28.11.2019 на Wayback Machine
- Краткое введение в три различных метода виртуализации
- Виртуализация и контейнеризация инфраструктуры приложений: сравнение, 22 июня 2015 г., Матейс Йерун Шиперс
- Контейнеры и постоянные данные, LWN.net , 28 мая 2015 г., Джош Беркус