Выясняем, что представляют собой виртуальные машины, как ими пользоваться и зачем они вообще нужны.
Что такое виртуальная машина?
Виртуальная машина (ВМ, VM) – это виртуальная среда, работающая как настоящий компьютер, но внутри другого компьютера. Если выражаться проще, то это приложение, которое имитирует компьютер с полноценной операционной системой и аппаратным обеспечением.
Она запускается на изолированном разделе жесткого диска, установленного в компьютере-хосте (так называют системы, в рамках которых запускают ВМ). Благодаря виртуальным машинам пользователи могут тестировать программное обеспечение в различных окружениях (системах, конфигурациях и т.п.) на своем ПК без необходимости запускать и настраивать отдельное устройство.
Как работают виртуальные машины?
Определение виртуальной машины дает базовое понимание того, как все устроено, но мы пойдем чуть дальше. Запуск VM возможен благодаря технологии виртуализации. Она позволяет использовать существующее «железо» для создания его виртуальных копий. Виртуализация имитирует аппаратное обеспечение в цифровом виде для запуска нескольких полноценных операционных систем на одном компьютере поочередно или одновременно. Физическое «железо» в этом случае называется хостом, а виртуальное – гостевой ОС.
Весь процесс управляется приложением, которое называют гипервизором. Гипервизор отвечает за распределение физических ресурсов между виртуальными системами, выделении определенного количества оперативной памяти или пространства на жестком диске. Также он контролирует все процессы, запущенные в гостевых ОС, чтобы не произошло избыточной нагрузки и сбоев в работе систем из-за нехватки ресурсов.
Основные термины и их понимание
Прежде чем идти дальше, стоит изучить основные термины, которые применяются в области виртуализации. Так вы сможете лучше ориентироваться в сущности этой технологии и процессов, которые происходят при ее использовании.
- Виртуальная машина (VM) – конечно, это самый базовый термин. Он используется для обозначения эмулятора компьютера, который работает внутри другого реального компьютера.
- Хостовая система (Host System) – это настоящий компьютер, на котором запускаются виртуальные машины.
- Гостевая система (Guest System) – это виртуальная машина, запущенная на хостовой системе.
- Гипервизор (Hypervisor) – это программа или служба, которая отвечает за создание, управление и обслуживание виртуальных машин.
- Виртуализация (Virtualization) – это процесс создания виртуальной версии чего-либо. Например, аппаратных ресурсов, устройств хранения, сетевых ресурсов, операционных систем и т. д.
- Аппаратная виртуализация (Hardware Virtualization) – это процесс виртуализации аппаратных ресурсов компьютера. То есть гипервизор эмулирует физические ресурсы (например, процессор, память, диск, сеть), чтобы создать виртуальную машину.
- Программная виртуализация (Software Virtualization) – это тип виртуализации, где виртуальная машина интерпретирует инструкции аппаратного обеспечения и преобразует их в инструкции для физического аппаратного обеспечения хостовой системы.
- Виртуализация накопителей (Storage Virtualization) – это процесс объединения физического дискового пространства из нескольких сетевых накопителей и представления их в качестве единого управляемого пространства.
- Виртуализация сети (Network Virtualization) – это процесс объединения ресурсов сети и аппаратных средств в единую программную сеть.
- Виртуализация уровня ОС – это метод виртуализации, где ядро операционной системы поддерживает несколько изолированных экземпляров пользовательского пространства, а не только одно.
- Паравиртуализация – это тип виртуализации, при котором гостевая операционная система подвергается незначительной модификации перед установкой внутри ВМ. В итоге все гостевые ОС в системе будут более эффективно использовать ресурсы.
- Снимок состояния (Snapshot) – это сохраненное состояние виртуальной машины в определенный момент времени. Он позволяет быстро возвращаться к этому состоянию при необходимости.
- Холодная миграция – это процесс переноса виртуальной машины с одного хоста на другой, когда виртуальная машина выключена.
- Горячая миграция (Live Migration) – это процесс перемещения работающей виртуальной машины с одного хоста на другой без значительного прерывания работы.
- Кластеризация – это синхронизация группы серверов таким образом, чтобы они работали как единая система. Такая технология часто используется для обеспечения непрерывности обслуживания и балансировки нагрузки.
- Песочница (Sandbox) – это изолированная среда, в которой программы или файлы могут быть запущены без риска для окружающей среды. Ее можно запустить как на физическом компьютере, так и внутри ВМ.
Каждая из этих концепций играет свою роль в общем процессе работы виртуальных машин, и знание этих терминов поможет вам лучше понять, как именно функционирует виртуализация. При более углубленном изучении темы появляется множество других терминов.
Типы виртуальных машин
По типу ВМ делятся на виртуализацию процесса и виртуализацию ОС. В первом случае виртуальная машина отвечает только за работу конкретного приложения/процесса. По такому принципу работает язык программирования Java. Утилиты, написанные на нем, запускаются только в специальных виртуальных машинах – «прослойках» между аппаратной частью ПК и непосредственно приложением. Во втором случае речь идет об эмуляции полноценной системы.
Также ВМ иногда делят на категории по типу виртуализации:
-
Аппаратная виртуализация. Когда ВМ взаимодействует с физическим оборудованием ПК.
-
Программная. Когда виртуальная машина генерирует «новый ПК» на уровне ПО и использует его для запуска других систем.
Также есть виртуализация накопителей (когда несколько физических хранилищ данных объединяются в одно) и сети (когда несколько физически разных сетей формируют одну виртуальную).
Зачем нужны ВМ?
Виртуальные машины используются в бизнес-среде. Разработка большого количества сервисов сейчас не обходится без ВМ или контейнеров. Разработчики используют их, чтобы гарантировать легкую расширяемость продукта и высокую производительность независимо от количества пользователей.
Некоторые разработчики используют ВМ в утилитарных целях, чтобы проверять работоспособность своих проектов. А кто-то таким образом знакомится с новыми для себя операционными системами. Впрочем, обо всем подробнее.
Тестирование ПО
Благодаря виртуальным машинам, можно тестировать написанный код в различных операционных системах и графических средах, не используя для этого отдельные компьютеры.
Можно запустить на одном ПК несколько ВМ параллельно и запускать в них разрабатываемое приложение. С помощью виртуальных машин можно создать несколько «цифровых компьютеров» с различными характеристиками, чтобы узнать, как ваша программа/сервис будет работать на более слабых устройствах.
Разработка в безопасной среде
Иногда вести разработку на хостовой операционной системе небезопасно. Из-за прямого подключения к корпоративной сети, из-за активности других приложений либо из-за непредсказуемого поведения написанного кода.
Поэтому можно быстро и дешево (или даже бесплатно) организовать безопасную рабочую среду, где можно тестировать любой код, не переживая, что он как-то навредит основной системе или к нему кто-то получит доступ извне.
Виртуальную машину можно лишить доступа к некоторым компонентам ПК или к сети.
Знакомство и работа с новыми ОС
Используя ВМ, можно из праздного интереса установить на ПК какой-нибудь дистрибутив Linux или другую ОС. Неплохой вариант для тех, кто ничем кроме Windows не пользовался и хочет узнать, как там поживают пользователи Linux.
Еще один распространенный сценарий – установка Windows параллельно с macOS в качестве виртуальной машины, чтобы пользоваться эксклюзивными для системы Microsoft продуктами.
Развертывание дополнительных инстансов приложения
Виртуальные машины можно использовать для параллельного запуска нескольких инстансов (то есть действующих копий) одной программы. Это может быть полезно как на этапах тестирования, так и после запуска какого-либо онлайн-сервиса. По такому принципу (если говорить совсем уж обобщенно и абстрактно) работают контейнеры Docker.
Размещение ПО на удаленных серверах
Технологии виртуализации используются на хостинговых платформах. Например, VDS (или VPS) – это Virtual Dedicated Server, то есть виртуальный сервер, имитирующий реальное железо.
На одном физическом сервере несколько VDS запускаются параллельно и работают как отдельные компьютеры для вебмастеров, заплативших за услуги хостинг-провайдера.
Виртуальные машины и контейнеры: в чем разница?
Виртуальные машины и контейнеры – это две смежные технологии, но каждая из них обладает своими особенностями. Они обе предлагают гибкие пути для разработки, развертывания и управления приложениями, но используют разные подходы. И чтобы применять их с максимальной эффективностью, нужно понимать основные различия между ними.
Отличия ВМ
Виртуальная машина содержит свою собственную операционную систему (ОС) и ресурсы, а также имитирует аппаратное обеспечение хоста. Каждая ВМ работает на своем собственном ядре ОС и имеет собственный набор приложений, библиотек и компонентов.
Виртуализация позволяет создать множество изолированных и независимых ВМ на одном физическом сервере, увеличивая эффективность использования ресурсов.
Отличия контейнеров
Контейнеры – это легковесная альтернатива виртуальным машинам. Они представляют собой изолированные среды, которые могут запускать приложения и их компоненты.
В отличие от ВМ, контейнеры не включают в себя полную ОС. Вместо этого они используют ядро хост-системы и изолируют работу программ на уровне процессов. То есть контейнер содержит только приложение и его компоненты.
Контейнеры «упаковывают» программный код и создают неизменяемую среду, которую можно переносить на другие серверы или облачные платформы. А при необходимости можно создать точную копию этой же среды, чтобы быстро развертывать и тестировать свои приложения в идентичных условиях.
Виртуальные машины vs Контейнеры
Сравнивая ВМ и контейнеры, стоит обратить внимание на следующие характеристики:
- Изоляция ресурсов. Виртуальная машина обеспечивает полную изоляцию, так как она имеет собственную операционную систему, сетевые интерфейсы и IP-адреса. Это дает возможность использовать разные ОС на одном физическом сервере или выполнять приложения, которые требуют повышенного уровня безопасности. С другой стороны, контейнеры используют ядро ОС хоста, обеспечивая изоляцию на уровне процессов.
- Ресурсные требования. Виртуальные машины потребляют больше ресурсов, которые нужны для корректной работы собственной ОС и системных процессов. Контейнеры являются более «легкими», так как использование ядра хост-системы требует меньше ресурсов.
- Переносимость. Виртуальные машины можно переносить между серверами, но это требует значительных ресурсов, поскольку они включают в себя полную ОС. Контейнер с приложением проще перенести с одной системы на другую без необходимости в дополнительной настройке. Поэтому они обладают улучшенной портативностью.
- Время запуска. ВМ требует времени для загрузки полной ОС и всех процессов. Контейнеры запускаются почти мгновенно, поскольку они используют ядро хост-системы.
- Управление. Виртуальные машины обычно требуют сложного управления, включая обновление и настройку ОС. Контейнеры, в свою очередь, предлагают более простые и гибкие возможности управления.
- Масштабируемость. Виртуальные машины обладают низкой масштабируемостью из-за больших затрат времени на их создание и удаление. Контейнеры обычно более масштабируемы, поскольку они могут быть быстро созданы и уничтожены, что обеспечивает высокую гибкость при изменении нагрузки.
- Безопасность. Виртуальные машины обеспечивают высокий уровень изоляции и безопасности в определенных сценариях, особенно когда используются разные операционные системы. Контейнеры при изоляции на уровне процесса разделяют ядро ОС, что может представлять потенциальные риски безопасности.
В итоге выбор между виртуальными машинами и контейнерами зависит от конкретных требований и сценариев использования. ВМ могут быть более подходящими для приложений с высокими требованиями к безопасности и изоляции, тогда как контейнеры предлагают большую эффективность, переносимость и скорость для развертывания и запуска приложений.
Облачные вычисления и виртуальные машины
Облачные вычисления – это модель предоставления IT-услуг, при которой пользователи получают через интернет необходимые сервисы.
Например:
- хранение информации;
- серверы;
- базы данных;
- сетевые компоненты;
- программное обеспечение;
- аналитику;
- и прочие.
Виртуальные машины играют ключевую роль в сфере облачных вычислений. Их часто используют в качестве удаленных серверов, которые предоставляются клиентам.
Облачные провайдеры применяют виртуализацию, чтобы увеличить эффективность использования собственных ресурсов. Для этого создаются «облачные виртуальные машины», которые позволяют клиентам получить доступ к вычислительным мощностям удаленного сервера. Такой сервис может пригодиться в тех ситуациях, когда локальный компьютер пользователя имеет низкую мощность, а ему нужно запустить ресурсное приложение.
Виртуальные машины можно использовать во всех основных моделях предоставления услуг облачных вычислений:
- Infrastructure as a Service (IaaS). Пользователи могут арендовать виртуальные машины, серверы, сетевое оборудование и прочие ресурсы. Это дает клиентам максимальную гибкость и контроль, позволяя им управлять своими системами и приложениями на высоком уровне.
- Platform as a Service (PaaS). Провайдеры предоставляют разработчикам среду для проектирования, тестирования, развертывания и обслуживания своего программного обеспечения. Это открывает большие возможности для создания и интеграции приложений без необходимости заботиться о поддержке инфраструктуры.
- Software as a Service (SaaS). Клиенты могут использовать необходимые приложения через интернет, тем самым оптимизировать свою работу. Такие приложения работают на облачных виртуальных машинах, которые могут быстро масштабироваться в зависимости от потребностей.
При этом облачные виртуальные машины предлагают высокую степень масштабируемости. Пользователи могут быстро и легко добавлять больше ВМ по мере необходимости. Этот вариант является оптимальным для бизнеса, который быстро развивается или имеет периодические пики спроса.
Кроме того, облачные виртуальные машины помогают в обеспечении надежности и безопасности. К их важным функциям можно отнести резервное копирование, восстановление данных и высокую доступность.
Преимущества ВМ
Исходя из описанных выше сценариев применения, можно вывести три основных преимущества виртуальных машин над реальным аппаратным обеспечением:
-
ВМ можно установить на любой компьютер. ВМ поддерживают любые ОС, поэтому можно сэкономить окружающее пространство, деньги на покупку дополнительного оборудования и время на установку и настройку компьютеров.
-
На виртуальные машины можно устанавливать устаревшие операционные системы, поддерживающие разного рода архаичное программное обеспечение. Не придется содержать устаревшие компьютеры для их запуска и использования.
-
ВМ легче перезапустить/перенастроить и заново вернуть к работе в случае форс-мажора.
Недостатки ВМ
Из минусов виртуальных машин обычно выделяют два наиболее значимых. Во-первых, стабильность. Большое количество виртуальных машин, запущенных на одном устройстве, могут привести к снижению стабильности и скорости работы основной операционной системы. Хост-компьютер должен соответствовать высоким системным требованиям, что может дорого стоить и ограничивать пользователей в выборе форм-фактора устройства.
Во-вторых, производительность. Даже на мощных ПК виртуальные машины работают ощутимо медленнее, чем хост-система. Нет полноценного контакта ПО с аппаратным обеспечением. Поэтому заставить работать приложения в ВМ так же быстро, как на стандартной ОС, не получится.
Сравнение контейнеров с виртуальными машинами
Принципиальное отличие контейнеров от ВМ заключается в масштабе. Виртуальные машины имитируют полноценный ПК. В них устанавливается система для решения задач пользователя. Контейнеры созданы для изолированного запуска единичных приложений и зависимых компонентов, необходимых для запуска и работы этого приложения.
Контейнеры легче как в плане физического размера, так и в плане скорости освоения. Настроить контейнеры для решения задач бизнеса проще, а возможность взаимодействовать напрямую с ядром системы позволяет загружать изолированные программы быстрее.
Виртуальные же машины куда функциональнее и позволяют запускать в отдельном программном окружении большое количество систем, программ и т.п.
Лучшие программы для создания и настройки ВМ
Чтобы начать работу с виртуальными машинами, нужна специальная программа. Это инструмент, задействующий системные технологии виртуализации, чтобы использовать аппаратное обеспечение хост-системы для запуска дополнительных ОС в изолированном программном пространстве.
Их довольно много, но мы рассмотрим лишь несколько ключевых, использующихся чаще всего.
VirtualBox
Бесплатный продукт компании Oracle, позволяющий создавать ВМ на Windows, macOS и Linux. VirtualBox не обладает высокой производительностью и функционально отстает от конкурентов, но это та цена, которую необходимо заплатить за безвозмездное использование программы.
Ограничений по выбору ОС для запуска в VirtualBox почти нет. Можно найти образ практически любой операционной системы и спокойной установить ее в ВМ. Это касается даже проприетарных разработок компании Apple (но не всех; некоторые современные версии macOS все еще не поддерживаются).
В VirtualBox можно тонко настроить выделенные на ВМ ресурсы и выдать разрешение на использование гостевой системой тех или иных аппаратных составляющих.
VMWare Workstation
Продвинутое решение для профессионалов, нуждающихся в удобном и эффективном рабочем пространстве для виртуализации.
Из важных преимуществ VMWare Workstation стоит выделить поддержку Windows Hyper-V и кластеров Kubernetes. Первое позитивно сказывается на совместимости различных видов оборудования с системами, установленными в ВМ. Второе – позволяет создавать контейнеры и управлять ими из командной строки Windows и Linux.
Стандартная версия VMWare Workstation обойдется примерно в 15 тысяч рублей. Есть бесплатный тестовый период. Можно опробовать все функции утилиты в течение 30 дней.
Parallels Desktop
Лучшая утилита для создания и настройки ВМ на компьютерах Apple. Parallels Desktop – самый быстрый и эффективный способ запустить Windows или отдельные приложения для Windows в macOS.
Из важных плюсов PD стоит выделить тесную интеграцию с компонентами Windows. Можно запускать отдельные win-приложения в графической среде macOS, будто это нативные программы, а не утилиты из виртуальной машины.
В Parallels Desktop есть функция автоматической загрузки, установки и настройки ВМ. Нужно просто указать нужную ОС (на выбор есть Windows, Debian, Fedora, Ubuntu, Android и т.п.) и нажать на кнопку «Установить».
Базовая лицензия Parallels Desktop стоит 4788 рублей.
Microsoft Hyper-V
Microsoft Hyper-V – это встроенная в Windows технология виртуализации, объединенная с одноименным приложением для создания новых ВМ и работы с ними.
Для активации Hyper-V нужно установить последнюю версию Windows 10 Pro, а затем прописать в консоли Power Shell команду для активации технологии виртуализации.
Здесь, как и в случае с Parallels, есть функция быстрого создания виртуальных машин. Можно выбрать одну из предложенных систем (Windows, Ubuntu) или установить систему на выбор, загрузив подходящий образ из сети.
Плюсы Hyper-V кроются в тесной интеграции оного с другими компонентами Windows и аппаратным обеспечением компьютера. Это положительно сказывается на стабильности и производительности виртуальных машин.
QEMU
Кроссплатформенный и быстрый эмулятор для запуска виртуальных машин. С помощью QEMU можно запускать Windows параллельно с Ubuntu или Fedora параллельно с macOS.
Также QEMU можно задействовать для виртуализации на серверных ПК. Поддерживается KVM-виртуализация для развертывания на удаленном компьютере сразу нескольких VDS.
Главное преимущество QEMU – высокая производительность. Разработчики обещают скорость работы гостевых ОС на уровне хост-систем.
KVM
Kernel-based Virtual Machine – это технология виртуализации на уровне центрального ядра для операционной системы Linux. Она позволяет ядру работать в качестве гипервизора, который управляет виртуальными машинами.
Используя KVM, можно создавать, запускать, останавливать и приостанавливать виртуальные машины, а также управлять их ресурсами и мониторить работу. При необходимости можно запускать несколько ВМ с различными операционными системами на одном хосте. Каждая из них будет иметь собственную виртуализированную аппаратную платформу: процессор, память, диски, сетевые адаптеры и прочее. Соответственно, KVM требует, чтобы процессор хоста поддерживал аппаратную виртуализацию (технологии Intel VT или AMD-V).
KVM не является отдельной самостоятельной программой. Это модуль (расширение) Linux, который обеспечивает функциональность виртуализации. Он может быть включен в любой совместимой версии ОС и становится доступным при установке соответствующих пакетов или модулей.
Учитывая, что KVM является частью операционной системы Linux, он бесплатно распространяется под лицензией GPL (General Public License), которая разрешает свободное использование, копирование и изменение программного обеспечения.
Стоит отметить, что существуют платные инструменты и утилиты, которые могут быть использованы вместе с KVM. Например, платформа Red Hat Virtualization включает в себя KVM, но предлагает дополнительные функции и коммерческую поддержку.
Docker
Docker – это открытая платформа от компании Docker Inc. для разработки, доставки и эксплуатации приложений в контейнерах. Она позволяет автоматизировать процесс развертывания приложений и предоставляет средства для их управления и масштабирования.
Для создания контейнеров Docker использует механизмы ядра Linux (cgroups и namespaces). Такие контейнеры работают на одном ядре, но каждый из них имеет свою файловую систему и сетевые интерфейсы, что обеспечивает изоляцию приложений. Эта концепция позволяет более эффективно использовать ресурсы по сравнению с традиционными виртуальными машинами.
Для описания контейнеров используется Dockerfile, в котором указывается необходимая информация:
- основной образ (например, операционная система);
- необходимые компоненты;
- параметры конфигурации;
- команды, которые нужно выполнить при запуске контейнера.
При необходимости Docker можно установить внутри виртуальной машины и в ней же запускать контейнеры. Такой подход часто используют разработчики и облачные сервисы.
Существует также инструмент под названием Docker Machine, который может автоматизировать процесс создания виртуальных машин и установки Docker на них.
Его можно использовать для:
- управления несколькими удаленными виртуальными машинами;
- запуска Docker контейнеров внутри ВМ.
Таким образом, Docker не создает виртуальные машины сам по себе. Но его можно интегрировать с ВМ, чтобы создать гибкую и мощную платформу для разработки, доставки и запуска приложений.
Как настроить виртуальную машину?
Процесс настройки зависит от выбранного инструмента для создания ВМ. Почти всегда процесс упирается в выбор образа гостевой системы и установку параметров аппаратного обеспечения. Многие инструменты предлагают опции для быстрого запуска ВМ. Такие есть в VMWare Workstation, Parallels и Hyper-V.
Немного сложнее устроена программа QEMU. О том, как ее настроить, мы писали ранее.
Самый простой способ:
- Заходим на сайт Oracle.
- Скачиваем и устанавливаем VirtualBox.
- Загружаем образ системы, которую нужно установить в ВМ (в формате ISO).
- Запускаем VirtualBox и нажимаем кнопку «Создать новую…».
- Указываем путь до ISO-файла с системой и жмем «Установить…».
Теперь с виртуальной системой можно работать, как с настоящей.
Мониторинг ВМ
Мониторинг виртуальных машин – это процесс наблюдения и управления их производительностью и ресурсами. Это важная часть эксплуатации ВМ, которая помогает оптимизировать их работу и обеспечить эффективное использование ресурсов.
Для этого существуют специализированные программные решения – системы мониторинга виртуальных машин. Например, Nagios, Zabbix, Prometheus, Grafana и прочие.
Сам процесс происходит в несколько этапов:
- Сбор данных. Первый шаг в мониторинге виртуальной машины – это сбор данных о ее производительности и ресурсах. Сюда относится информация о процессоре, памяти, дисковом пространстве, сетевом использовании и другие параметры. Системы мониторинга могут собирать эти данные в реальном времени и предоставлять актуальную картину производительности ВМ.
- Анализ данных. Это следующий шаг, который может включать отслеживание тенденций, распознавание паттернов использования и выявление проблем с производительностью. Такой анализ помогает найти способы улучшения работы ВМ.
- Алерты. На основе анализа данных системы мониторинга могут создавать предупреждения или алерты при обнаружении потенциальных проблем. Это может быть полезно для раннего выявления и решения проблем, прежде чем они станут критическими.
- Отчетность. Системы мониторинга могут генерировать отчеты, которые помогают определить общую картину производительности виртуальной машины. Это может быть полезно для планирования будущего использования ресурсов, а также для анализа прошлых тенденций.
- Автоматизация. Многие системы мониторинга включают элементы автоматизации, которые реагируют на определенные события или условия. Например, перенаправление трафика или добавление ресурсов при достижении определенного порога использования.
Правильно настроенная и управляемая система мониторинга виртуальных машин может значительно улучшить производительность и эффективность виртуальной среды. А также обеспечить оптимальное использование ресурсов и минимизировать простои.
Вместо заключения
На этом все. Теперь вы знаете, что такое виртуальная машина и какие задачи она помогает решить. Но что еще важнее, теперь вы можете сами создать ВМ!
Комментарии