Вложенная виртуализация позволяет запускать гипервизор внутри виртуальной машины. Это необходимо, чтобы не экспериментировать на боевой системе, рискуя уронить всё и сразу, а потом долго и мучительно поднимать её под добрые слова коллег о прямизне конечностей и чьей-то матери. Если вы хотите потестить вложенную виртуализацию, изучите наш туториал.  Перед вами пошаговое руководство по подготовке шаблона vApp для VMware Cloud Director, включающего в себя vCenter Server Appliance и 3 гипервизора ESXi, с целью снижения временных затрат на развертывании тестовой инфраструктуры VMware. Что мы будем делать  1.1.    Список VM в шаблон  1.2.    Требования Схема логической топологии   Подготовка Working Environment  3.1.    Установка ESXi  3.2.    Установка ManagementVM  3.3.    Установка vCenter Server Appliance   Создание шаблона vApp 4.1.    Подготовка vApp   4.2.    Создание ESXi VM в vApp   4.3.    Кастомизация ESXi в vApp  4.4.    Установка vCenter Server Appliance в vApp  4.5.    Установка Windows Server 2019 в vApp  4.6.    Установка Ubuntu 18.04 LTS в vApp  4.7.    Удаление ISO приводов и сетевых адаптеров    Выгрузка vApp шаблона из Working Environment     Загрузка vApp в VMware Cloud Director    Мы подготовим максимально гибкий шаблон без привязки к адресу подсети, доменному имени, количеству выделяемых ресурсов и т.п. Будем делать так, чтобы при развертывании шаблона администратор мог произвести тонкую настройку. Подготовка шаблона выполняется в сети 10.0.0.0/24, а за стандартные значения при развертывании готового шаблона примем домен Domain.local и сеть 192.168.2.0/24. Имя домена domain.local и сеть 192.168.2.0/24 выберем как значения по умолчанию, которые можно изменять в процессе развёртывания шаблона. Мы подготовим шаблон, включающий в себя 6 виртуальных машин. VMware ESXi – 1 Гипервизор; VMware ESXi – 2 Гипервизор; VMware ESXi – 3 Гипервизор; VMware vCenter Server Appliance with Embedded Platform Services Controller в конфигурации Tiny; Ubuntu 18.04 LTS в качестве общего NFS хранилища; Windows Server 2019 в качестве DNS сервера и Management machine. В последствии, с нее будет производится управления vCenter. VDC в VMware Cloud Director: a.       28 vCPU; b.       50GB RAM; c.       2TB Storage. Дистрибутивы ПО: a.       ISO с дистрибутивом VMware ESXi 6.7U3b; b.       ISO (или OVA) с дистрибутивом VMware vCenter Server Appliance 6.7U3b; c.       ISO (или OVA) с Windows Server 2019; d.       ISO (или OVA) с Ubuntu1804. Дополнительное ПО (опционально): a.       Браузер Google Chrome; b.       Текстовый редактор Notepad++; c.       SFTP клиент WinSCP. d.       7-Zip Убедитесь, что в нашей локальной сети на уровне vCenter облачного провайдера переключены в состоянии Accept политики Promiscuous mode и Forged transmits. Иначе не будет связи между сетью виртуального дата-центра и сетью внутри подготавливаемого шаблона. Здесь об этом рассказывается подробнее. Дистрибутивы продуктов VMware можно скачать с официального сайта, зарегистрировавшись в программе обучения и получив VMware Evaluation License на 60 дней. Возможностей VMware Cloud Director для подготовки данного шаблона будет недостаточно, поэтому сначала развернём нашу рабочую среду «Working Environment» в виртуальном дата-центре VMware Cloud Director. В рабочую среду мы установим ESXi гипервизор, vCenter Server Appliance и Windows Server 2019 в качестве ManagementVM. Подготовку шаблона будем выполнять, используя интерфейс vSphere Client в рабочей среде. В VDC создаём каталог (Libraries -> Catalogs -> New) и загружаем в него ISO с установщиком ESXi. Создаём VM temp-ESXi1 – ESXi 6.7. Выбираем загрузку с ISO. Назначаем VM 24 vCPU, 24 Cores per socket, 32GB RAM и 5GB Storage. Подключаем сеть к виртуальной машине. ESXi требует для развёртывания минимум двухъядерные процессоры. Установка на 24 одноядерных vCPU завершится ошибкой, поэтому необходимо задать отличный от единицы параметр Cores per socket.  Запускаем VM. Выполняем установку, нажимая Enter или F11 В процессе установки задаём пароль root Нажимаем F11 и дожидаемся завершения установки По завершению установки нажимаем Enter и перезагружаемся Дожидаемся окончания загрузки, нажимаем F2, вводим пароль root Переходим в настройки сети Configure Management Network. Задаём статический IP. Отключаем IPv6. Перезагружаем VM для применения отключения IPv6. Для применения остальных настроек достаточно перезапуска сетевого адаптера. В VMware Cloud Director подключаем к temp-ESXi1 ещё один диск на 1ТБ. Это будет наш Datastore. Перезагружаем VM temp-esxi1. Разворачиваем VM с Windows Server 2019. Настраиваем доступ по RDP. Подключаемся по RDP к VM c Windows Server. Устанавливаем роль DNS сервера. Создаём Forward Lookup Zone template.local   Создаём Reverse Lookup Zone для 0.0.10.in-addr.arpa Создаём A и PTR записи в созданных зонах для temp-esxi01 и vcentersa1. Важно! PTR запись для vCenter должна быть обязательно. Без неё установка vCenter завершится ошибкой. Настраиваем DNS Forwarders. Настраиваем DNS сервер 127.0.0.1 на сетевом интерфейсе.  Монтируем образ VMware-VCSA-all-6.7.0-14367737.iso на ManagementVM и извлекаем из ISO E:\vcsa\VMware-vCenter-Server-Appliance-6.7.0.40000-14367737_OVF10.ova Переходим в vcd.cloud4y.ru в свой VDC. Загружаем в каталог OVA шаблон с vCenter. Для загрузки понадобится 300 ГБ свободного места в VDC.  Получаем ошибку  В логе видим текст ошибки Validation failed for the OVF file you provided: Fatal: Line/char 867/92: cvc-minInclusive-valid: Value '-100' is not facet-valid with respect to minInclusive '0' for type 'unsignedShort'. Fatal: Line/char 867/92: cvc-attribute.3: The value '-100' of attribute 'ovf:id' on element 'OperatingSystemSection' is not valid with respect to its type, 'unsignedShort'.. VMware Cloud Director не принимает значение -100 на строке 867 *.ovf файла. Возвращаемся на ManagementVM и с помощью архиватора 7-zip извлекаем *.ovf и *.mf файлы. OVA представляет из себя архив tar, и, как правило, содержит файлы виртуальных дисков *.vmdk, файл конфигурации VM/vApp *.ovf, список файлов в архиве и их контрольные суммы *.mf  Открываем *.ovf через текстовый редактор и ищем -100 на 867 строке и заменяем на 1 Теперь нам нужно пересчитать SHA1 для *.ovf файла и изменить это значение в *.mf файле Для расчета хеша используем PowerShell (Get-FileHash C:\Users\Administrator\Desktop\VMware-vCenter-Server-Appliance-6.7.0.40000-14367737_OVF10.ovf -Algorithm SHA1).Hash.ToLower() Заменяем значение в *.mf файле Запаковываем *.ovf и *.mf обратно в OVA шаблон Пробуем загрузить OVA в VDC ещё раз. По завершению загрузки разворачиваем vApp с vCenter в нашем VDC Выделяемые ресурсы vCPU, RAM, Storage не меняем. Больше ресурсов не требуется, а при меньшем значении могут возникнуть проблемы с производительностью. Конфигурируем сеть. На шаге 8 ничего не меняем. Мы изменим эти параметры позже. Нажимайте Next. Если при развёртывании шаблона что-то пойдёт не так, придётся заполнять эти поля ещё раз при повторном развёртывании. Дожидаемся окончания развёртывания и перемещаем VM в vApp vcsa + esxi для наглядности. С технической точки зрения разницы нет. По окончанию перемещения наш vApp vcsa + esxi выглядит следующим образом. Переходим в Guest Properties temp-vcentersa1 и нажимаем Edit Заполняем поля, указанные в таблице ниже. Остальные поля заполнять не обязательно Наименование параметра Описание параметра Значение параметра Domain Name   Имя домена (DNS суффикс) template.local Host Network IP   Address Family   Семейство IP ipv4 Host Network   Mode   IP Mode static Host Network IP   Address   IP адрес vCenter 10.0.0.110 Host Network   Prefix   Префикс подсети 24 Host Network   Default Gateway   IP шлюза по умолчанию 10.0.0.1 Host Network DNS   Servers   Адреса DNS серверов 10.0.0.102 Host Network   Identity   FQDN vCenter temp-vcentersa1.template.local Directory Username   Логин учетной записи администратора в   SSO домене. Используется для аутентификации в веб интерфейсе vCenter administrator@vsphere.local Directory   Password   Пароль учетной записи администратора в   SSO домене. Используется для аутентификации в веб интерфейсе vCenter *пароль* Directory Domain   Name   Имя домена SSO. Должно соответствовать   домену, указанному в логине учетной записи администратора vsphere.local Root Password Пароль root от консоли vCenter *пароль* Tools-based Time   Synchronization Enabled Использовать VM Tools для синхронизации   времени с гипервизором. + На случай, если мы где-то ошиблись в заполнении параметров, можно создать Snapshot перед первым запуском. Запускаем VM и ждём 5-10 минут. Через браузер с ManagementVM переходим на https://temp-vcentersa1.template.local:5480/ и дожидаемся окончания установки. Нажимаем Set Up Вводим пароль root, указанный ранее в Guest Properties На шаге 2 проверяем корректность настроек. Редактируем при необходимости. На шаге 3 создаём новый SSO домен. Проверяем корректность параметров и нажимаем Finish. Если установка завершится ошибкой на 2%, то проблема почти наверняка кроется в некорректно созданной PTR записи для vCenter. Дожидаемся окончания установки   Переходим по адресу https://temp-vcentersa1.template.local:443, выбираем LAUNCH VSPHERE CLIENT (HTML5) Вводим учётные данные Администратора SSO домена   Скачиваем сертификат CA и устанавливаем в систему https://temp-vcentersa1.template.local/certs/download.zip . Необходимо установить сертификат download.zip\certs\win\*.crt в доверенные корневые центры сертификации ManagementVM и перезапустить браузер. В vCenter создаём дата-центр. В дата-центре создаём кластер. Включаем vSphere DRS.  vSphere HA и VSAN оставляем выключёнными. C 1 ESXi гипервизором DRS работать не будет, но он должен быть включён для работы с vApp. Переходим в Configure - > Configuration –> Quickstart кластера temp-Cluster и добавляем temp-ESXi1, нажав ADD. Выбираем наш хост temp-esxi1.template.local и вводим учётные данные root. Принимаем его сертификат и завершаем работу с Quickstart. Нужно добавить temp-esxi1 в кластер. Продолжать настройку кластера необходимости нет.  Добавляем Datastore в наш кластер. Кликаем правой кнопкой мыши по кластеру и выбираем Storage -> New Datastore. Выбираем тип VMFS Задаём имя Datastore и выбираем подключенный ранее диск на 1 ТБ на temp-ESXi1. На шаге 4 указываем использование всего раздела на 1 ТБ и завершаем работу мастера. Выводим temp-esxi1 из Maintenance Mode Подготовка инфраструктуры для создания шаблона завершена. Кликаем на кластер правой кнопкой мыши и создаём новый vApp: vApp_vCenter6.7_3ESXi6.7_UbuntuNFS_WindowsDNS В vApp будут следующие VM: ESXi01 ESXi02 ESXi03 vCenterSA01 WindowsDNS UbuntuNFS01 UbuntuNFS — это имитация внешней СХД. На ней будет Datastore, доступный всем ESXi хостам. ESXi0x устанавливаем из ISO. vCenterSA01, WindowsDNS, UbuntuNFS можно развернуть из OVA шаблонов. Добавим ISO с установщиком ESXi в temp-Datastore. Переходим в Datastores -> temp-Datastore -> Files, создаём папку ISO и загружаем в неё ISO образ установщика ESXi На шаге 2 задаём имя VM. На шаге 3 выбираем vApp, в котором будут размещены VM. На шаге 6 выбираем тип гостевой ОС. На шаге 7 выбираем 2 vCPU, 4GB RAM, 5GB Storage и подключаем ISO. Разверните подраздел CPU и отметьте пункт Hardware virtualization. Перейдите на вкладку VM Options и снимите отметку с пункта Secure Boot. Клонируем VM ESXi01 в VM ESXi02 и в VM ESXI03. Запускаем vApp и выполняем установку ESXi01, ESXi02, ESXi03. Настраиваем на ESXi IP адреса: ESXi01 - 10.0.0.11 ESXi02 - 10.0.0.12 ESXi03 - 10.0.0.13 На каждом ESXi хосте включаем доступ по SSH (F2 -> Troubleshooting Options - > Enable SSH) Добавим ESXi хостам возможность кастомизации сетевых параметров из интерфейса VMware Cloud Director (и vSphere Client). Для этого подключимся с помощью WinSCP к хосту, перейдём в каталог /etc/rc.local.d и откроем текстовым редактором файл local.sh   Заменим содержимое local.sh следующим скриптом: Сохраним файл и выключим хост ESXi из меню выключения.  Важно: для каждого ESXi хоста применятся своя версия скрипта. Это связано с тем, что в ovf.xml передаются все параметры Guest Properties каждой VM в vApp.  Для ESXi02 в скрипте нужно у всех переменных заменить число в конце переменной на 2. $rootpassword1 заменить на $rootpassword2 $ipaddr1 заменить на $ipaddr2  и т.д. После того, как мы добавили скрипты на каждый ESXi хост, через vCenter кликаем на VM -> Configure -> vApp Options -> Edit Отмечаем пункт Enable vApp options, а на вкладке OVF Details отмечаем пункт VMware Tools. Это нужно для того, чтобы VMware Tools передали ovf.xml внутрь гостевой ОС ESXi  Переходим VM -> Configure -> vApp Options, пролистываем вниз и нажимаем ADD.  Для ESXi01 нужно добавить следующие Properties: enablecustomization1; rootpassword1; fqdn1; ipaddr1; netmask1;  defaultgateway1;  dnsserver1. В поле Category указываем название подраздела, в поле Label – отображамое имя параметра, а в поле Key ID – имя переменной, которую обрабатывает скрипт кастомизации. Эти параметры можно будет задать в интерфейсе VMware Cloud Director в процессе развёртывания шаблона. Скриншот для наглядности ниже. Нажимаем ADD и добавляем Properties. На вкладке Type мы можем выбрать тип параметра, в нашем случае все параметры строковые (String), и выбрать значение по умолчанию (Default value). Это значение будет автоматически подставлено при развёртывании шаблона. Создаём property для каждого параметра на каждом ESXi хосте. Корректно заполненные Properties должны выглядеть, как на скриншотах ниже. Добавим OVA с vCenter Server Appliance vApp. Конфигурировать и запускать не будем. Выбираем OVA шаблон vCenter В процессе развёртывания оставляем все значения «По умолчанию». Просто нажимаем Next на каждом этапе и дожидаемся окончания развёртывания. Затем необходимо установить Windows Server 2019 и Ubuntu 18.04 LTS. Это можно сделать, используя ISO-образы, но я пойду более простым путём и разверну их из OVA шаблонов, предварительно скачанных из публичных каталогов VMware Cloud Director (vcd.cloud4y.ru). Разворачиваем Windows Server из OVA шаблона. Запускаем VM. Включаем удалённое управление по RDP. Устанавливаем роль DNS сервера. Создаём Forward Lookup Zone для domain.local. Создаём Reverse Lookup Zone для 2.168.192.in-addr.arpa. Выключаем VM. Концепция следующая: При развёртывании шаблона в VMware Cloud Director подключаем к VM с Ubuntu 18.04 LTS дополнительный диск, форматируем его в ext4 и расшариваем в нашей подсети средствами NFS.  Настраиваем сеть. Устанавливаем обновления: apt install update && apt install upgrade -y Устанавливаем NFS сервер: apt install nfs-kernel-server nfs-common -y Внесём закомментированные строки, которые будет достаточно раскомментировать в случае развёртывания в стандартной конфигурации. Редактируем /etc/fstab Редактируем /etc/exports Выключаем все запущенные VM в vApp. Переходим в настройки каждой VM и удаляем все CD-приводы и сетевые адаптеры каждой VM в vApp. CD-приводы нам более не требуются. Сетевые адаптеры удаляем во избежание конфликтов при развёртывании шаблона. Выгрузка шаблона из vCenter. Теперь мы можем выгрузить шаблон. По окончанию скачивания получаем набор файлов, готовых к загрузке в VMware Cloud Director. Общий размер 11,5 ГБ, но в VMware Cloud Director потребуется около 350ГБ, т.к. у нас используются Thin (тонкие) диски, а VMware Cloud Director рассчитывает размер не по текущему размеру диска, а по максимальному (до которого диски могут быть расширены). Переходим в vcd.cloud4y.ru и загружаем vApp из OVF. Нажимаем Browse и выбираем все файлы, которые мы экспортировали из vCenter. На последующих шагах принимаем EULA и не вносим изменений в параметры развёртывания. Нажимаем Next-> Next -> … -> Finish. Дожидаемся окончания загрузки. Теперь мы можем сохранить готовый vApp в каталог. Надеемся, что наш туториал по подготовке шаблона vApp тестовой среды VMware vCenter + ESXi в VMware Cloud Director будет вам полезен при работе с вложенной виртуализацией и подготовке среды для неё. Да, в первую очередь информация будет полезна инженерам облачного провайдера. Но для понимания принципов работы облачной инфраструктуры статью можно прочитать и другим техническим специалистам. Спасибо за внимание! Что ещё интересного есть в блоге Cloud4Y → Пароль как крестраж: ещё один способ защитить свои учётные данные → Тим Бернерс-Ли предлагает хранить персональные данные в подах → Виртуальные машины и тест Гилева → Создание группы доступности AlwaysON на основе кластера Failover → Как настроить SSH-Jump Server Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью. Пишем не чаще двух раз в неделю и только по делу. Корпоративный облачный провайдер