20.07.2023

PXE деплой ESXI-Foreman

server one
HOSTKEY
Арендуйте выделенные и виртуальные серверы с моментальным деплоем в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

Автор: Автор — Султан Усманов, специалист отдела DevOps компании Hostkey

Сегодня в большинстве компаний широко применяется виртуализация в инфраструктуре, что позволяет размещать различные сервисы компании и эффективно использовать ресурсы физических серверов. В связи с этим мы приняли решение внедрить виртуализацию VMware ESXi. При выборе метода установки мы рассмотрели два варианта: Legacy и UEFI.

Для реализации развертывания мы воспользовались Foreman — инструментом с открытым исходным кодом, предназначенным для управления полным жизненным циклом систем. Он обеспечивает возможность настройки и мониторинга физических и виртуальных серверов.

Режим установки Legacy

Рассмотрим установку на примере гипервизора VMware ESXi 8.0. Была создана операционная система:

Затем прикреплены шаблоны:

Описание по шаблонам

Шаблон — default_provision_ESXi. Основан на примере с официального сайта Foreman (раздел Create the Kickstart Template) и доработан под наш деплой:

<%#
kind: provision
name: default_provision_ESXi
model: ProvisioningTemplate
oses:
- ESXi
-%>
#Accept VMware License agreement
accepteula
# Set the root password
rootpw <%= host_param('password')%>
# Install ESXi on the first disk (Local first, then remote then USB)
install --firstdisk=local --overwritevmfs --ignoreprereqwarnings --ignoreprereqerrors --forceunsupportedinstall
# Set the keyboard
#keyboard French
#vmserialnum --esx=PUT IN YOUR LICENSE KEY
# Set the network
network --bootproto=dhcp
# reboot the host after installation is completed
reboot
%pre --interpreter=busybox 
#esxcli network firewall set --enabled false
# run the following command only on the firstboot
%firstboot --interpreter=busybox
sleep 10
# enable & start remote ESXi Shell (SSH)
vim-cmd hostsvc/enable_ssh
vim-cmd hostsvc/start_ssh
# enable & start ESXi Shell (TSM)
vim-cmd hostsvc/enable_esx_shell
vim-cmd hostsvc/start_esx_shell
# supress ESXi Shell shell warning — Thanks to Duncan (http://www.yellow-bricks.com/2011/07/21/esxi-5-suppressing-the-localremote-shell-warning/)
esxcli network firewall set --enabled false
esxcli system settings advanced set -o /UserVars/SuppressShellWarning -i 1
#FQDN="${HostName}.${SuffixDNS}"
# set static IP + default route + DNS
sleep 10
esxcli network ip interface ipv4 set --interface-name=vmk0 --type=static --ipv4=<%= host_param('ip')%> --netmask=<%= host_param('netmask')%>
esxcli network ip route ipv4 add --gateway <%= host_param('gateway')%> --network 0.0.0.0/0
esxcli network ip dns server add --server <%= @host.subnet.dns_primary %>
# Set VLAN ID
#esxcli network vswitch standard portgroup set --portgroup-name "Management Network" --vlan-id 50
#Disable ipv6
esxcli network ip set --ipv6-enabled=0
# set suffix and FQDN host configuration
esxcli system hostname set --fqdn=<%= @host.name %>
esxcli network ip dns search add --domain=<%= @host.name %>}
#user creation
esxcli system account add -i user -p <%= host_param('password')%> -c <%= host_param('password')%>
esxcli system permission set --id user -r Admin
# NTP Configuration (thanks to http://www.virtuallyghetto.com)
cat > /etc/ntp.conf << __NTP_CONFIG__
restrict default kod nomodify notrap noquerynopeer
restrict 127.0.0.1
server <%= host_param('ntp_server1')%>
server <%= host_param('ntp_server2')%>
__NTP_CONFIG__
/sbin/chkconfig ntpd on
# rename local datastore to something more meaningful
vim-cmd hostsvc/datastore/rename datastore1 "Local — $(hostname -s)"
esxcli network firewall set --enabled true
# restart a last time
reboot

Этот шаблон делает следующее:

  1. Задает пароль для пользователя root.
  2. Устанавливает систему на первый локальный диск, игнорирует ошибки.
  3. Прописывает настройки сети.
  4. Указывает имя сервера.
  5. Добавляет дополнительный пользователь с правами root и паролем.
  6. Настраивает серверы времени.
  7. Изменяет имя хранилища.
  8. Настраивает файрвол.

Шаблон — default_PXELinux_ESXi. Основан на примере с официального сайта Foreman (раздел Create provisioning templates) и доработан под наш деплой:

TIMEOUT 10
DEFAULT default_PXELinux_ESXI

LABEL default_PXELinux_ESXI
		KERNEL boot/esxi/8.0/mboot.c32
		APPEND -c boot/esxi/8.0/boot2.cfg ks=http://адрес сервере откуда мы забираем файл с автонастройкам/unattended/provision
	IPAPPEND 2

Содержимое шаблона:

  • наименование шаблона;
  • расположение загрузчика;
  • расположение конфигурационного файла.

При рассмотрении варианта установки Legacy-образа операционной системы мы разместили его по пути /var/lib/tftpboot/boot/esxi/8.0. Прежде чем перенести распакованный образ системы на наш Foreman, необходимо извлечь содержимое из ISO-образа. Кроме того, важно переименовать все файлы и папки в нижний регистр, так как установщик может не обнаружить файлы, если их названия содержат заглавные буквы. Особое внимание следует уделить конфигурационному файлу boot.cfg, который должен быть отформатирован следующим образом, чтобы обеспечить корректную работу:

bootstate=0
title=Loading ESXi installer
timeout=5
prefix=
kernel=./b.b00
kernelopt=runweasel cdromBoot  allowLegacyCPU=true
modules=./jumpstrt.gz --- ./useropts.gz --- ./features.gz --- ./k.b00 --- ./uc_intel.b00 --- ./uc_amd.b00 --- ./uc_hygon.b00 --- ./procfs.b00 --- ./vmx.v00 --- ./vim.v00 --- ./tpm.v00 --- ./sb.v00 --- ./s.v00 --- ./atlantic.v00 --- ./bcm_mpi3.v00 --- ./bnxtnet.v00 --- ./bnxtroce.v00 --- ./brcmfcoe.v00 --- ./cndi_igc.v00 --- ./dwi2c.v00 --- ./elxiscsi.v00 --- ./elxnet.v00 --- ./i40en.v00 --- ./iavmd.v00 --- ./icen.v00 --- ./igbn.v00 --- ./intelgpi.v00 --- ./ionic_en.v00 --- ./irdman.v00 --- ./iser.v00 --- ./ixgben.v00 --- ./lpfc.v00 --- ./lpnic.v00 --- ./lsi_mr3.v00 --- ./lsi_msgp.v00 --- ./lsi_msgp.v01 --- ./lsi_msgp.v02 --- ./mtip32xx.v00 --- ./ne1000.v00 --- ./nenic.v00 --- ./nfnic.v00 --- ./nhpsa.v00 --- ./nmlx5_co.v00 --- ./nmlx5_rd.v00 --- ./ntg3.v00 --- ./nvme_pci.v00 --- ./nvmerdma.v00 --- ./nvmetcp.v00 --- ./nvmxnet3.v00 --- ./nvmxnet3.v01 --- ./pvscsi.v00 --- ./qcnic.v00 --- ./qedentv.v00 --- ./qedrntv.v00 --- ./qfle3.v00 --- ./qfle3f.v00 --- ./qfle3i.v00 --- ./qflge.v00 --- ./rdmahl.v00 --- ./rste.v00 --- ./sfvmk.v00 --- ./smartpqi.v00 --- ./vmkata.v00 --- ./vmksdhci.v00 --- ./vmkusb.v00 --- ./vmw_ahci.v00 --- ./bmcal.v00 --- ./clusters.v00 --- ./crx.v00 --- ./elx_esx_.v00 --- ./btldr.v00 --- ./esx_dvfi.v00 --- ./esx_ui.v00 --- ./esxupdt.v00 --- ./tpmesxup.v00 --- ./weaselin.v00 --- ./esxio_co.v00 --- ./loadesx.v00 --- ./lsuv2_hp.v00 --- ./lsuv2_in.v00 --- ./lsuv2_ls.v00 --- ./lsuv2_nv.v00 --- ./lsuv2_oe.v00 --- ./lsuv2_oe.v01 --- ./lsuv2_sm.v00 --- ./native_m.v00 --- ./qlnative.v00 --- ./trx.v00 --- ./vdfs.v00 --- ./vds_vsip.v00 --- ./vmware_e.v00 --- ./vsan.v00 --- ./vsanheal.v00 --- ./vsanmgmt.v00 --- ./tools.t00 --- ./xorg.v00 --- ./gc.v00 --- ./imgdb.tgz --- ./basemisc.tgz --- ./resvibs.tgz --- ./esxiodpt.tgz --- ./imgpayld.tgz
build=8.0.1-0.0.21495797
updated=0

Процесс добавления и настройки операционной системы также описан на сайте Foreman в разделе ESXi installation in Legacy BIOS mode. Несмотря на рекомендации разработчиков, мы не правили bootloader и не создавали отдельный вариант установки. Конфигурационный файл — /usr/share/foreman/app/models/concerns/pxe_loader_support.rb.

def all_loaders_map(precision = 'x64')
  {
    "None" => "",
    "PXELinux BIOS" => "pxelinux.0",
    "PXELinux UEFI" => "pxelinux.efi",
    "PXELinux Alt BIOS" => "syslinux386/pxelinux.0", # Add this line
    ...

В нашем проекте мы применили универсальный загрузчик, который совместим со всеми операционными системами. Однако в разделе Family при создании операционной системы мы указали RedHat. Благодаря этому решению нам не потребовалось вносить какие-либо изменения или модификации:

Содержимое файла в Legacy: /var/lib/tftpboot/pxelinux.cfg/ MAC-адрес сервера:

TIMEOUT 10
DEFAULT default_PXELinux_ESXI

LABEL default_PXELinux_ESXI
		KERNEL boot/esxi/8.0/mboot.c32
		APPEND -c boot/esxi/8.0/boot2.cfg ks=http://адрес сервере откуда мы забираем файл с автонастройкам/unattended/provision
	IPAPPEND 2

После перезагрузки сервера начинается процесс установки:

Затем система обращается к серверу, на котором размещен файл kickstart (ks=http://адрес_сервера/unattended/provision). Этот файл содержит автонастройки, указанные в разделе APPEND файла default_PXELinux_ESXI.

Если оборудование поддерживается гипервизором ESXi, операционная система будет установлена без ошибок и произойдет перезагрузка. В результате получим полностью настроенную операционную систему с двумя пользователями, которых мы указали в шаблоне default_provision_ESXi:

Установка в UEFI-режиме

Операционная система VMware ESXi создается один раз и может быть использована для установки как в режиме Legacy, так и в режиме UEFI. На ранее представленных скриншотах мы указали использование шаблона Grub2_Default, но не дали описание по нему. Он служит для проверки и загрузки системы в режиме UEFI. Foreman выполняет проверку имени операционной системы: если оно содержит название ESXi, передаются необходимые параметры в виде переменных и происходит загрузка LiveCD.

После загрузки LiveCD выполняется скрипт, содержащий следующие проверки:

  1. Тип диска.
  2. Поиск диска с наименьшим размером, но не менее 20 ГБ.
  3. Проверка наличия логического тома (logical volume) или группы томов (volume group) на диске. Если такие настройки присутствуют, они удаляются для очистки диска.

После подготовки диска система создает раздел для размещения UEFI-загрузчика. Ниже приведена часть скрипта:

    parted -s /dev/${INST_DRIVE} mklabel gpt mkpart fat32 1MiB 1GiB set 1 esp on
	EFI_PART=$(lsblk -l | grep "${INST_DRIVE}" | grep part | awk '{print $1}')
	mkdir -p /mnt/{iso,efipart,wim}
	wget ${medium_uri}/${branch}/esxi${os_version}pe.iso
	mount -o loop esxi${os_version}pe.iso /mnt/iso
	mkfs.fat -F32 /dev/$EFI_PART
	mount /dev/$EFI_PART /mnt/efipart
	mkdir -p /mnt/efipart/EFI/redhat/
	mkdir -p /mnt/efipart/kickstart
	rsync -r /mnt/iso/ /mnt/efipart/

	cp /mnt/efipart/EFI/BOOT/BOOTX64.EFI /mnt/efipart/EFI/redhat/grubx64.efi
	cp /mnt/efipart/EFI/BOOT/CRYPTO64.EFI /mnt/efipart/EFI/redhat/crypto64.efi
	cp /mnt/efipart/EFI/BOOT/SAFEBOOT.EFI /mnt/efipart/EFI/redhat/safeboot.efi
	cp /mnt/efipart/boot.cfg /mnt/efipart/EFI/redhat/boot.cfg

	curl -s "http://${foreman_fqdn}/unattended/provision?token=${foreman_token}" >> /mnt/efipart/kickstart/ks.cfg
	tar -czf /mnt/efipart/kickstart.gz --directory=/mnt/efipart kickstart

	###sed -i "s#kernelopt=runweasel cdromBoot#kernelopt=ks=file://kickstart/ks.cfg#g" /mnt/efipart/EFI/redhat/boot.cfg ##for 7.3
	sed -i "s#^kernelopt.*#kernelopt=ks=file://kickstart/ks.cfg#g" /mnt/efipart/EFI/redhat/boot.cfg
	sed -ie 's#^modules.*$#& --- /kickstart.gz#g' /mnt/efipart/EFI/redhat/boot.cfg

	umount /mnt/iso
	rm esxi${os_version}pe.iso
	/usr/bin/env wget --no-proxy --quiet --output-document=/dev/null --no-check-certificate "http://${foreman_fqdn}/unattended/built?token=${foreman_token}"
	umount /mnt/efipart
sync
fi
reboot
Что делает этот скрипт:
  1. На диске создает раздел FAT32 размером 1 Гб.
  2. Создает точки монтирования: iso, efipart, wim в разделе /mnt.
  3. Копирует с нашего зеркала ISO-образ с ESXi 8.0 и монтирует его в /mnt/iso.
  4. Создает раздел FAT32 и монтирует в раздел /mnt/efipart.
  5. Для корректной работы загрузчика Foreman создается структура директорий: /mnt/efipart/EFI/redhat/ и /mnt/efipart/kickstart.
  6. Копируется содержимое ISO-образа в /mnt/efipart/.
  7. В ранее созданные директории копируются:
    • cp /mnt/efipart/EFI/BOOT/BOOTX64.EFI /mnt/efipart/EFI/redhat/grubx64.efi — EFI-загрузчик;
    • cp /mnt/efipart/EFI/BOOT/CRYPTO64.EFI /mnt/efipart/EFI/redhat/crypto64.efi — криптографический модуль;
    • cp /mnt/efipart/EFI/BOOT/SAFEBOOT.EFI /mnt/efipart/EFI/redhat/safeboot.efi — файл проверки безопасной загрузки. Машина отказывается загружать какой-либо драйвер или приложение UEFI, если загрузчик операционной системы не имеет криптографической подписи;
    • cp /mnt/efipart/boot.cfg /mnt/efipart/EFI/redhat/boot.cfg — конфигурационный файл с параметрами загрузки, указанными модулями, параметрами ядра.
  8. Скачивает с нашего Foreman заранее прописанный шаблон default_provision_ESXi со всем настройками сервера и помещает его в файл /mnt/efipart/kickstart/ks.cfg.
  9. Запаковывает в архив с названием kickstart.gz и помещает его вместе со стандартными модулями ESXI в раздел UEFI/mnt/efipart.
  10. Подменяет настройки kernelopt со стандартных — runweasel cdromBoot на указание нашего kickstart файла ks.cfg в boot.cfg.
  11. Добавляет в boot.cfg файл информацию о новом модуле kickstart.gz.
  12. Размонтирует раздел /mnt/iso.
  13. Удаляет ISO-образ.
  14. Отправляет запрос в Foreman и переводит в статус Installed.
  15. Размонтирует раздел /mnt/efipart.
  16. Отправляет сервер на перезагрузку.

После перезагрузки система обнаруживает раздел UEFI и начинает загрузку с него. Затем появляется меню загрузки Foreman, в котором он ищет раздел, в нашем случае — redhat.

Пример меню загрузки показан ниже:

set default=local
set timeout=20
echo Default PXE local template entry is set to 'local'

insmod part_gpt
insmod fat
insmod chain

echo "VMWare hosts with QuickBoot feature enabled may not find the local ESP"
echo "partition due to not initializing all the EFI devices. To workaround, upgrade"
echo "to the latest grub2 (*) and uncomment "connectefi scsi" statement in the"
echo "grub2_chainload template."
echo
echo "Virtual or physical hosts using Software RAID for the ESP partition may try"
echo "booting on the Software RAID, which will fail. To workaround, upgrade to the"
echo "latest grub2 (*) and add "--efidisk-only" argument to the "search" command in"
echo "the grub2_chainload template."
echo
echo "(*) grub2-efi-x64-2.02-122.el8 (upstream doesn't have the patches yet)"
echo
#connectefi scsi

menuentry 'Chainload Grub2 EFI from ESP' --id local_chain_hd0 {
	echo "Chainloading Grub2 EFI from ESP, enabled devices for booting:"
	ls
	echo "Trying /EFI/fedora/shim.efi "
	unset chroot
	# add --efidisk-only when using Software RAID
	search --file --no-floppy --set=chroot /EFI/fedora/shim.efi
	if [ -f ($chroot)/EFI/fedora/shim.efi ]; then
		chainloader ($chroot)/EFI/fedora/shim.efi
		echo "Found /EFI/fedora/shim.efi at $chroot, attempting to chainboot it..."
		sleep 2
		boot
	fi
	echo "Trying /EFI/fedora/grubx64.efi "
	unset chroot
	# add --efidisk-only when using Software RAID
	search --file --no-floppy --set=chroot /EFI/fedora/grubx64.efi
	if [ -f ($chroot)/EFI/fedora/grubx64.efi ]; then
		chainloader ($chroot)/EFI/fedora/grubx64.efi
		echo "Found /EFI/fedora/grubx64.efi at $chroot, attempting to chainboot it..."
		sleep 2
		boot
	fi
	echo "Trying /EFI/redhat/shim.efi "
	unset chroot
	# add --efidisk-only when using Software RAID
	search --file --no-floppy --set=chroot /EFI/redhat/shim.efi
	if [ -f ($chroot)/EFI/redhat/shim.efi ]; then
		chainloader ($chroot)/EFI/redhat/shim.efi
		echo "Found /EFI/redhat/shim.efi at $chroot, attempting to chainboot it..."
		sleep 2
		boot
	fi
	echo "Trying /EFI/redhat/grubx64.efi "
	unset chroot
	# add --efidisk-only when using Software RAID
	search --file --no-floppy --set=chroot /EFI/redhat/grubx64.efi
	if [ -f ($chroot)/EFI/redhat/grubx64.efi ]; then
		chainloader ($chroot)/EFI/redhat/grubx64.efi
		echo "Found /EFI/redhat/grubx64.efi at $chroot, attempting to chainboot it..."
		sleep 2
		boot
	fi
	echo "Trying /EFI/centos/shim.efi "
	unset chroot
	# add --efidisk-only when using Software RAID
	search --file --no-floppy --set=chroot /EFI/centos/shim.efi
	if [ -f ($chroot)/EFI/centos/shim.efi ]; then
		chainloader ($chroot)/EFI/centos/shim.efi
		echo "Found /EFI/centos/shim.efi at $chroot, attempting to chainboot it..."
		sleep 2
		boot
	fi
	echo "Trying /EFI/centos/grubx64.efi "
	unset chroot
	# add --efidisk-only when using Software RAID
	search --file --no-floppy --set=chroot /EFI/centos/grubx64.efi
	if [ -f ($chroot)/EFI/centos/grubx64.efi ]; then
		chainloader ($chroot)/EFI/centos/grubx64.efi
		echo "Found /EFI/centos/grubx64.efi at $chroot, attempting to chainboot it..."
		sleep 2
		boot
	fi
	echo "Trying /EFI/rocky/shim.efi "
	unset chroot
	# add --efidisk-only when using Software RAID
	search --file --no-floppy --set=chroot /EFI/rocky/shim.efi
	if [ -f ($chroot)/EFI/rocky/shim.efi ]; then
		chainloader ($chroot)/EFI/rocky/shim.efi
		echo "Found /EFI/rocky/shim.efi at $chroot, attempting to chainboot it..."
		sleep 2
		boot
	fi
	echo "Trying /EFI/rocky/grubx64.efi "
	unset chroot
	# add --efidisk-only when using Software RAID
	search --file --no-floppy --set=chroot /EFI/rocky/grubx64.efi
	if [ -f ($chroot)/EFI/rocky/grubx64.efi ]; then
		chainloader ($chroot)/EFI/rocky/grubx64.efi
		echo "Found /EFI/rocky/grubx64.efi at $chroot, attempting to chainboot it..."
		sleep 2
		boot
	fi
	echo "Trying /EFI/debian/grubx64.efi "
	unset chroot
	# add --efidisk-only when using Software RAID
	search --file --no-floppy --set=chroot /EFI/debian/grubx64.efi
	if [ -f ($chroot)/EFI/debian/grubx64.efi ]; then
		chainloader ($chroot)/EFI/debian/grubx64.efi
		echo "Found /EFI/debian/grubx64.efi at $chroot, attempting to chainboot it..."
		sleep 2
		boot
	fi
	echo "Trying /EFI/ubuntu/grubx64.efi "
	unset chroot
	# add --efidisk-only when using Software RAID
	search --file --no-floppy --set=chroot /EFI/ubuntu/grubx64.efi
	if [ -f ($chroot)/EFI/ubuntu/grubx64.efi ]; then
		chainloader ($chroot)/EFI/ubuntu/grubx64.efi
		echo "Found /EFI/ubuntu/grubx64.efi at $chroot, attempting to chainboot it..."
		sleep 2
		boot
	fi
	echo "Trying /EFI/sles/grubx64.efi "
	unset chroot
	# add --efidisk-only when using Software RAID
	search --file --no-floppy --set=chroot /EFI/sles/grubx64.efi
	if [ -f ($chroot)/EFI/sles/grubx64.efi ]; then
		chainloader ($chroot)/EFI/sles/grubx64.efi
		echo "Found /EFI/sles/grubx64.efi at $chroot, attempting to chainboot it..."
		sleep 2
		boot
	fi
	echo "Trying /EFI/opensuse/grubx64.efi "
	unset chroot
	# add --efidisk-only when using Software RAID
	search --file --no-floppy --set=chroot /EFI/opensuse/grubx64.efi
	if [ -f ($chroot)/EFI/opensuse/grubx64.efi ]; then
		chainloader ($chroot)/EFI/opensuse/grubx64.efi
		echo "Found /EFI/opensuse/grubx64.efi at $chroot, attempting to chainboot it..."
		sleep 2
		boot
	fi
	echo "Trying /EFI/Microsoft/boot/bootmgfw.efi "
	unset chroot
	# add --efidisk-only when using Software RAID
	search --file --no-floppy --set=chroot /EFI/Microsoft/boot/bootmgfw.efi
	if [ -f ($chroot)/EFI/Microsoft/boot/bootmgfw.efi ]; then
		chainloader ($chroot)/EFI/Microsoft/boot/bootmgfw.efi
		echo "Found /EFI/Microsoft/boot/bootmgfw.efi at $chroot, attempting to chainboot it..."
		sleep 2
		boot
	fi
	echo "Partition with known EFI file not found, you may want to drop to grub shell"
	echo "and investigate available files updating 'pxegrub2_chainload' template and"
	echo "the list of known filepaths for probing. Available devices are:"
	echo
	ls
	echo
	echo "If you cannot see the HDD, make sure the drive is marked as bootable in EFI and"
	echo "not hidden. Boot order must be the following:"
	echo "1) NETWORK"
	echo "2) HDD"
	echo
	echo "The system will poweroff in 2 minutes or press ESC to poweroff immediately."
	sleep -i 120
	halt
}

menuentry 'Chainload into BIOS bootloader on first disk' --id local_chain_legacy_hd0 {
	set root=(hd0,0)
	chainloader +1
	boot
}

menuentry 'Chainload into BIOS bootloader on second disk' --id local_chain_legacy_hd1 {
	set root=(hd1,0)
	chainloader +1
	boot
}

common="rootflags=loop root=live:/fdi.iso rootfstype=auto ro rd.live.image acpi=force rd.luks=0 rd.md=0 rd.dm=0 rd.lvm=0 rd.bootif=0 rd.neednet=0 nokaslr nomodeset proxy.url=https://foreman.hostkey.com proxy.type=foreman BOOTIF=01-$net_default_mac"

if [ ${grub_platform} == "pc" ]; then
	menuentry 'Foreman Discovery Image' --id discovery {
		linux boot/fdi-image/vmlinuz0 ${common}
		initrd boot/fdi-image/initrd0.img
	}
else
	menuentry 'Foreman Discovery Image EFI' --id discovery {
		linuxefi boot/fdi-image/vmlinuz0 ${common}
		initrdefi boot/fdi-image/initrd0.img
	}
fi

После того как Foreman прошел по меню и увидел, что у нас имеется раздел redhat на диске, система запускает ESXi-установку, распаковывает модули, которые были скопированы в /mnt/efipart, а также наш kickstart.gzkickstart/ks.cfg и принимает этот файл с настройками, в которых указано, каким образом будет установлена и настроена операционная система:

Если оборудование поддерживается гипервизором ESXi, операционная система будет установлена без ошибок и произойдет перезагрузка. В результате получим полностью настроенную операционную систему с двумя пользователями, которых мы указали в шаблоне default_provision_ESXi:

Заключение

PXE-деплой ESXi-Foreman представляет собой мощный инструмент для автоматизации установки и настройки виртуальных серверов ESXi. Эта комбинация позволяет администраторам значительно упростить процесс развертывания и управления инфраструктурой виртуализации.

ESXi-Foreman обеспечивает централизованное управление и контроль над всеми этапами деплоя — от загрузки операционной системы до установки необходимого программного обеспечения. Благодаря использованию PXE-загрузки администраторы могут осуществлять удаленное развертывание ESXi-серверов без необходимости физического доступа к каждому узлу.

Этот подход также способствует повышению эффективности и стандартизации процесса развертывания, что в свою очередь уменьшает возможные ошибки и снижает время, затрачиваемое на установку и настройку серверов. Кроме того, ESXi-Foreman предоставляет широкие возможности для автоматизации и интеграции с другими инструментами и системами, что делает его гибким и масштабируемым решением для различных сценариев виртуализации.

Арендуйте выделенные и виртуальные серверы с моментальным деплоем в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

Другие статьи

21.09.2023

Мониторинг SSL-сертификатов oVirt

Рассказываем о способах мониторинга срока действия SSL-сертификатов в oVirt.

09.09.2023

Fabula - нейросеть, которая нарисует ваш уникальный аватар по фото

Как стартап из Казахстана смог построить успешный бизнес, используя генеративные нейросети на GPU-серверах от HOSTKEY

04.09.2023

Персональный VPN сервер 3x-UI в Европе, США и России

Hostkey подготовил новый сервис для своих клиентов — аренду сервера с предустановленным VPN 3X-UI. Новый сервис доступен для заказа на сайте компании.

04.09.2023

Серверы Dell и Supermicro: авторизация через LDAP

Рассказываем, как обеспечить интеграцию разнородных серверных платформ с централизованной LDAP-аутентификацией.

26.07.2023

Мониторинг и алертинг серверов Supermicro (sensor metrics) через Prometheus

Рассказываем о процессе настройки сбора метрик серверов Supermicro с помощью утилиты IPMItool и Prometheus.

HOSTKEY Выделенные серверы в Европе, России и США Готовые решения и индивидуальные конфигурации серверов на базе процессоров AMD, Intel, карт GPU, Бесплатной защитой от DDoS-атак и безлимитный соединением на скорости 1 Гбит/с 30
4.3 48 48
Upload