Программное обеспечение которое создает внутри хостовой ос воображаемые компьютеры

Обновлено: 05.07.2024

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

В широком смысле, понятие виртуализации представляет собой сокрытие настоящей реализации какого-либо процесса или объекта от истинного его представления для того, кто им пользуется. Продуктом виртуализации является нечто удобное для использования, на самом деле, имеющее более сложную или совсем иную структуру, отличную от той, которая воспринимается при работе с объектом. Иными словами, происходит отделение представления от реализации чего-либо. В компьютерных технологиях под термином «виртуализация» обычно понимается абстракция вычислительных ресурсов и предоставление пользователю системы, которая «инкапсулирует» (скрывает в себе) собственную реализацию. Проще говоря, пользователь работает с удобным для себя представлением объекта, и для него не имеет значения, как объект устроен в действительности.

Сам термин «виртуализация» в компьютерных технологиях появился в шестидесятых годах прошлого века вместе с термином «виртуальная машина», означающим продукт виртуализации программно-аппаратной платформы. В то время виртуализация была, скорее, интересной технической находкой, чем перспективной технологией. Разработки в сфере виртуализации в шестидесятых-семидесятых годах проводились только компанией IBM. С появлением в компьютере IBM M44/44X экспериментальной системы пэйджинга, впервые был употреблен термин «виртуальная машина» (virtual machine), который заменил более ранний термин «псевдо машина» (pseudo machine). Затем в мэйнфреймах IBM серии System 360/370, можно было использовать виртуальные машины для сохранения предыдущих версий операционных систем. До конца девяностых годов никто кроме IBM так и не решался использовать эту оригинальную технологию всерьез. Однако в девяностых годах стали очевидны перспективы подхода виртуализации: с ростом аппаратных мощностей, как персональных компьютеров, так и серверных решений, вскоре представится возможность использовать несколько виртуальных машин на одной физической платформе.

В 1997 году компания Connectix выпускает первую версию Virtual PC для платформы Macintosh, а в 1998 году VMware патентует свои техники виртуализации. Компания Connectix впоследствии была куплена корпорацией Microsoft, а VMware корпорацией EMC, и на данный момент обе эти компании являются двумя основными потенциальными конкурентами на рынке технологий виртуализации в будущем. Потенциальными — потому что сейчас VMware безоговорочный лидер на этом рынке, однако у Microsoft, как всегда, есть козырь в рукаве.

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

Виды виртуализации

Виртуализация платформ

Под виртуализацией платформ понимают создание программных систем на основе существующих аппаратно-программных комплексов, зависящих или независящих от них. Система, предоставляющая аппаратные ресурсы и программное обеспечение, называется хостовой (host), а симулируемые ей системы — гостевыми (guest). Чтобы гостевые системы могли стабильно функционировать на платформе хостовой системы, необходимо, чтобы программное и аппаратное обеспечение хоста было достаточно надежным и предоставляло необходимый набор интерфейсов для доступа к его ресурсам. Есть несколько видов виртуализации платформ, в каждом из которых осуществляется свой подход к понятию «виртуализация». Виды виртуализации платформ зависят от того, насколько полно осуществляется симуляция аппаратного обеспечения. До сих пор нет единого соглашения о терминах в сфере виртуализации, поэтому некоторые из приведенных далее видов виртуализации могут отличаться от тех, что предоставят другие источники.

    Полная эмуляция (симуляция).

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

В этом случае виртуальная машина виртуализует лишь необходимое количество аппаратного обеспечения, чтобы она могла быть запущена изолированно. Такой подход позволяет запускать гостевые операционные системы, разработанные только для той же архитектуры, что и у хоста. Таким образом, несколько экземпляров гостевых систем могут быть запущены одновременно. Этот вид виртуализации позволяет существенно увеличить быстродействие гостевых систем по сравнению с полной эмуляцией и широко используется в настоящее время. Кроме того, в целях повышения быстродействия в платформах виртуализации, использующих данный подход, применяется специальная «прослойка» между гостевой операционной системой и оборудованием (гипервизор), позволяющая гостевой системе напрямую обращаться к ресурсам аппаратного обеспечения. Гипервизор, называемый также «Монитор виртуальных машин» (Virtual Machine Monitor) — одно из ключевых понятий в мире виртуализации. Применение гипервизора, являющегося связующим звеном между гостевыми системами и аппаратурой, существенно увеличивает быстродействие платформы, приближая его к быстродействию физической платформы.

К минусам данного вида виртуализации можно отнести зависимость виртуальных машин от архитектуры аппаратной платформы.

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

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

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

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

    Объединение, агрегация и концентрация компонентов.

  • многопроцессорные системы, представляющиеся нам как одна мощная система,
  • RAID-массивы и средства управления томами, комбинирующие несколько физических дисков в один логический,
  • виртуализация систем хранения, используемая при построении сетей хранения данных SAN (Storage Area Network),
  • виртуальные частные сети (VPN) и трансляция сетевых адресов (NAT), позволяющие создавать виртуальные пространства сетевых адресов и имен.

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

Где применяется виртуализация

    Консолидация серверов.

Все перечисленные варианты использования виртуальных машин фактически являются лишь сферами их применения в данный момент, со временем, несомненно, появятся новые способы заставить виртуальные машины работать в различных отраслях IT. Но давайте посмотрим, как сейчас обстоят дела с виртуализацией.

Как работает виртуализация сегодня

На сегодняшний день проекты по виртуализации IT-инфраструктуры активно внедряются многими ведущими компаниями, занимающимися системной интеграцией и являющимися авторизованными партнерами провайдеров систем виртуализации. В процессе виртуализации IT-инфраструктуры создается виртуальная инфраструктура – комплекс систем на основе виртуальных машин, обеспечивающих функционирование всей IT-инфраструктуры, обладающий многими новыми возможностями при сохранении существующей схемы деятельности IT-ресурсов. Вендоры различных платформ виртуализации готовы предоставить информацию об успешных проектах по внедрению виртуальной инфраструктуры в крупных банках, промышленных компаниях, больницах, образовательных учреждениях. Множество достоинств виртуализации операционных систем позволяют компаниям экономить на обслуживании, персонале, аппаратном обеспечении, обеспечении бесперебойной работы, репликации данных и восстановлении после сбоев. Также рынок виртуализации начинает наполняться мощными средствами управления, миграции и поддержки виртуальных инфраструктур, позволяющими использовать преимущества виртуализации наиболее полно. Давайте посмотрим, как именно виртуализация позволяет компаниям, внедряющим у себя виртуальную инфраструктуру, экономить деньги.

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

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

Основные понятия технологии виртуализации

Виртуальная машина – изолированный программный контейнер, который работает с собственной ОС и приложениями, подобно физическому компьютеру. Виртуальная машина действует так же, как физический компьютер, и содержит собственные виртуальные ОЗУ, жесткий диск и сетевой адаптер.

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

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

Виртуальные машины полностью независимы от базового физического оборудования, на котором они работают.

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

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

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

Гостевая операционная система – это операционная система, устанавливаемая на созданную виртуальную машину. В качестве гостевых операционных систем можно использовать Window, Linux и др.

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

Хостовая операционная система и эмулятор распределяют между собой ресурсы реальной ЭВМ и составляют второй уровень иерархии. Хостовая операционная система занимается управлением работающих на ней приложений и распределением между ними ресурсов реальной ЭВМ.

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

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

Гостевые операционные системы управляют работой своих приложений в рамках выделенных эмулятором ресурсов.

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

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

Доменная виртуализация основывается на логическом распределении ресурсов на отдельные части (домены). В основном она используется в мэйнфреймах. Этот тип виртуализации появился первым и использовался для распределения ресурсов больших ЭВМ между отдельными пользователями.

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

Существуют три типа программной эмуляции инструкций: полная эмуляция инструкций, выборочная эмуляция инструкций, эмуляция API.

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

Интерпретация каждой инструкции приводит к значительному расходу ресурсов реальной ЭВМ и снижает быстродействие приложений, работающих в гостевой операционной системе. Современные серверы и персональные ЭВМ обладают все большей производительностью. Поэтому виртуализация, с использованием интерпретации инструкций, приобретает популярность. Представителями данного класса виртуальных машин являются: Microsoft Virtual PC, Bochs, Simics и др.

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

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

К виртуальным машинам этого типа относятся, например: VMware Workstation, VMware Server, Serenity Virtual Station и др.

В третьем случае, эмулируются API гостевой операционной системы. API (Application Programming Interface) – это интерфейс прикладного программирования.

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

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

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

Однако у такой системы виртуализации есть недостатки:

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

Однако использование эмуляции API позволяет избежать значительных потерь производительности.

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

  • Wine (Wine Is Not an Emulator), используемый для запуска Dos и Windows – приложений под управлением операционной системы Linux.
  • UML (User Mode Linux), встраиваемый в ядро Linux и позволяющий запускать несколько копий операционной системы на одном компьютере.

Безопасность в виртуальных облаках

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

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

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

Для анализа этой опасности попытаемся для начала понять природу гипервизора. Консультант по безопасности и одного из основателей компании Nemertes Research Group Inc. Андреаса Антонопулоса (Andreas Antonopoulos) считает, что "Гипервизоры – узкоспециализированные устройства. Обычный гипервизор меньше и более специализирован, чем операционная система общего назначения, и меньше открыт для атак, так как у него меньше или вообще нет открытых во вне сетевых портов. Гипервизор нечасто меняется и не выполняет приложения сторонних разработчиков. У гостевой ОС, которая может стать жертвой атак, нет прямого доступа к гипервизору. Гипервизор прозрачен для сетевого трафика, если не считать входящий и исходящий трафик выделенного интерфейса управления гипервизором. На настоящий момент не задокументировано ни одной атаки на гипервизоры, что говорит о низкой вероятности таких атак. Поэтому хотя масштаб разрушений в случае компрометации гипервизора может быть огромным (компрометация всех гостевых систем), вероятность такого события низка, потому что уязвимость гипервизора и вероятность атаки очень низкие".

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

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

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

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

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

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

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

При таком подходе может использоваться одна из форм маркировки, подобно той, что применяется в многоуровневых ОС (Trusted Solaris или SE-Linux). Можно также использовать базу данных управления конфигурацией для отслеживания запросов арендаторов на изоляцию приложений.

Билл Майне (Bill Meine), архитектор ПО и специалист по облакам в компании Blackhawk Network отмечает, что во всех этих примерах проблемы возникают, когда арендатору также требуется максимальная защита компонентов приложения от отказов по стандартным причинам, например, из-за необходимости высокой доступности. Дело не в том, что такую схему нельзя заставить работать, а в стоимости всех несовместимых и недогруженных фрагментов сервера (которые нельзя продать), которую приходится учитывать в цене сервиса.

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

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

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

Сравнение технологий виртуализации OpenVZ, KVM и Xen Сравнение технологий виртуализации OpenVZ, KVM и Xen

Обзор Виртуализации и Контейнеризации

Виртуализация – это технология, которая позволяет вам создавать несколько виртуальных машин (ВМ) на одном аппаратном обеспечении. В свою очередь каждая виртуальная машина представляет собой физический компьютер, на который вы можете установить операционную систему. Работу виртуальных машин контролирует гипервизор, который предоставляет им хостовые системные ресурсы: процессорные, оперативной памяти и устройств хранения.

Все ВМ изолированы друг от друга, то есть программное обеспечение одной ВМ не имеет доступ к ресурсам другой ВМ. Многие провайдеры VPS устанавливают гипервизор на физический сервер и предоставляют пользователям виртуальную машину в качестве виртуального частного сервера (VPS).

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

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

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

Xen и KVM являются технологиями виртуализации, а OpenVZ – это технология контейнеризации на базе Linux.

OpenVZ

OpenVZ (Open Virtuozzo) – это платформа контейнеризации, базирующаяся на ядре Linux. Она позволяет на одной хост-системе запускать несколько ОС, также базирующихся на Linux. Контейнеры работают как независимая система Linux с правами доступа уровня root, изоляцией на уровне файлов, пользователей или групп, процессов и сетей.

Провайдеры серверов предоставляют контейнерам OpenVZ некоторое количество оперативной памяти, процессорных ядер и места на жестком диске и продают их в качестве виртуальных серверов Linux. Какая-то часть ресурсов ЦП и памяти выделена контейнеру, а какая-то часть ресурсов “разрывается”, то есть если контейнеру требуется больше ресурсов помимо того, что ему было выделено, он может временно заимствовать их из неиспользуемых ресурсов других контейнеров.

Так как при контейнеризации ядро является общим для всех контейнеров, изменить настройки ядра, обновить его или использовать дополнительные модули ядра невозможно. К моменту написание этой статьи большинство провайдеров используют OpenVZ 6 на базе Linux 2.6. Таким образом, вы не сможете улучшить функционирование системы и возможности ядра за счет обновлений. У вас так и останется старый дистрибутив Linux. И вы не сможете установить Docker или использовать утилиты ipset и nftables.

OpenVZ 7 – это самая последняя версия проекта с обновленным ядром. Однако очень немногие провайдеры предоставляют ее из-за сложности установки и нехватки вспомогательных инструментов. В заключение, с точки зрения провайдера систему OpenVZ легко конфигурировать и запускать, в отличие от KVM и Xen. И так как это система на контейнеризации, она затрачивает намного меньше энергии, вследствие чего провайдеры могут предоставлять большее количество VPS с одного физического сервера.

Xen – это платформа виртуализации с открытым исходным кодом, которая первоначально начиналась как исследовательский проект в Кембриджском университете. В настоящее время в разработке проекта участвует Linux Foundation.

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

В целом гипервизоры делятся на два типа: 1 и 2. Гипервизор типа 1 работает непосредственно на хост-оборудовании, в то время как гипервизор типа 2 зависит от базовой операционной системы. Xen относится к гипервизору первого типа.

Так как Xen – технология виртуализации, созданные на ее основе ВМ могут работать на любой ОС, включая Linux, Windows и BSD. А поскольку каждая ВМ работает на своей операционной системе, вы можете обновить ядро, изменить его настройки или использовать дополнительные модули ядра.

Установка виртуализации несет за собой большой расход энергии на эмуляцию определенных аппаратных функций, а также на запуск операционной системы. Чтобы уменьшить расходы, Xen использует технику "паравиртуализация". В этом случае гипервизор использует альтернативные способы выполнения одних и тех же аппаратных операций более эффективным способом. Если гостевая ОС знает, как использовать эти альтернативные интерфейсы, она делает “гиперзвонок”, чтобы поговорить с гипервизором. Этот режим работы называется Xen Paravirtualization (Xen-PV).

Когда гостевая ОС поддерживает паравиртуализацию, используется другой режим виртуализации – Xen Hardware Virtual Machine (Xen-HVM). В этом случае Xen использует программу QEMU, чтобы обеспечить эмуляцию аппаратного обеспечения. Чтобы использовать Xen-HVM, аппаратная виртуализация должна быть обеспечена хост-системой.

KVM (Kernel Virtual Machine) – это модуль ядра Linux, который предоставляет платформу для сторонних инструментов (таких как QEMU) для обеспечения виртуализации. Поскольку это модуль ядра, KVM повторно использует многие функции ядра Linux для своих целей.

С точки зрения конечного пользователя Xen похож на KVM, поскольку он позволяет запускать любую ОС и работать с низкоуровневыми настройками ядра. Провайдеры серверов используют сторонние инструменты для создания виртуальных машин с фиксированным объемом оперативной памяти, ядрами ЦП, пространством жесткого диска и IP-адресами и предлагают их в качестве виртуальных машин. Иногда провайдеры VPS, использующие KVM, предоставляют пользователю возможность загрузить свой ISO-файл для установки на VPS.

KVM работает только на оборудовании, поддерживающем аппаратную виртуализацию. Подобно Xen, KVM также обеспечивает паравиртуализацию для устройств ввода-вывода через API «virtio».

Что же выбрать?

Выбор платформы зависит исключительно от ваших предпочтений. Если вы не хотите тратить много денег на Linux сервер и вас не беспокоит старая версия ядра и невозможность пользоваться такими программами, как Docker , то выбирайте OpenVZ. Если вам нужна еще другая ОС, например, Windows или вы хотите использовать обновленное ядро Linux, выбирайте KVM или Xen.

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

Есть провайдеры, которые рекламируют свои KVM и Xen как «специализированные ресурсы», но, к сожалению, это тоже не всегда правда. И KVM, и Xen предлагают функцию «раздувания памяти» («memory ballooning»), при которой ваша оперативная память может быть востребована другим VPS. В каждом VPS установлен драйвер (Balloon Driver), который помогает в этом процессе. Когда гипервизор забирает память у вашего VPS, создается впечатление, что драйвер не дает пользоваться вашей памятью. Однако VPS никогда не сможет получить больше памяти, чем ему было изначально выделено.

Таким образом, перегрузка возможна в случае со всеми тремя платформами. Однако провайдеры KVM/Xen перегружают их намного меньше, чем OpenVZ, из-за технических ограничений системы, основанной на гипервизоре.

Слово «виртуализация» в последнее время стало какой-то «модой» в ИТ-среде. Все вендоры железа и ПО, все ИТ-компании в один голос кричат, что виртуализация – это круто, современно, и нужно всем. Но, давайте, вместо того, чтобы идти на поводу у маркетинговых лозунгов (а иногда бывают такими, что сам Геббельс умер бы от зависти), попытаемся посмотреть на это модное слово с точки зрения простых «технарей» и решить, нужно нам это или нет.

Типы виртуализации

  • Виртуализация представлений
  • Виртуализация приложений
  • Виртуализация серверов

И, наконец, перейдем к виртуализации серверов и остановимся на ней подробно.
Виртуализация серверов – это программная имитация с помощью специального ПО аппаратного обеспечения компьютера: процессор, память, жесткий диск, и т.д. Далее, на такой виртуальный компьютер можно установить операционную систему, и она будет на нем работать точно так же, как и на простом, «железном» компьютере. Самое интересное достоинство этой технологии – это возможность запуска нескольких виртуальных компьютеров внутри одного «железного», при этом все виртуальные компьютеры могут работать независимо друг от друга. Для чего это можно применять?
Первое, что приходит в голову – виртуализацию серверов можно использовать в целях обучения и в тестовых целях. К примеру, новые приложения или ОС можно протестировать перед запуском в промышленную эксплуатацию в виртуальной среде, не покупая специально для этого «железо» и не рискуя парализовать работу ИТ-инфраструктуры, если что-то пойдет не так.

Но кроме этого, виртуализация серверов может использоваться и в продакшн-среде. Причин тому много.
Виртуализация позволяет сократить количество серверов благодаря консолидации, то есть там, где раньше требовалось несколько серверов – теперь можно поставить один сервер, и запустить нужное число гостевых ОС в виртуальной среде. Это позволит сэкономить на стоимости приобретения оборудования, а так же снизить энергопотребление, а значит и тепловыделение системы – и, следовательно, можно использовать менее мощные, и, соответственно – более дешевые системы охлаждения. Но у этой медали есть и обратная сторона, и не одна. Дело в том, что при внедрении решений на базе виртуализации, скорее всего придется покупать новые сервера. Дело в том, что виртуальные сервера используют аппаратные ресурсы физического сервера, и, соответственно – понадобятся более мощные процессоры, большие объемы оперативной памяти, а так же более скоростная дисковая подсистема, и, скорее всего – большего объема. Кроме того, некоторые системы виртуализации (в частности – MS Hyper-V) требуют поддержки процессором аппаратных технологий виртуализации (Intel VT или AMD-V) и некоторых других функций процессора. Многие процессоры, которые выпускались до недавнего времени, в частности – все x86_32bit – этим требованиям не удовлетворяют, и поэтому от старых, хотя и вполне рабочих серверов придется отказаться. Однако же, один более мощный сервер скорее всего будет стоить намного дешевле нескольких менее мощных, да и старые сервера, скорее всего давно пора менять из-за морального устаревания.

Есть еще один очень важный момент: виртуализация северов позволяет до предела упростить администрирование инфраструктуры. Главное преимущество, которое оценят все сисадмины – это возможность удаленного доступа к консоли виртуальных серверов на «аппаратном», точнее – «вирутально-аппаратном» уровне, независимо от установленной гостевой ОС и ее состояния. Так, чтобы перезагрузить «зависший» сервер, теперь не нужно бежать в серверную, или покупать дорогостоящее оборудование типа IP-KVM-переключателей, достаточно просто зайти в консоль виртуального сервера и нажать кнопку «Reset». Помимо этого, виртуальные сервера поддерживают технологию моментальных снимков (о ней см. мою предыдущую статью), а так же бэкап и восстановление виртуальных систем намного легче.

Еще одно неоспоримое преимущество – ОС, запущенная внутри виртуальной машины (гостевая ОС) понятия не имеет, какое оборудование установлено на физическом сервере, внутри которого она работает (хост). Поэтому, при замене железа, при апгрейде или даже переезде на новый сервер необходимо обновить драйверы только на ОС самого хоста (хостовой ОС). Гостевые ОС по будут работать как и раньше, поскольку «видят» только виртуальные устройства.

Так же, хочется напомнить, что в виртуальной среде могут действовать особые правила лицензирования ПО (в частности, покупка лицензии на Microsoft Windows Server 2008 Enterprise позволяет использовать бесплатно четыре копии ОС в качестве гостевой, а Microsoft Windows Server 2008 Datacenter вообще разрешает использовать неограниченное число гостевых ОС при условии полного лицензирования по процессорам).

Еще нельзя не упомянуть о технологиях отказоустойчивости. Физические сервера, на которых запускаются виртуальные машины, могут быть объединены в кластер, и в случае отказа одного из серверов – автоматически «переезжать» на другой. Полной отказоустойчивости добиться не всегда возможно (в частности, в MS Hyper-V такой «внезапный переезд» будет выглядеть так же, и иметь такие же возможные последствия, как внезапное обесточивание сервера), но возможные простои сильно сократятся: «переезд» занимает несколько минут, тогда как ремонт или замена самого сервера может занять часы, а то и дни. Если же «переезд» виртуальных машин происходит в штатном режиме, то он может пройти совершенно незаметно для пользователей. Такие технологии у разных вендоров называются по-разному, к примеру у MS она называется «Live Migration», у VMware – Vmotion. Использование таких технологий позволит проводить работы, связанные с выключением сервера (к примеру – замену некоторых аппаратных компонент, или перезагрузку ОС после установки критических обновлений) в рабочее время и не выгоняя пользователей из их любимых приложений. Кроме этого, если инфраструктура построена соответствующим образом – запущенные виртуальные машины могут автоматически перемещаться на менее нагруженные сервера, или же наоборот «разгружать» наиболее загруженные. В инфраструктуре на базе технологий Microsoft для этого используются System Center Virtual Machine Manager и Operations Manager.

В заключение темы по виртуализации серверов — отмечу, что виртуализация не всегда одинаково полезна. В частности, не всегда будет хорошей идеей переносить в виртуальную среду высоконагруженные сервера, а особенно — высоконагруженные по дисковой подсистеме — это «тяжелые» СУБД, Exchange Server, особенно — роль Mailbox Server, и прочие высоконагруженные приложения. А вот сервера с меньшей нагрузкой (контроллеры доменов AD, WSUS, всевозможные System Center * Manager, веб-сервера) виртуализировать можно и даже нужно. Замечу, кстати, что именно с контроллерами доменов — очень желательно, чтобы хотя бы один из контроллеров был «железным», то есть не виртуальным. Нужно это потому, что для корректной работы всей инфраструктуры желательно, чтобы при запуске всех остальных серверов хотя бы один КД уже был доступен в сети.

Резюме

Итак, давайте подведем итоги: какая именно виртуализация когда может пригодиться, и какие у нее есть плюсы и минусы.
Если у вас есть много пользователей, работающих с одинаковым набором ПО, и система сильно распределена территориально – то стоит подумать об использовании виртуализации представлений, сиречь – терминальных службах.

  • Снижение требований к «железу» на стороне клиентов
  • Снижение требований к пропускной способности сети
  • Повышение безопасности
  • Значительное упрощение администрирования и поддержки
  • Повышения требований к серверам, как по производительности, так и по надежности
  • Возможная единая точка отказа

Если у вас существует множество приложений, которые некорректно работают в новой ОС, либо же конфликтуют между собой, или необходимо запускать на одном компьютере несколько версий одной и той же программы – то нужна виртуализация на уровне приложений.

  • Безопасность
  • Простота администрирования — централизованное обновление и разграничение прав на доступ к приложениям
  • Некоторая сложность в понимании технологий и в практическом внедрении.

Если же вам нужно освободить место в стойке, снизить энергопотребление систем, избавиться от «серверного зоопарка» — то ваше решение – виртуализация серверов.

  • Экономия места в стойках
  • Снижение энергопотребления и тепловыделения
  • Упрощение администрирования
  • Широкие возможности по автоматизации развертывания и управления серверами
  • Снижение вынужденных и запланированных простоев системы за счет failover-кластеров и live migration
  • Позволяет (при использовании ОС Microsoft Windows Server) сэкономить на лицензиях на гостевые ОС

Недостатки – в принципе, те же, что и у терминальных решений:

  • Повышение требований к аппаратному обеспечению серверов
  • Возможная единая точка отказа – физический хост и хостовая ОС

Надеюсь, моя статья окажется для кого-то полезной. Благодарность и конструктивную критику, как всегда, можно высказать в комментариях.

Читайте также: