Подготовка шаблона vApp тестовой среды VMware vCenter + ESXi
Вложенная виртуализация позволяет запускать гипервизор внутри виртуальной машины. Это необходимо, чтобы не экспериментировать на боевой системе, рискуя уронить всё и сразу, а потом долго и мучительно поднимать её под добрые слова коллег о прямизне конечностей и чьей-то матери. Если вы хотите потестить вложенную виртуализацию, изучите наш туториал.
Перед вами пошаговое руководство по подготовке шаблона 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
1. Что мы будем делать
Мы подготовим максимально гибкий шаблон без привязки к адресу подсети, доменному имени, количеству выделяемых ресурсов и т.п. Будем делать так, чтобы при развертывании шаблона администратор мог произвести тонкую настройку. Подготовка шаблона выполняется в сети 10.0.0.0/24, а за стандартные значения при развертывании готового шаблона примем домен Domain.local и сеть 192.168.2.0/24.
Имя домена domain.local и сеть 192.168.2.0/24 выберем как значения по умолчанию, которые можно изменять в процессе развёртывания шаблона.
Мы подготовим шаблон, включающий в себя 6 виртуальных машин.
1.1. Список VM в шаблоне
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.
1.2. Требования
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 в рабочей среде.
2. Схема логической топологии
3. Подготовка Working Environment
3.1. Установка ESXi
В 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.
3.2. Установка ManagementVM
Разворачиваем 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 на сетевом интерфейсе.
3.3. Установка vCenter Server Appliance
Монтируем образ 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
Подготовка инфраструктуры для создания шаблона завершена.
4. Создание шаблона vApp
4.1. Подготовка vApp
Кликаем на кластер правой кнопкой мыши и создаём новый 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
4.2. Создание ESXi VM в vApp
На шаге 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)
4.3. Кастомизация ESXi в vApp
Добавим ESXi хостам возможность кастомизации сетевых параметров из интерфейса VMware Cloud Director (и vSphere Client). Для этого подключимся с помощью WinSCP к хосту, перейдём в каталог /etc/rc.local.d и откроем текстовым редактором файл local.sh
Заменим содержимое local.sh следующим скриптом:
#!/bin/sh
#Customization script for ESXi01
getprops_from_ovfxml() {
/bin/python - </tmp/ovf.xml 2>/dev/null
eval `getprops_from_ovfxml /tmp/ovf.xml`
#Проверяем, что в Guest Properties включена кастомизация
if [ $enablecustomization1 = "enabled" ] ;
then
esxcfg-init --set-boot-progress-text "Applying OVF customization..."
#Изменяем пароль root
echo $rootpassword1 | passwd --stdin root
#Задаем FQDN ESXi хоста
esxcli system hostname set --fqdn=$fqdn1
#Задаем настройки IP
esxcli network ip interface ipv4 set -i vmk0 -I $ipaddr1 -N $netmask1 -g $defaultgateway1 -t static
#Очищаем список DNS серверов
esxcli network ip dns server remove -a
#Добавляем DNS сервер
esxcli network ip dns server add --server=$dnsserver1
#Перезапускаем сетевой интерфейс для применяния настроек
esxcli network ip interface set -e false -i vmk0
esxcli network ip interface set -e true -i vmk0
esxcfg-init --set-boot-progress-text "OVF customization applied"
else
esxcfg-init --set-boot-progress-text "OVF customization disabled."
fi
rm -f /tmp/ovf.xml
exit 0
Сохраним файл и выключим хост ESXi из меню выключения.
Важно: для каждого ESXi хоста применятся своя версия скрипта.
Это связано с тем, что в ovf.xml передаются все параметры Guest Properties каждой VM в vApp.
Для ESXi02 в скрипте нужно у всех переменных заменить число в конце переменной на 2.
$rootpassword1
заменить на $rootpassword2
$ipaddr1
заменить на $ipaddr2
и т.д.
Скрипт для ESXi02#!/bin/sh
#Customization script for ESXi02
getprops_from_ovfxml() {
/bin/python - </tmp/ovf.xml 2>/dev/null
eval `getprops_from_ovfxml /tmp/ovf.xml`
#Проверяем, что в Guest Properties включена кастомизация
if [ $enablecustomization2 = "enabled" ] ;
then
esxcfg-init --set-boot-progress-text "Applying OVF customization..."
#Изменяем пароль root
echo $rootpassword2 | passwd --stdin root
#Задаем FQDN ESXi хоста
esxcli system hostname set --fqdn=$fqdn2
#Задаем настройки IP
esxcli network ip interface ipv4 set -i vmk0 -I $ipaddr2 -N $netmask2 -g $defaultgateway2 -t static
#Очищаем список DNS серверов
esxcli network ip dns server remove -a
#Добавляем DNS сервер
esxcli network ip dns server add --server=$dnsserver2
#Перезапускаем сетевой интерфейс для применяния настроек
esxcli network ip interface set -e false -i vmk0
esxcli network ip interface set -e true -i vmk0
esxcfg-init --set-boot-progress-text "OVF customization applied"
else
esxcfg-init --set-boot-progress-text "OVF customization disabled."
fi
rm -f /tmp/ovf.xml
exit 0
#!/bin/sh
#Customization script for ESXi03
getprops_from_ovfxml() {
/bin/python - </tmp/ovf.xml 2>/dev/null
eval `getprops_from_ovfxml /tmp/ovf.xml`
#Проверяем, что в Guest Properties включена кастомизация
if [ $enablecustomization3 = "enabled" ] ;
then
esxcfg-init --set-boot-progress-text "Applying OVF customization..."
#Изменяем пароль root
echo $rootpassword3 | passwd --stdin root
#Задаем FQDN ESXi хоста
esxcli system hostname set --fqdn=$fqdn3
#Задаем настройки IP
esxcli network ip interface ipv4 set -i vmk0 -I $ipaddr3 -N $netmask3 -g $defaultgateway3 -t static
#Очищаем список DNS серверов
esxcli network ip dns server remove -a
#Добавляем DNS сервер
esxcli network ip dns server add --server=$dnsserver3
#Перезапускаем сетевой интерфейс для применяния настроек
esxcli network ip interface set -e false -i vmk0
esxcli network ip interface set -e true -i vmk0
esxcfg-init --set-boot-progress-text "OVF customization applied"
else
esxcfg-init --set-boot-progress-text "OVF customization disabled."
fi
rm -f /tmp/ovf.xml
exit 0
После того, как мы добавили скрипты на каждый 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 должны выглядеть, как на скриншотах ниже.
4.4. Установка vCenter Server Appliance в vApp
Добавим OVA с vCenter Server Appliance vApp. Конфигурировать и запускать не будем.
Выбираем OVA шаблон vCenter
В процессе развёртывания оставляем все значения «По умолчанию». Просто нажимаем Next на каждом этапе и дожидаемся окончания развёртывания.
Затем необходимо установить Windows Server 2019 и Ubuntu 18.04 LTS. Это можно сделать, используя ISO-образы, но я пойду более простым путём и разверну их из OVA шаблонов, предварительно скачанных из публичных каталогов VMware Cloud Director (vcd.cloud4y.ru).
4.5. Установка Windows Server 2019 в vApp
Разворачиваем Windows Server из OVA шаблона. Запускаем VM.
Включаем удалённое управление по RDP.
Устанавливаем роль DNS сервера.
Создаём Forward Lookup Zone для domain.local.
Создаём Reverse Lookup Zone для 2.168.192.in-addr.arpa.
Выключаем VM.
4.6. Установка Ubuntu 18.04 LTS в vApp
Концепция следующая:
При развёртывании шаблона в 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.
4.7. Удаление ISO приводов и сетевых адаптеров
Переходим в настройки каждой VM и удаляем все CD-приводы и сетевые адаптеры каждой VM в vApp. CD-приводы нам более не требуются. Сетевые адаптеры удаляем во избежание конфликтов при развёртывании шаблона.
5. Выгрузка vApp шаблона из Working Environment
Выгрузка шаблона из vCenter.
Теперь мы можем выгрузить шаблон.
В случае возникновения подобного предупреждения разрешаем открытие всплывающих окон в браузере.По окончанию скачивания получаем набор файлов, готовых к загрузке в VMware Cloud Director. Общий размер 11,5 ГБ, но в VMware Cloud Director потребуется около 350ГБ, т.к. у нас используются Thin (тонкие) диски, а VMware Cloud Director рассчитывает размер не по текущему размеру диска, а по максимальному (до которого диски могут быть расширены).
6. Загрузка vApp в 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-канал, чтобы не пропустить очередную статью. Пишем не чаще двух раз в неделю и только по делу.