Nested Virtualization: Установка VMware ESXi внутри Proxmox VE

Alexander Bazhenov
Jul 29, 2016 · 3 min read

Идея использования вложенной виртуализации (Nested virtualization) пришла ввиду некоторых ограничений возможностей Red Hat, на котором построен гипервизор ESXi: изнутри он является сильно видоизмененным дистрибутивом Red Hat, где любые изменения будут сброшены при следующей перезагрузке, а для того, чтобы их внести необходимо собрать vib-пакет. Но далеко не факт, что долгие попытки твиков гипервизора могут принести желаемый результат.

Другой целью могли бы быть какие-то стендовые, экспериментальные и нетривиальные задачи — все что угодно, но только не промышленные системы. Во-первых, весь потенциал ESXi будет ограничен возможностями KVM, которым по факту и является Proxmox. Во-вторых, работа такой “матрешки” может оказаться крайне нестабильной. Ну и, наконец, некоторые операционные системы могут и вовсе не запуститься (например, Windows Server 2012R2).

Для теста использованы:

Proxmox Virtual Environment 4.2–2, • VMware ESXi 6.0.0 U2 • Процессор Intel Xeon E-5 с поддержкой Intel VT-x.

После того, как установлен Proxmox необходимо подключиться по SSH, создать файл-конфигурации и перезагрузить модули:

Для Intel:

# nano /etc/modprobe.d/kvm-intel.confoptions kvm ignore_msrs=y
options kvm-intel nested=Y ept=Y# modprobe -r kvm-intel kvm; modprobe kvm kvm-intel

Для AMD:

# nano /etc/modprobe.d/kvm-amd.confoptions kvm ignore_msrs=y
options kvm-amd nested=Y ept=Y# modprobe -r kvm-amd kvm; modprobe kvm kvm-amd

Создаем виртуальную машину для ESXi:

OS: Other type OS CPU: Cores 2 (минимально необходимые для ESXi) Network Model: VMWare vmxnet3

Теперь для того, чтобы при запуске этой виртуальной машины предотвратить ошибку:

возвращаемся в консоль Proxmox и выполняем:

Для Intel:

# modprobe kvm-intel

Для AMD:

# modprobe kvm-amd

Теперь после того, как установлен ESXi, после создания и запуска в нем любой виртуальной машины натыкаемся на сообщение:

Подключаемся к консоли ESXi по SSH, открываем на редактирование файл-список виртуальных машин:

# vi /etc/vmware/hostd/vmInventory.xml

и видим в нем строчки:

<ConfigRoot>
  <ConfigEntry id=”0000">
  <objID>1</objID>
    <vmxCfgPath>/vmfs/volumes/579b17be-abf9dd22–21c6–323338626763/<VM_name>/<VM_name>.vmx</vmxCfgPath>
  </ConfigEntry>
</ConfigRoot>

где — имя ВМ. Закрываем файл без изменений, открываем конфиг виртуальной машины:

# vi /vmfs/volumes/579b17be-abf9dd22–21c6–323338626763/<VM_name>/<VM_name>.vmx

и добавляем в конце файла следующую строчку:

vmx.allowNested = TRUE

Сохраняем файл и запускаем ВМ.