Docker: введение в технологии виртуализации
![Docker: введение в технологии виртуализации](/upload/iblock/500/92l5urkkmxhbtnflmy6v99y1ixiqfq01/virtualization_virtual_machine.png)
В этой статье будут рассмотрены различные технологии виртуализации, а также их основные различия. Прочитав статью, вы сможете выбрать подходящую именно вам технологию.
Какое-то время назад, когда технологии виртуализации еще не были так широко применяемы как сегодня, физические серверы использовались не очень эффективно, т.к. почти каждое отдельное программное обеспечение, устанавливалось на отдельный физический сервер в основном для удобства администрирования.
Минусы данного подхода:
- Низкая утилизация физических серверов
- Высокая стоимость обслуживания
- Медленный ввод в эксплуатацию каждого нового приложения или сервиса
- Часто отсутствие изоляции между приложениями
Виртуализация
Не смотря на то, что виртуализация развивается и существует уже достаточно продолжительное время, четкого определения этого термина до сих пор не существует. Мы же в данной статье под виртуализацией будем понимать технологию, которая предоставляет возможность создания набора вычислительных ресурсов, т.к. серверы, устройства хранения данных или же сетевые ресурсы, абстрагированных от их аппаратной реализации.
Примеры виртуализации:
- Вычислительные ресурсы или серверы: на выходе работы технологии вы получаете виртуальный сервер (виртуальную машину) или контейнер, т.е. вы получаете в свое распоряжение часть процессора и памяти физического сервера
- Устройства хранения данных: чаще всего реализуется за счет файла специального формата, расположенного на распределенной кластерной файловой системе или NAS, а виртуальная машина использует этот файл как подключенный к ней локально жесткий диск
- Сетевые ресурсы: чаще всего имеется в виду использование сетевых протоколов или SDN (Software-defined networking, программно-определяемые сети) решений, предназначенных для изоляции сетевого трафика в локальных сетях Ethernet, например, VLAN (протокол), VxLAN (протокол), NSX (решение) или Nuage (решение) которые используются для того, чтобы изолировать сетевой трафик между виртуальными машинами, а в случае использования SDN решений еще и предоставить множество дополнительных виртуальных сетевых сервисов.
Существует большое количество подходов к виртуализации вычислительных ресурсов, речь о которых и пойдет дальше.
Виртуализация вычислительных ресурсов
Под виртуализацией вычислительных ресурсов, как уже упоминалось, понимается процесс создания виртуальной машины, которая функционирует как отдельный реальный компьютер со своей операционной системой. Операционная система и программное обеспечение, работающие внутри каждой из виртуальных машин, отделены от физических аппаратных ресурсов, на которых они запускаются. Например, сервер с операционной системой Ubuntu Linux может запустить внутри себя виртуальную машину с операционной системой Microsoft Windows.
В примере выше сервер на базе Ubuntu Linux, на котором работает технология виртуализации, называется хостовым сервером, а запущенный внутри него виртуальный сервер с ОС Microsoft Windows — гостевым сервером. Программное же обеспечение на хостовом сервере, которое позволяет внутри себя запускать виртуальные серверы, называется гипервизором.
Выделяют два типа гипервизоров:
- Тип 1 — это гипервизор выполненный на аппаратном уровне или же гипервизор, выполненный в виде тонкой прослойки (специализированной микро операционной системы), основная задача которой — это выполнение функции виртуализации. Примеры таких гипервизоров: Xen, Microsoft Hyper-V.
- Тип 2 — это гипервизор, работающий внутри операционной системы, в виде обычного программного обеспечения. Примеры таких гипервизоров: VirtualBox, Parallels Desktop и QEMU.
И на основании их несколько типа виртуализации:
- Виртуализация на базе программного гипервизора — это основной и наиболее распространенный тип виртуализации, при котором каждая отдельная гостевая виртуальная машина запускается внутри отдельного реализованного программно гипервизора (гипервизор тип 2). Программная реализация гипервизора, работающего внутри хостовой операционной системы, приводит к существенным дополнительным накладным расходам на эмуляцию работы с аппаратным обеспечением для гостевой операционной системы по сравнению с виртуализацией на базе аппаратного гипервизора. Гостевые операционные системы для работы в этом режиме виртуализации не должны быть специальным образом модифицированы
- Виртуализация на базе аппаратного гипервизора — это тип виртуализации, при котором гипервизор запускается непосредственно на аппаратном обеспечении сервера (гипервизор типа 1) и предоставляет все необходимые функции для непосредственного запуска и работы гостевых виртуальных машин. Гипервизор в этом типе виртуализации перехватывает и обрабатывает все привилегированные вызовы к процессору хостового сервера, на котором он запущен. Он также ответственен за обработку очередей, диспетчеризацию и возврат результатов запросов к аппаратному обеспечению гостевым виртуальным машинам. Не смотря на то, что обращения гостевых виртуальных машин к аппаратному обеспечению осуществляются через гипервизор, по сути они никак не ограничиваются и не регулируются, т.к. гипервизор всего лишь занимается трансляцией этих системных вызовов. Гостевые операционные системы для работы в этом режиме виртуализации не должны быть специальным образом модифицированы.
- Паравиртуализация — эта технология виртуализации также основана на использовании гипервизора, однако, она существенно сокращает накладные расходы на эмуляцию работы аппаратного обеспечения гостевой операционной системы за счет модификации (обычно ядра) последней для организации прямого доступа к гипервизору. Паравиртуализация является основной технологией используемой в Xen, которая использует модифицированное ядро Linux для поддержки своего административного окружения, известного как Domain0. Xen также может быть использован в роли аппаратного гипервизора для запуска немодифицированных версий операционных систем.
- Полная виртуализация — это полное эмулирование физического оборудования программным или аппаратным гипервизором таким образом, чтобы при перезапуске гостевой операционной системы на другом физическом оборудовании, не требовалось выполнять с ней каких-либо действий для ее успешного запуска. Гипервизор в этом режиме работы не только перхватывает все вызовы к аппаратному обеспечению хостового сервера, но и самостоятельно полностью эмулирует работу этого всего физического оборудования для гостевой операционной системы, поэтому производительность этого режима работы гипервизора несколько уступает паравиртуализации.
- Виртуализация с аппаратной поддержкой — этот тип виртуализации очень схож с перавиртуализацией и полной виртуализацией, однако, он доступен только на серверах, поддерживающих аппаратную виртуализацию x86 архитектуры (последние поколения процессоров Intel и AMD), позволяющих снизить издержки на перехват и эмуляцию операций ввода-вывода к физическим устройствам от гостевых операционных систем. Этот подход используется для оптимизации виртуализации на базе гипервизоров, таких как Xen, ESX Server, а также оптимизации технологий виртуализации уровня ядра, например, KVM. Гостевые операционные системы при использовании этой технологии могут работать без изменений своего ядра, т.к. гипервизор использует аппаратную поддержку реализованную в процессоре для поддержки привилегированных и защищенных операций.
- Виртуализация на уровне операционной системы (контейнерная виртуализация) — этому типу виртуализации не нужен гипервизор, единственное ядро операционной системы в этом типе виртуализации поддерживат запуск множества изолированных экземпляров пользовательского пространства ядра, которые разделяют ресурсы этого единственного ядра, жизненный цикл которых управляются специальным программным обеспечением. При этом эти экземпляры обычно называются контейнерами. С точки зрения собственных владельцев и пользователей они выглядят как полноценный сервер. Эту технологию можно рассматривать как улучшенный вариант технологии «chroot» в Linux, позволяющий не только изолировать работу программного обеспечения, запускаемого в каждом отдельном контейнере, но и «запускать» это программное обеспечение в любом Linux дистрибутиве.
Сравнение контейнерной виртуализации и виртуализации на базе гипервизора
Контейнерная виртуализация имеет существенные преимущества перед виртуализацией на уровне гипервизора. Основное из них — это ее легковесность, т.к. при использовании контейнерной виртуализации между всеми процессами контейнеров разделяется единственное ядро операционной системы, и нет никаких дополнительных накладных расходов на обслуживание ядер гостевых операционных систем. Это также дает возможность запускать на одном физическом сервере много больше полноценных виртуальных окружений похожих на реальные серверы, чем полноценно эмулированных операционных систем, а главное запуск этих окружений происходит много-много быстрее, чем эмулированных ОС.
Не смотря на свои достоинства, у этого решения есть один маленький недостаток: данная технология в качестве гостевых окружений позволяет запускать только окружения ОС Linux, поэтому, если вам необходимо в качестве гостевой ОС запустить именно Windows, придется воспользоваться виртуализацией на базе гипервизора.