Глава 20. Обзор методик виртуализации

Виртуализация это возможность одновременно запускать множество операционных систем в одной вычислительной системе. Хотя это и не обязательно новая концепция, в последние годы виртуализация приобрела известность, поскольку она позволяет полностью использовать ЦПУ и ресурсы ёмкости серверной системы при этом предоставляя стабильность (в том плане, что в случае сбоя одной виртуальной гостевой системы сам хост и прочие гостевые системы продолжают работать).

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

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

Виртуализация Гостевой операционной системы

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

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

Приводимый ниже рисунок иллюстрирует виртуализацию на основе гостевой ОС:

 

Рисунок 20-1


 

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

Виртуализация Гипервизора

При виртуализации гипервизора, основная задача гипервизора состоит в обработке выделения ресурсов и памяти для виртуальных машин и предоставления интерфейсов под средства администрирования и мониторинга более высокого уровня. Решения на основе гипервизора разбиваются на категории либо Типа-1, либо Типа-2.

Гипервизоры 2 Типа (порой именуемые гипервизорами над ОС хостинга) устанавливаются как программные приложения, которые исполняются поверх операционной системы своего хоста, предоставляя возможности виртуализации через координацию лоя гостевых виртуальных машин доступа к ресурсам, таким как ЦПУ, память и сетевая среда. Рисунок 20-2 иллюстрирует типичную архитектуру с применением виртуализации гипервизором 2 Типа:

 

Рисунок 20-2


 

Чтобы разобраться с тем как работает виртуализация 1 Типа, поможет понимание архитектуры процессора x86. Семейство ЦПУ x86 предоставляет диапазон уровней защиты, носящих название колец, в которых обычно исполняется само ядро операционной системы. Кольцо 0 обладает наивысшим уровнем привилегий и это именно то кольцо, в котором обычно исполняется собственно ядро операционной системы. Об исполняемом в Кольце 0 коде говорят, что он выполняется в системном пространстве, режиме ядра или режиме супервизора. Весь прочий код, такой как запускаемые в этой операционной системе приложения, работают в менее привилегированных кольцах, обычно в кольце 3.

В противоположность гипервизорам 2 Типа, гипервизоры 1 Типа (также именуемые железячными или естественными гипервизорами) запускаются непосредственно на аппаратных средствах системы хоста в кольце 0. Когда такой гипервизор занимает кольцо 0 ЦПУ, соответствующие исполняемых в этой системе ядер гостевых операционных систем запускаются в кольцах с меньшими привилегиями. К сожалению, большинство ядер операционных систем написаны для исполнения в кольце 0 в явном виде, поскольку им требуется выполнять задачи, доступные исключительно в этом кольце, например, возможность исполнения привилегированных инструкций ЦПУ и непосредственной манипуляции памятью. В последние годы были разработаны некоторые различные решения данной задачи, каждый из которых описывается ниже:

Паравиртуализация

При паравиртуализации собственно ядро соответствующей гостевой операционной системы изменяется особым образом для запуска в своём гипервизоре. Обычно это вовлекает подмену привилегированных операций, которые исполняются исключительно в кольце 0 своего ЦПУ вызовами гипервизора (именуемых гипервызовами - hypercalls). Этот гипервизор, в свою очередь, исполняет соответствующую задачу от имени ядра данного гостя. К сожалению, обычно это ограничивает поддержку операционными системами с открытым исходным кодом, такими как Linux, которые могут свободно изменяться, в то время как частные операционные системы обладали владельцами, дававшими согласие на внесение необходимых изменений кода в конкретный целевой гипервизор. Несмотря на такие проблемы, возможность гостевого ядра напрямую взаимодействовать со своим гипервизором приводит к более высоким уровням производительности, нежели прочие подходы к виртуализации.

Полная виртуализация

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

Виртуализация оборудования

Аппаратная виртуализация пользуется функциональными возможностями виртуализации, встроенными в самые последние поколения ЦПУ как у Intel, так и у AMD. Эти технологии носящие название Intel VT и AMD-V, соответственно, предоставляют расширения, необходимые для исполнения гостевых виртуальных машин без изменений, а также без накладываемых полной виртуализации с эмуляцией ЦПУ накладных расходов. В самом простейшем виде, такие процессоры предоставляют некий дополнительный режим привилегий (кольцо -1) над кольцом 0, с котором способен исполняться соответствующий гипервизор, тем самым оставляя кольцо 0 свободным для неизменных гостевых операционных систем.

Приводимый ниже рисунок иллюстрирует подход к виртуализации гипервизора 1 Типа:

 

Рисунок 20-3


 

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

Построение сетей Виртуальных машин

Виртуальные машины неизменно должны быть подключёнными к сетевой среде, чтобы их можно было применять на практике. Одним из вариантов является подключение соответствующего гостя к виртуальной сетевой среде, запущенной внутри операционной системы компьютера хоста. В такой конфигурации любые виртуальные машины этой виртуальной сети способны видеть друг друга, тем не менее, NAT (Network Address Translation, преобразование сетевых адресов) обеспечивает доступ к внешней сетевой среде. При применении виртуальной сети и NAT во внешней сетевой среде (той сети, к которой подключён хост) представлена каждая виртуальная машина при помощи IP адреса системы хоста. Именно это является поведением по умолчанию для виртуализации KVM в RHEL9 и, как правило, не требует дополнительной настройки. Обычно создаётся одна представленная названием default виртуальная сеть и устройство virbr0.

Чтобы гости во внешней сети отображались как индивидуальные и независимые системы (то есть с собственными IP адресами), они должны быть настроены на совместное применение физического сетевого интерфейса в своём хосте. Самый быстрый способ осуществить это - настроить соответствующую виртуальную машину на применение параметра конфигурации сети "непосредственного подключения" ("direct connection", также именуемого MacVTap), который предоставляет гостевой системе IP адрес той же самой сети, что и у хоста. К сожалению, хотя это и предоставляет самой виртуальной машине доступ к прочим системам в сетевой среде, при применении драйвера MacVTap невозможно установить соединение между гостем и хостом.

Наилучший способ заключается в настройке интерфейса сетевого моста в системе своего хоста, к которому способны подключаться все гости. Это снабжает соответствующего гостя неким IP адресом во внешней сетевой среде, в то время как к тому же позволяет взаимодействовать самим гостю и хосту, тема, рассматриваемая в Главе 25, Создание Интерфейса сетевого моста KVM RHEL9.

Заключение

Виртуализация это возможность запуска множества гостевых операционных систем внутри единственной операционной системы хоста. Было разработано несколько подходов к виртуализации, включая гостевую операционную систему и виртуализацию гипервизора. Виртуализация гипервизора распадается на две категории, известные как Тип 1 и Тип 2. Решения виртуализации Типа 2 рассматриваются как категории паравиртуализации, полной виртуализации и аппаратной виртуализации, причём последняя использует особые функциональные возможности виртуализации некоторых моделей процессоров Intel и AMD.

Гостевые операционные системы виртуальных машин в плане построения сетевой среды обладают рядом вариантов, включая конфигурации NAT, непосредственного подключения (MacVTap) и сетевого моста.