Виртуализация
Что такое Nested virtualisation?
Nested virtualisation lets a virtual machine itself run virtual machines, by exposing the processor virtualisation extensions to the guest. It is required for Proxmox VE, VM-based CI jobs and some Docker configurations. Many providers disable it, which is the usual reason those workloads fail elsewhere.
Почему Nested virtualisation важен
Он обязателен для Proxmox VE, CI-задач на основе VM и некоторых конфигураций Docker. Многие провайдеры отключают его, что обычно и является причиной сбоев таких нагрузок в других местах.
Nested virtualisation на практике
Когда вы используете вложенную виртуализацию, вы загружаете гипервизор внутри гостевой системы KVM и передаёте расширения виртуализации хостового CPU. Вам нужно проверить /proc/cpuinfo в гостевой системе на наличие флагов svm или vmx. Если они отсутствуют, ваш внутренний гипервизор переходит на программную эмуляцию, что может снизить производительность на порядок. Возможно, вам также придётся включить тип CPU «host» вместо общего, чтобы получить эти флаги. Если ошибётесь, ваша нагрузка Proxmox или CI будет еле ползти.
Что люди часто понимают неправильно в отношении Nested virtualisation
Люди предполагают, что вложенная виртуализация нужна только для запуска полных ОС вроде Windows в ВМ. Исправление: она также ломает стандартный оверлейный сетевой стek Docker и некоторые модули ядра, потому что они зависят от функций виртуализации внутри гостевой системы. Так что контейнерная нагрузка может не работать у провайдера, отключившего вложенность, даже если вы не собирались запускать ВМ.
Nested virtualisation — частые вопросы
Можно ли запускать Docker внутри вложенной ВМ?
Да, и это самая частая причина, по которой людям нужна вложенная виртуализация. Стандартный мостовой сетевой стek Docker использует iptables и модули ядра, которые могут вести себя иначе без раскрытых расширений CPU. Наши планы KVM включают вложенную виртуализацию, поэтому ваши контейнеры Docker работают как ожидается.
Как проверить, включена ли вложенная виртуализация?
Внутри вашей ВМ выполните grep -E '(svm|vmx)' /proc/cpuinfo. Если вы видите эти флаги, вложенность доступна. Если нет, гипервизор их не раскрывает, что обычно означает, что провайдер отключил это.
Где встречается Nested virtualisation
- Можно ли запускать вложенную виртуализацию на VPS? Да. Вложенная виртуализация включена на каждом инстансе OnionVPS, поэтому вы можете запускать гостевые KVM внутри своего инстанса, устанавливать Proxmox VE…
- Какой самый дешёвый VPS, который действительно пригоден для работы? Примерно за $4 в месяц вы получаете 1 vCPU, 1 ГБ ОЗУ и 20 ГБ NVMe на настоящей KVM-виртуализации. Этого действительно достаточно для WireGuard VPN, DNS-рез…
- Что такое KVM-виртуализация? KVM (Kernel-based Virtual Machine) — это полная аппаратная виртуализация, встроенная в ядро Linux, использующая расширения процессора для запуска каждой го…
- KVM vs OpenVZ: why the virtualisation type matters KVM — это полная аппаратная виртуализация: ваш экземпляр работает на собственном ядре и не видит хост. OpenVZ и LXC — это контейнерные технологии, использу…
Больше из раздела «виртуализация»
- KVM
- KVM — это полная аппаратная виртуализация, встроенная в ядро Linux, предоставляющая каждому гостю собственное ядро и аппаратно-обеспеченную изоляцию от других арендаторов.
- OpenVZ
- OpenVZ — это контейнерная виртуализация, в которой каждый экземпляр разделяет ядро хоста, поэтому гости не могут загружать модули ядра или запускать другую операционную систему.
- LXC
- LXC — это нативная контейнеризация Linux, которая изолирует процессы с помощью namespace и cgroups, разделяя ядро хоста.
- Гипервизор
- Гипервизор — это программный слой, который создаёт и запускает виртуальные машины, распределяя между ними физические CPU, память и ввод-вывод.
- vCPU
- vCPU — это виртуальный процессор, предоставляемый гостевой системе, поддерживаемый временем планирования на физическом ядре или потоке.
- cloud-init
- cloud-init — стандартный механизм настройки виртуальной машины при первой загрузке, использующий метаданные, предоставляемые платформой.