30.1. Создание виртуальной машины на базе KVM
Прежде чем создать в интерфейсе PVE виртуальную машину (ВМ), необходимо определить следующие параметры:
откуда будет загружен инсталлятор гостевой ОС;
на каком физическом узле будет размещена и запущена ВМ;
в каком хранилище будут размещены дисковые образы ВМ.
Все остальные параметры относятся к конфигурации ВМ и могут быть заданы в процессе создания ВМ (PVE предлагает значения по умолчанию, подходящие для большинства случаев).
Чтобы установить ОС на создаваемую ВМ, необходимо обеспечить возможность загрузки инсталлятора на данной ВМ. Для этого необходимо загрузить ISO-образ инсталлятора в хранилище данных выбранного физического узла или общее хранилище. Это можно сделать через веб-интерфейс (см.
Управление ISO-образами и шаблонами LXC).
Для создания ВМ нажмите кнопку Создать ВМ, расположенную в правом верхнем углу веб-интерфейса PVE:
Процесс создания ВМ оформлен в виде «мастера», типичного для систем управления ВМ.
На вкладке
Общее необходимо указать:
Узел — физический сервер, на котором будет работать ВМ;
VM ID — числовой идентификатор ВМ. Каждый VM ID должен быть уникальным в пределах кластера. По умолчанию идентификаторы назначаются автоматически, начиная с 100 (100, 101, 102 и т.д.). Этот идентификатор используется при выполнении всех операций с ВМ (резервное копирование, работа через интерфейс командной строки, просмотр журналов и т. д.);
Имя — текстовое название ВМ;
Пул ресурсов — логическая группа ВМ. Пулы упрощают управление, мониторинг и применение политик к группам машин. Для возможности выбора пул должен быть предварительно создан.
Диапазон, из которого выбираются новые VM ID при создании ВМ или контейнера, можно настроить на вкладке → , выбрав пункт :
Если значение параметра Нижний предел установить равным значению Верхний предел, автоподстановка VM ID будет полностью отключена.
На вкладке ОС необходимо указать источник установки ОС и тип ОС:
В качестве источника установки ОС можно указать:
Выбор типа гостевой ОС при создании ВМ позволяет PVE оптимизировать некоторые параметры низкого уровня.
30.1.3. Настройка системных компонентов
На следующем этапе (вкладка Система) можно задать базовые параметры виртуального оборудования ВМ, включая тип дисплея, контроллер SCSI, прошивку и тип машины:
При создании ВМ на вкладке
Система доступны следующие параметры:
Видеокарта — влияет на совместимость и производительность графической подсистемы;
Контроллер SCSI — рекомендуется использовать VirtIO SCSI для обеспечения наилучшей производительности и поддержки современных функций (например, hot-plug и TRIM);
Агент QEMU — если гостевая ОС поддерживает агент (например, Windows с установленными драйверами VirtIO или современные Linux-дистрибутивы), рекомендуется включить эту опцию. Это позволяет PVE:
корректно выполнять выключение и перезагрузку ВМ;
создавать снапшоты с согласованием файловой системы (quiesce);
получать информацию о состоянии гостевой ОС (IP-адреса, использование дисков и т.д.);
30.1.3.1. Прошивка (Firmware)
PVE поддерживает два типа прошивки:
Прошивку OVMF (UEFI) рекомендуется выбирать в следующих случаях:
планируется проброс PCIe-устройств (GPU, NVMe и др.);
требуется запуск ОС, поддерживающих только UEFI (например, Windows 11);
необходима поддержка Secure Boot (при соответствующей конфигурации).
При выборе прошивки OVMF для сохранения порядка загрузки, должен быть добавлен диск EFI (см.
BIOS и UEFI):
Тип машины ВМ определяет аппаратную компоновку виртуальной материнской платы (чипсет).
Вкладка Диски содержит параметры настройки виртуальных дисков ВМ.
Основные параметры:
Шина/Устройство — тип виртуального контроллера диска. Допустимые значения: , , и (по умолчанию). Можно также указать идентификатор устройства;
Хранилище — выбор хранилища для размещения образа диска. Тип хранилища определяет доступные форматы образов и поддерживаемые функции (thin provisioning, снапшоты и т. д.);
Размер диска (ГиБ) — размер виртуального диска в гибибайтах (GiB);
Формат — формат образа виртуального диска. Доступные варианты: , и . Формат raw обычно создаётся как полностью выделяемый (thick provisioning), то есть весь объём резервируется сразу (в зависимости от типа хранилища). qcow2 и vmdk поддерживают динамическое выделение пространства (thin provisioning) — объём файла растёт по мере записи данных;
Кеш — определяет, как хост сообщает гостевой ОС о завершении операций записи. По умолчанию используется режим : подтверждение записи возвращается гостю после передачи данных на уровень физического устройства, минуя кеш хоста. Это обеспечивает хороший баланс между производительностью и надёжностью;
Изменение режима кеширования на Write Back может повысить производительность, но увеличивает риск потери данных при сбое питания.
Отклонить (
Discard) — если эта опция активирована и гостевая ОС поддерживает TRIM, контроллер передаёт на хост команды освобождения неиспользуемых блоков. Это позволяет:
освобождать место на thin-хранилищах;
уменьшать размер образов (в зависимости от типа хранилища);
корректно работать с SSD;
IO Thread (Поток ввода-вывода) — создаёт отдельный поток обработки операций ввода-вывода для контроллера дисков (поддерживается для VirtIO SCSI и VirtIO Block).
Рекомендуется включать для ВМ с высокой дисковой нагрузкой (базы данных, файловые серверы).
Для достижения максимальной производительности и лучшей поддержки современных функций рекомендуется использовать:
VirtIO SCSI — современный паравиртуализированный контроллер с поддержкой многопоточности, hot-plug и расширенных функций;
VirtIO Block — упрощённый паравиртуализированный контроллер для базовых задач.
Оба контроллера требуют установки соответствующих драйверов в гостевой ОС. В большинстве современных Linux-дистрибутивов драйверы включены по умолчанию. Для Windows необходимо установить драйверы VirtIO.
30.1.4.1. Добавление нескольких дисков
В мастере создания ВМ можно добавить несколько дисков (кнопка Добавить):
Максимально можно добавить: 31 диск SCSI, 16 — VirtIO, 6 — SATA, 4 — IDE.
30.1.4.2. Ограничение пропускной способности
В разделе Пропускная способность можно задать максимальную скорость чтения/записи с диска (в мегабайтах в секунду или в операциях в секунду):
Используется для ограничения нагрузки отдельных ВМ и предотвращения деградации производительности хранилища.
30.1.4.3. Дополнительные параметры
Опция
Эмуляция SSD заставляет гостевую ОС считать диск твердотельным накопителем, даже если физически он размещён на HDD или сетевом хранилище. Это может:
изменить поведение файловых систем (например, отключить дефрагментацию);
оптимизировать алгоритмы планирования ввода-вывода в гостевой ОС.
Не поддерживается для VirtIO Block (доступно для VirtIO SCSI и некоторых других контроллеров).
Данная настройка не изменяет физические характеристики хранилища, а влияет только на поведение гостевой системы.
Параметр
Асинхронный ввод-вывод определяет способ выполнения операций ввода-вывода:
io_uring — современный и наиболее производительный механизм (рекомендуется);
native — использует Linux AIO;
threads — обработка операций через пул потоков.
Выбор режима зависит от типа хранилища и версии ядра Linux.
Для дисков SCSI и VirtIO можно включить атрибут read-only (отметка Только для чтения). В этом режиме гостевая ОС сможет выполнять только операции чтения.
Снятие отметки с пункта Резервная копия исключает диск из автоматического резервного копирования через механизм резервного копирования PVE.
Установка отметки в пункте Пропустить репликацию исключает диск из заданий репликации.
Репликация поддерживается только для хранилищ типа zfspool. Если ВМ использует репликацию, диски, расположенные на других типах хранилищ, должны иметь включённую опцию Пропустить репликацию.
30.1.5. Настройка процессора (CPU)
На данном этапе настраиваются параметры процессора ВМ:
Сокеты — количество процессорных сокетов ВМ;
Ядра — количество ядер на один сокет;
Тип — тип (модель) эмулируемого процессора.
С точки зрения производительности, как правило, не имеет значения, используется один сокет с четырьмя ядрами или два сокета по два ядра. Однако некоторые программные лицензии учитывают именно количество сокетов, а не ядер. В таких случаях рекомендуется указывать число сокетов в соответствии с лицензионными требованиями.
30.1.5.1. Тип процессора
QEMU поддерживает эмуляцию различных типов CPU — от устаревших (например, 486) до современных (Xeon). Выбор типа влияет на набор доступных CPU-флагов (например, AES, AVX, SSE).
Рекомендации по выбору:
host — точное соответствие CPU хоста. Обеспечивает максимальную производительность, но не поддерживает live-миграцию между хостами с различными моделями CPU;
x86-64-v2-AES — тип по умолчанию в PVE. Требует CPU Intel не ниже Westmere или AMD не ниже Opteron_G4;
kvm64 — совместим практически со всеми x86_64 CPU, но не поддерживает современные инструкции.
Live-миграция между процессорами Intel и AMD не гарантируется.
30.1.5.2. Ограничение CPU-ресурсов
Увеличение количества виртуальных процессоров (vCPU) обычно повышает производительность, особенно для многопоточных приложений: каждому vCPU QEMU сопоставляет отдельный поток выполнения на хосте. Если характер нагрузки неизвестен, безопасным начальным выбором является 2 vCPU.
Параметр
Лимит загрузки (
cpulimit) задаёт максимальное потребление CPU-времени ВМ в процентах от одного физического ядра:
Этот параметр полезен в случаях, когда ВМ требуется несколько vCPU для параллельной обработки, но при этом она не должна полностью загружать все ядра хоста одновременно.
ВМ с 8 vCPU и cpulimit=4.0 при полной загрузке получит максимум 50 % времени каждого физического ядра (эквивалент четырёх полностью загруженных ядер). Если активно используются только 4 vCPU, они могут работать на 100 %.
Следует учитывать, что QEMU может использовать дополнительные потоки для сетевых и I/O-операций, поэтому реальное потребление CPU может немного отличаться от ожидаемого. Для строгого ограничения рекомендуется устанавливать cpulimit, равный количеству vCPU.
Параметр Процессорные единицы (cpuunits) (по умолчанию — 100) определяет относительный приоритет ВМ при распределении CPU-времени между несколькими ВМ. Чем выше значение, тем больше ресурсов получит ВМ по сравнению с другими. Например, если у ВМ A cpuunits=100, а у ВМ B — 200, тВМ B получит вдвое больше CPU-времени при конкуренции за ресурсы. Подробнее см. man systemd.resource-control (параметр CPUWeight соответствует cpuunits).
Параметр Привязка к ядрам ЦП (affinity) позволяет указать, на каких физических ядрах хоста будут выполняться vCPU ВМ. Задаётся в формате списка (например, 0-1,8-11).
Привязку следует использовать только при необходимости (например, для низколатентных задач или real-time-задач). Она усложняет миграцию ВМ и может привести к неравномерной загрузке ядер хоста.
30.1.5.3. Дополнительные флаги ЦП
Таблица 30.1. Дополнительные флаги ЦП
|
Флаг
|
Описание
|
Примечание
|
|
nested-virt
|
Управление вложенной виртуализацией: svm для AMD и vmx для Intel
|
Требует включения в BIOS/UEFI. Live-миграция возможна только при совпадении флага на обоих хостах. Рекомендуется использовать модель CPU того же производителя, что и хост (не x86-64-vX)
|
|
md-clear
|
Сообщает гостевой ОС о корректной защите от MDS (Microarchitectural Data Sampling)
|
Используется современными механизмами смягчения MDS-уязвимостей
|
|
pcid
|
Снижает накладные расходы исправления Meltdown (KPTI) на CPU Intel Westmere, Sandy Bridge и Ivy Bridge
|
Актуально только для указанных поколений Intel
|
|
spec-ctrl
|
Включает расширенные механизмы защиты от Spectre v1/v2 на процессорах Intel
|
Улучшает эффективность mitigation Spectre v1/v2
|
|
ssbd
|
Защита от уязвимости Speculative Store Bypass (Spectre v4) для Intel
|
Требуется поддержка со стороны CPU и ОС
|
|
ibpb
|
Базовый механизм защиты от Speculative Store Bypass для AMD
|
Обычно используется совместно с amd-ssbd
|
|
amd-ssbd
|
Оптимизированная защита от Spectre v4 на AMD
|
Рекомендуется включать вместе с virt-ssbd
|
|
amd-no-ssb
|
Указывает гостевой ОС, что хост не уязвим к Spectre v4 (AMD)
|
Используется для отключения лишних mitigations внутри гостя
|
|
pdpe1gb
|
Разрешает гостевой ОС использовать страницы памяти размером 1 ГБ (если поддерживается аппаратно)
|
Улучшает производительность при работе с большими объёмами RAM
|
|
hv-tlbflush
|
Улучшает производительность Windows-гостей при избыточном выделении CPU (overcommit)
|
На старых CPU может вызывать BSOD
|
|
hv-evmcs
|
Повышает производительность вложенной виртуализации в Windows-гостях
|
Поддерживается только на процессорах Intel
|
|
aes
|
Включает набор инструкций AES для аппаратного ускорения шифрования
|
Рекомендуется для ВМ, использующих шифрование (VPN, TLS, дисковое шифрование)
|
Флаги hv-* (Hyper-V enlightenments) полезны только для Windows-гостей и игнорируются Linux.
Для защиты от уязвимостей Meltdown и Spectre необходимо включить соответствующие CPU-флаги (если они поддерживаются хостом и гостевой ОС).
Intel:
pcid — снижает накладные расходы KPTI (Meltdown);
spec-ctrl — защита от Spectre v1/v2;
ssbd — защита от Spectre v4.
AMD:
ibpb — защита от Spectre v1/v2;
virt-ssbd, amd-ssbd — защита от Spectre v4;
amd-no-ssb — указывает, что CPU не уязвим к Spectre v4.
При использовании типа host флаги virt-ssbd и amd-no-ssb не включаются автоматически — при необходимости их следует добавить вручную.
Проверка уязвимостей хоста:
$ for f in /sys/devices/system/cpu/vulnerabilities/*; do echo "${f##*/} -" $(cat "$f"); done
Если хост использует NUMA-архитектуру, рекомендуется включить NUMA в настройках ВМ. Это улучшает распределение памяти и CPU-ресурсов и является обязательным условием для горячего подключения RAM и CPU.
При включённом NUMA рекомендуется задавать количество сокетов ВМ равным числу NUMA-узлов хоста.
30.1.5.5. Горячее подключение CPU (vCPU hot-plug)
Горячее подключение CPU поддерживается в Linux начиная с ядра ≥ 3.10 (рекомендуется ≥ 4.7) и позволяет добавлять процессоры без перезагрузки ВМ.
Максимальное число vCPU определяется как:
cores × sockets
Начальное количество активных CPU задаётся параметром
vcpus.
Для автоматического включения новых CPU в гостевой системе можно создать правило udev:
# /etc/udev/rules.d/99-hotplug-cpu.rules
SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}="1"
Удаление CPU (hot-unplug) зависит от гостевой ОС и не всегда поддерживается.
На вкладке Память необходимо указать объем оперативной памяти, выделяемой ВМ:
30.1.6.1. Фиксированное выделение памяти
Если значения в полях Память и Минимум памяти совпадают, PVE выделяет ВМ фиксированный объём оперативной памяти.
Даже при фиксированном объёме к ВМ автоматически подключается устройство баллонирования (ballooning). Оно позволяет отслеживать фактическое потребление памяти гостевой ОС. Отключать его рекомендуется только в целях отладки. Отключение возможно:
30.1.6.2. Динамическое выделение памяти (Autoallocate)
Если значение параметра
Минимум памяти меньше значения
Память, PVE динамически регулирует объём оперативной памяти, выделяемый ВМ:
Минимум памяти — гарантированно доступный объём памяти;
Память — предел, до которого может увеличиваться объём;
RAM usage target for ballooning (Целевой объём ОЗУ для динамического изменения объёма памяти) — по умолчанию 80% (настраивается в параметрах узла).
Когда хост испытывает нехватку памяти, ВМ освобождает избыточные страницы через баллон-драйвер внутри гостевой ОС. При критической нехватке памяти на хосте могут срабатывать механизмы OOM killer или использоваться свопинг, что приводит к снижению производительности.
Рекомендуется всегда оставлять не менее 1 ГБ оперативной памяти для нужд хоста (без учёта ВМ).
При использовании динамического распределения памяти несколькими ВМ можно задать коэффициент Общие ресурсы (Shares). Он определяет долю свободной памяти, которая будет распределяться между ВМ пропорционально заданным значениям.
Пример. Хост с 32 ГБ RAM использует 16 ГБ. Целевой уровень — 80%. Доступный объём для распределения:
32 × 0,8 − 16 = 9,6 ГБ
Параметры:
Распределение:
Для корректной работы динамического выделения памяти в Windows требуется установка balloon-драйвера (VirtIO). Возможны незначительные накладные расходы по производительности. Не рекомендуется использовать динамическое изменение памяти для критически важных систем с жёсткими требованиями к стабильности и задержкам.
Параметр Allow KSM (Разрешить KSM) (по умолчанию включено) разрешает объединение одинаковых страниц памяти данной ВМ с помощью механизма KSM (Kernel Samepage Merging).
Использование KSM позволяет снизить общее потребление ОЗУ на хосте при наличии большого количества однотипных ВМ, однако может незначительно увеличивать нагрузку на ЦП.
Вкладка Сеть содержит параметры настройки виртуальных сетевых интерфейсов ВМ.
Основные параметры:
Нет сетевого устройства — при выборе данного параметра этап настройки сети будет пропущен;
Сетевой мост — указывает интерфейс моста, используемый для подключения ВМ (по умолчанию — vmbr0). Каждый виртуальный сетевой адаптер (NIC) связывается с TAP-устройством на хосте, которое добавляется в указанный мост. В этом режиме виртуальная машина получает прямой доступ к локальной сети и работает как физическое устройство;
Режим NAT настраивается только через CLI или API.
При использовании NAT применяется встроенный стек QEMU (user networking). ВМ получает IP-адрес из диапазона 10.0.2.0/24 через встроенный DHCP-сервер. Такой режим подходит для тестирования, но не рекомендуется для производственной среды.
Тег VLAN — задаёт идентификатор VLAN для виртуального интерфейса (требуется поддержка VLAN на мосте/физическом интерфейсе);
Сетевой экран — включает поддержку встроенного межсетевого экрана для данной ВМ;
Модель — тип эмулируемого сетевого адаптера (см.
Модель сетевого интерфейса). Для максимальной производительности ВМ рекомендуется использовать ;
MAC-адрес — по умолчанию PVE автоматически генерирует уникальный MAC-адрес для каждого интерфейса. При необходимости можно указать пользовательский MAC-адрес вручную.
Таблица 30.2. Модель сетевого интерфейса
|
Тип
|
Описание
|
Рекомендации
|
|
Intel E1000
|
Эмуляция гигабитной сетевой карты Intel
|
Используется по умолчанию; совместим практически со всеми ОС
|
|
Intel E1000E
|
Эмуляция более современной версии Intel Gigabit Ethernet
|
Используется при необходимости расширенной совместимости
|
|
VirtIO
|
Паравиртуализированный сетевой адаптер
|
Рекомендуется для максимальной производительности. Требует установки драйверов в гостевой ОС
|
|
Realtek RTL8139
|
Эмуляция сетевой карты 100 Мбит/с
|
Используйте только для очень старых ОС (выпущенных до 2002 г.)
|
|
VMware vmxnet3
|
Паравиртуализированный адаптер VMware
|
Применяется при импорте ВМ из других гипервизоров (например, VMware)
|
30.1.7.1. Дополнительные настройки
Дополнительные настройки:
Отключить — позволяет временно отключить сетевой интерфейс ВМ без его удаления из конфигурации;
Ограничение скорости — позволяет задать максимальную пропускную способность интерфейса (rate limit). Используется для ограничения сетевого трафика отдельных ВМ и предотвращения перегрузки канала;
MTU — позволяет для адаптеров VirtIO вручную задать значение MTU. Если поле оставить пустым или указать mtu=1, будет использовано значение MTU, заданное на базовом мосте (например, vmbr0).
Multiqueue (Мультиочередность) — позволяет обрабатывать сетевой трафик параллельно несколькими vCPU, что увеличивает пропускную способность и снижает задержки при высокой нагрузке.
Настройка Multiqueue:
В PVE укажите количество очередей, равное числу vCPU ВМ (vCPU = сокеты × ядра);
В гостевой ОС активируйте поддержку RSS (Receive Side Scaling):
Linux:
# ethtool -L ens1 combined <число_vCPU>
Windows:
Установите драйверы VirtIO Ethernet Adapter.
Откройте Диспетчере устройств → свойства сетевого адаптера.
На вкладке «Дополнительно» включите параметр Receive Side Scaling и установите значение Maximum number of RSS Queues равным числу vCPU.
Multiqueue увеличивает нагрузку на CPU хоста и гостевой системы. Используйте данную функцию только при высокой сетевой нагрузке (например, для маршрутизаторов, reverse-proxy или нагруженных веб-серверов).
Последняя вкладка Подтверждение отобразит все введенные или выбранные значения для ВМ:
Для создания ВМ следует нажать кнопку Завершить. Если необходимо внести изменения в параметры ВМ, можно перейти по вкладкам назад. Если отметить пункт Запуск после создания ВМ будет запущена сразу после создания.