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

Что такое виртуальная машина
Виртуальная машина — это программная среда, запущенная на физическом сервере или компьютере, которая полностью эмулирует работу реального устройства. На ВМ можно установить отдельную операционную систему, развернуть необходимые приложения и сервисы, а также работать с ней как с самостоятельным компьютером. При этом все действия внутри виртуальной машины не влияют на основную систему — данные, файлы и ОС хостового устройства остаются защищенными и неизменными.
Каждая виртуальная машина работает в изолированном окружении и «считает» себя единственной на физическом устройстве. Это гарантирует, что при сбое в одной ВМ остальные виртуальные среды продолжат работу без последствий. Однако ВМ могут косвенно влиять друг на друга: при одновременном запуске большого числа виртуальных машин и нехватке ресурсов может снизиться общая производительность всех виртуальных сред.
Виртуальная машина обладает собственными памятью, процессором, жестким диском и сетевыми интерфейсами. Однако эти ресурсы являются не физическими, а виртуализированными.

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

Как работает виртуальная машина
Работа виртуальных машин стоит на двух китах: технологии виртуализации и гипервизоре — специальной программе, которая устанавливается на хост и распределяет его ресурсы между несколькими ВМ. В этом разделе разберемся, что такое виртуализация, гипервизор и хост, и что они делают, чтобы обеспечить работоспособность ВМ.
Что такое хост, виртуализация и гипервизор
Хост — физический сервер или компьютер, на котором установлен гипервизор. Виртуальные машины работают именно за счет ресурсов хоста, от его мощности зависит, насколько быстрыми и высоконагруженными могут быть ВМ. Среди ресурсов, которые предоставляет хост: процессор (CPU), оперативная память (RAM), диск, сетевые интерфейсы, графические ресурсы (GPU).
Виртуализация — технология, на которой базируется работа ВМ. Именно виртуализация позволяет эмулировать физические ресурсы, например, процессор, оперативную память, GPU, и создать на хосте несколько изолированных виртуальных сред, то есть виртуальных машин.
Гипервизор — программное обеспечение (ПО), которое позволяет запускать несколько ВМ на одном компьютере или сервере. Гипервизор выступает как посредник между физическим оборудованием и ВМ, распределяет ресурсы хоста между виртуальными машинами. Это дополнительный слой абстракции между железом и ВМ.
К примеру, гипервизор перехватывает и транслирует запросы к оборудованию: CPU, памяти, устройствам ввода-вывода. А еще обеспечивает изоляцию и безопасность, благодаря чему каждая ВМ «думает», что она управляет физическим железом напрямую.
Есть два типа гипервизоров:
Аппаратные (bare metal) запускаются непосредственно на железе хоста. Этот вариант часто используется в крупных компаниях и дает максимальную производительность, так как не предполагает использование промежуточного слоя в виде гостевой ОС — той, что установлена на ВМ.
Хостовые (hosted) запускаются поверх операционной системы хоста и выделяют виртуальную машину в отдельный процесс. Это значит, что гипервизор работает как обычная программа внутри вашей основной операционной системы. Этот вариант проще в использовании и установке, а потому хорошо подходит для личного использования, тестирования и разработки.
Как хост жертвует ВМ часть ресурсов
Виртуальная машина работает за счет мощностей хоста. У ВМ нет своего железа, и гипервизор резервирует для нее долю ресурсов хоста — процессорных ядер, оперативной памяти, места на диске. Эти ресурсы отдаются виртуальной машиной на время, пока она работает.
Например, есть компьютер с 4-ядерным процессором и 16 ГБ ОЗУ. На нем надо запустить ВМ, у которой в конфигурации — 2 ядра и 4 ГБ памяти. Гипервизор выделит эти ресурсы из хоста для ВМ, и хост будет работать с оставшимися 2 ядрами и 12 ГБ.
Виртуальная машина не может быть мощнее хоста: нельзя выделить ей 8 ГБ, если на физическом устройстве есть только 6 ГБ. Чисто технически это возможно, но приведет к потере производительности. Это одинаково и для ПК, и для облачных серверов, которые предоставляют облачные провайдеры.

Для чего нужна виртуальная машина
Тестирование и разработка ПО
Работать с ПО на виртуальных машинах порой эффективнее, чем на отдельных устройствах. Допустим, команда разработчиков создает новое приложение, которое должно хорошо работать на разных ОС, да еще и в разных версиях. Плюс команда хочет, чтобы приложение функционировало и на слабых компьютерах.
Вместо того, чтобы держать парк настоящих устройств, можно запустить на одном несколько ВМ с разными настройками. На одной будет установлена Windows, на другой — MacOS, а третья будет настроена так, чтобы имитировать работу слабого компьютера. Команда запустит несколько ВМ и подгонит их конфигурацию под те устройства, на которых хочет проверить работу приложения.
Знакомство и работа с новыми операционными системами
Разработчикам и системным администраторам важно, чтобы существовала возможность параллельно работать с несколькими ОС. Например, нужны инструменты из Linux и приложения из Windows, а работать одновременно на двух компьютерах — это не особо удобно. Здесь поможет ВМ: если компьютер на Windows, а на ВМ установлена Linux, работать в обеих ОС можно параллельно.
Быстрое развертывание приложений и серверов
Есть ситуации, когда нужно запустить сразу несколько изолированный копий операционных систем. На каждой из них разворачивают какой-нибудь сервис, например, серверное приложение интернет-магазина или клиентская база данных. Без ВМ сисадмин должен настраивать ОС сервера: редактировать конфигурационные файлы, добавлять пользователей, раздавать доступы.
Чтобы не делать это каждый раз с нуля, можно создать ВМ в нужной конфигурации — там уже будет преднастроено все нужное, а конфигурации сохранятся в виде образа.
Обеспечение безопасности при работе с незнакомыми программами
Допустим, вы хотите протестировать приложение, которое кажется подозрительным: при этом вы предполагаете, что можете занести вредоносное ПО. Тогда это приложение можно установить на ВМ: даже если программа окажется зараженной, вирус не сможет навредить хосту.
Виды виртуальных машин
Виртуальные машины можно разграничить по глубине виртуализации — тому, насколько полно гипервизор эмулирует виртуальное железо. Расскажем о типах виртуализации, принципах их работы и ситуациях, в которых их лучше использовать.
Полная виртуализация предполагает, что гипервизор целиком эмулирует процессор, сетевую карту, жесткий диск и другие ресурсы хоста. Гостевая операционная система не знает, что она виртуализирована, и взаимодействует с виртуальным оборудованием так, будто оно реальное.
Примеры сервисов: VMware ESXi, QEMU, KVM, Microsoft Hyper-V, Xen.
Такой вариант позволяет запускать любые гостевые ОС, независимо от той, что стоит на хосте. Но для полной виртуализации нужно много мощностей, так как аппаратное обеспечение эмулируется целиком. А еще может снижаться производительность из-за дополнительного слоя абстракции в виде гипервизора.
Подходит для тестирования и разработки — допустим, на макбуке можно запустить десятки разных версий Windows и Linux, чтобы посмотреть, как приложение на них работает. Еще будет полезно для служб информационной безопасности, когда надо проверить, как на целую систему повлияет какое-нибудь вредоносное ПО.
Аппаратная виртуализация — усовершенствованный вариант полной, позволяет гостевой ОС обращаться к железу хоста напрямую. Аппаратный вариант работает быстрее, так как не нужна полная эмуляция оборудования, процесс это долгий. Гипервизор управляет доступом, но не участвует в каждой операции: для выполнения большинства команд гостевая ОС обращается к железу хоста напрямую. Для этого гипервизор использует специальные аппаратные расширения.
Примеры сервисов: VMware Workstation, Oracle VirtualBox.
Оптимально в ситуациях, когда особенно важна скорость. Например, эту технологию используют облачные провайдеры и датацентры.
Контейнеризация — технология, которая обеспечивает изоляцию приложений и их зависимостей. Здесь не эмулируется никакое виртуальное оборудование и не запускается полноценная гостевая ОС. Вместо полноценных виртуальных машин ядро хоста создает контейнеры — изолированные пространства, внутри которых работают приложения.
Это не тип виртуализации в классическом смысле, а изоляция процессов на уровне операционной системы. При контейнеризации не используется гипервизор, нет эмуляции процессов и виртуализации железа — есть только изоляция пользовательского пространства
Примеры сервисов: Docker, LXC (Linux Containers), OpenVZ.
Контейнеризация потребляет немного ресурсов, между контейнерами можно быстро переключаться, а сами они быстро грузятся. Это возможно потому, что не нужно эмулировать компоненты ОС. Правда, у контейнеров ограниченная совместимость — они используют общее ядро хоста, что ограничивает их совместимость с разными ОС. Например, Linux-контейнеры не запустятся на Windows без эмуляции.
Подходит для DevOps-разработки, для создания микросервисов и облачных решений.

Сравнение виртуальных машин и контейнеров
Контейнеры тоже создаются на базе технологии виртуализации, но во многом отличны от виртуальных машин. В контейнерах виртуализована только операционная система, а не все базовое оборудование. А еще у контейнеров, в отличие от ВМ, нет полноценной ОС — они используют ядро операционной системы хоста.
Контейнеры часто используют, когда требуется работа нескольких приложений на одной и той же ОС. Они включают в себя приложение, его зависимости (библиотеки, фреймворки), среду выполнения (например Python, Node.js) и конфигурационные файлы.

Виртуальные машины | Контейнеры |
Гипервизор эмулирует вычислительную среду, включая собственное ядро ОС и виртуальное оборудование | Используют операционную систему хоста |
Независимы друг от друга и от ОС хоста | Обеспечивают легкую изоляцию отдельных приложений друг от друга |
Требуют больше ресурсов, дольше запускаются | Требуют минимального объема памяти и быстро запускаются |
Удобны для сложных инфраструктурных решений, когда необходима высокая степень изоляции и совместимость с различными системами | Подходят для быстрой разработки, тестирования и масштабирования приложений |
Преимущества и недостатки виртуальных машин
Виртуальные машины хорошо подходят для создания серверов, тестирования, разработки и изоляции сред. Однако они не всегда подходят для задач, где нужна максимальная производительность, и делают сложнее управление инфраструктурой. Ниже подробнее рассмотрим, какие плюсы и минусы есть у ВМ.
Преимущества
Экономия ресурсов. Чтобы работать в разных ОС, не нужно закупать много компьютеров — достаточно одного, чтобы развернуть на нем несколько ВМ.
Безопасность. На ВМ можно тестировать разные приложения, в том числе работать с потенциально вредоносным ПО, и при этом не навредить основному устройству.
Быстрое восстановление и резервное копирование. Создание снимков (snapshots) позволяет быстро восстанавливать предыдущее рабочее состояние, что снижает риски потери данных.
Гибкость и скорость развертывания. Создание новой ВМ из готового шаблона занимает минуты — это гораздо быстрее, чем с нуля устанавливать ОС на физический сервер. Это ускоряет разработку, тестирование и масштабирование сервисов.
Переносимость. ВМ — это набор файлов. Его можно скопировать, перенести на другой сервер или в облако, а оттуда —мгновенно запустить. Это упрощает резервное копирование и аварийное восстановление.
Универсальность. Виртуалки поднимают и на домашнем ПК, и на мощном облачном сервере. Также можно установить любую ОС, выбрать нужную конфигурацию, чтобы сымитировать устройство с другими параметрами.
Недостатки
Сложность инфраструктуры. Виртуальная среда требует управления самим гипервизором, сетями, хранилищами и шаблонами ВМ. Это делает администрирование сложнее. А еще важно обращать внимание на отказоустойчивость хоста: если он выйдет из строя, перестанут работать и все запущенные на нем ВМ.
Ресурсоемкость. Каждая ВМ требует, чтобы хост выделил ей оперативную память, место на диске и процессорное время. Если ресурсов хоста не хватает, это скажется на производительности всех виртуальных машин, которые на нем резвернуты.
Производительность. Гипервизор создает прослойку между ВМ и железом, что приводит к небольшим, но неизбежным потерям производительности. Для задач, где скорость работы критична — например, в высоконагруженных базах данных, стоит выбирать аппаратный метод виртуализации.
Лучшие программные решения для работы с ВМ
Oracle VirtualBox — кроссплатформенное приложение для виртуализации, которое позволяет создавать виртуальные машины. На ВМ можно запустить любую операционную систему x86, такую как DOS, Windows, OS/2, FreeBSD и OpenBSD, на хосте x86_64. Также есть возможность запускать некоторые гостевые системы Arm на хостах Arm. Есть возможность управлять ВМ из нескольких интерфейсов одновременно, например, можно запустить виртуальную машину кнопкой в графическом интерфейсе, а затем управлять ей удаленно или из командной строки.

На странице с документацией Oracle VirtualBox вы можете познакомиться с тем, как работает ПО, получить советы по установке и узнать, как интегрировать его в свои продукты через API
VMware Workstation позволяет запускать на ВМ сотни операционных систем, подключать Fusion или Workstation к удаленным серверам vSphere или ESX для запуска, контроля и управления ВМ и физическими хостами. Благодаря поддержке виртуальных машин, контейнеров и кластеров Kubernetes Fusion и Workstation разработчики могут тестировать контейнерные приложения и кластеры.
Microsoft Hyper-V — встроенный гипервизор для Windows Server и Windows Client. Предназначен для организаций, центров обработки данных и гибридных облачных решений. Есть поддержка миграции виртуальных машин между узлами без остановки работы самих ВМ, а еще программа легко интегрируется с облачной платформой Microsoft Azure.
QEMU позволяет полностью эмулировать систему и запускать ВМ на любой из десятка поддерживаемых архитектур, например x86, ARM, PowerPC, MIPS. Наиболее распространенный способ применения QEMU — эмуляция всей системы, включая центральный процессор (CPU), память и нужные устройства. В этом режиме CPU может быть полностью виртуализован или работать с гипервизором, таким как KVM, Xen или Hypervisor.Framework.
Практическое руководство по настройке ВМ
В этом разделе рассмотрим алгоритм, как создать виртуальную машину и развернуть ее на компьютере или в облаке. Конкретные шаги зависят от гипервизора или провайдера, услуги которого будете использовать, а также от того, какую конфигурацию хотите задать ВМ.
Установка на локальном компьютере
Откройте приложение виртуальной машины и кликните на нужную кнопку, чтобы создать новую ВМ.
Следуйте инструкции по установке. Отредактируйте значения по умолчанию, если они вам не подходят. К примеру, в зависимости от выбранной гостевой ОС программа может автоматически задать объем оперативной памяти для ВМ — рекомендуем устанавливать не более половины от RAM хоста.
Присвойте ВМ информативное имя. Хорошо, если в нем будет информация об операционной системе и установленном ПО, например, Windows 10 with Visio. Также это название может использоваться, чтобы программа автоматически предложила подходящую ОС и содержимое связанных полей.
Далее вы сможете выбрать тип диска — динамический или фиксированный — и его размер. Динамический сможет масштабироваться, если вырастет нагрузка, но не сможет уменьшиться, если используемые ресурсы начнут простаивать. Фиксированный вариант обычно работает быстрее.
После этого виртуальная машина будет создана — останется ее только настроить, и можно работать. Более подробные инструкции по настройке и создании ВМ вы сможете найти в документации гипервизоров, например, у Oracle VirtualBox.
Создание виртуальной машины в облаке
Установить ВМ можно не только на своем компьютере, но и на облачном сервере. Это удобный вариант, если нужно запустить ресурсоемкую ВМ или сразу несколько — для этого достаточно арендовать мощный облачный сервер, а не покупать собственный. А еще можно выбрать из готовых конфигураций, получить помощь в установке и работать в удобном интерфейсе.
Дадим инструкцию на примере запуска ВМ в облачном сервисе Evolution Compute. Итак, что нужно сделать:
Авторизуйтесь в личном кабинете.
Необязательный шаг: сгенерируйте приватный и публичный SSH-ключ и загрузите второй в облачный каталог, чтобы подключаться к ВМ по протоколу SSH. Чтобы подключаться к виртуальной машине по SSH.
Найдите на верхней панели слева фигуру квадрата из шести точек — нажмите на эту иконку. Далее перейдите в раздел Инфраструктура → Виртуальные машины.
Кликните Создать виртуальную машину.
Задайте конфигурацию и настройки виртуальной машины.
В конфигурации понадобится задать, например, количество ВМ, их название, нужное количество вычислительных ресурсов, выбрать зону доступности и нужный образ. В настройках — добавить по необходимости дополнительные сетевые интерфейсы, ввести логин и пароль пользователя ВМ, а также имя хоста. Подробнее о том, как это сделать, читайте в документации Cloud.ru Evolution Compute.
Заключение
Виртуальная машина — это специальная программа, которая выполняет на физическом хосте роль еще одного компьютера. Пригодится, когда нужно параллельно работать с несколькими разными ОС, тестировать приложения или обезопасить основной компьютер от неизвестного ПО.
ВМ работают на основе технологии виртуализации, которая создает копии физического оборудования.
Гипервизор — программа, которая выступает посредником между ВМ и железом, распределяет между ВМ ресурсы хоста и делает так, чтобы каждая виртуальная машина работала стабильно.
Контейнеризация — технология, которая не является виртуализацией. При этом с ее помощью можно изолировать отдельные процессы — например, чтобы создавать приложения в отдельных контейнерах и обеспечить их независимость друг от друга.