DevOps & CI/CD

Виртуальная машина

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

Что такое виртуальная машина

Виртуальная машина (ВМ, VM, virtual machine, в разговоре — «виртуалка») — программно созданный компьютер внутри физического. У неё собственная операционная система, своё ядро, свои виртуальные процессоры, память, диск и сетевая карта. Гостевая ОС не подозревает, что железо ей не принадлежит: для неё диск — обычный диск, просто на самом деле это файл на хосте.

Создаёт и обслуживает виртуальные машины гипервизор. Одна физическая машина спокойно держит десятки ВМ — на этом устроены VPS, облачные серверы и корпоративные ЦОД.

Простыми словами: вы арендуете не сервер, а его «нарезку» — и платите за долю, а не за целую железку в стойке.

Из чего состоит ВМ

Ресурс Что это физически
vCPU Такты реального ядра, выделяемые планировщиком гипервизора
RAM Область памяти хоста, отданная гостю
Виртуальный диск Файл (.qcow2, .vmdk, .vhdx) или LVM-том на хосте
Сетевой адаптер Виртуальный интерфейс в мосте или NAT хоста
Конфигурация Описание: сколько чего выдать и откуда грузиться

Диск в виде файла даёт три вещи, недостижимые на голом железе: снапшоты, клонирование за минуты и перенос ВМ на другой хост копированием.

Зачем нужны виртуальные машины

  • Утилизация железа. Сервер с 64 ядрами под одним приложением простаивает на 90%. Разрезанный на ВМ — работает.
  • Изоляция. Упавшая или взломанная ВМ не задевает соседей: у каждой своё ядро.
  • Быстрое развёртывание. Новый сервер — не заявка в закупку, а команда API и полторы минуты.
  • Снапшоты и откат. Снял снимок → обновил систему → сломалось → откатился за секунды.
  • Другая ОС. Windows-приложение на Linux-хосте, старый CentOS ради легаси.
  • Живая миграция. Перенос работающей ВМ между хостами для обслуживания железа.

ВМ vs контейнер

Главная развилка при выборе.

Виртуальная машина Контейнер
Ядро ОС Своё в каждой ВМ Общее ядро хоста
Старт Десятки секунд Миллисекунды
Накладные расходы Гигабайты RAM на гостевую ОС Мегабайты
Изоляция Сильная, на уровне железа Слабее: одно ядро на всех
Гостевая ОС Любая Только совместимая с ядром хоста
Плотность на хост Десятки Сотни

ВМ выбирают, когда нужна другая ОС или жёсткая изоляция (разные клиенты, требования регулятора). Контейнеры — когда нужна плотность и скорость выкатки. В реальности это слои одного стека: ВМ на гипервизоре, контейнеры внутри ВМ.

Как создают ВМ

# KVM/libvirt: создать ВМ из cloud-образа Ubuntu
virt-install --name web-01 \
  --vcpus 4 --memory 8192 \
  --disk path=/var/lib/libvirt/images/web-01.qcow2,size=40 \
  --os-variant ubuntu24.04 \
  --network bridge=br0 \
  --cloud-init user-data=./user-data.yaml \
  --import

virsh list --all              # список ВМ
virsh start web-01            # запустить
virsh snapshot-create-as web-01 before-upgrade   # снапшот
virsh shutdown web-01         # корректно выключить

Первичную настройку гостя (пользователи, SSH-ключи, пакеты) обычно отдают cloud-init, а дальнейшую конфигурацию — Ansible.

GPU в виртуальной машине

По умолчанию гость видит только простую виртуальную видеокарту — для вычислений она бесполезна. Чтобы отдать в ВМ настоящую GPU, применяют GPU passthrough: карта через IOMMU отвязывается от хоста и целиком передаётся гостю, где работает штатный драйвер NVIDIA с производительностью, близкой к нативной. Именно так устроены арендуемые GPU-инстансы. Поделить одну карту между несколькими ВМ позволяет MIG.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер