Автор: Автор — Султан Усманов, специалист отдела 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.gz — kickstart/ks.cfg и принимает этот файл с настройками, в которых указано, каким образом будет установлена и настроена операционная система:

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

Заключение

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

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

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

Комментарии (0)