Автоматическая установка ESXi при помощи KS.CFG

В данной статье поговорим о установке ESXi с помощью kickstart скрипта, или как он по-другому называется – KS.CFG. В чем плюс данного скрипта и зачем это все нужно? KS.CFG – это текстовый файл, в котором содержаться определенные настройки, задаваемые при установке или обновлении ESXi. Этот файл опрашивается, и установщик ESXi выполняет содержащиеся в нем указания без вмешательства администратора, так называемая «тихая» установка. С помощью этого скрипта можно как устанавливать ESXi с нуля, так и производить апгрейд. Что-бы скрипт начал работать нужно сделать одну из двух манипуляций:

  • При загрузке ESXi bootloader Вы прожимаете SHIFT+O и прописываете путь до KS.CFG в поле runweasel
  • В BOOT.CFG файле в установочном образе ESXi прописать путь до KS.CFG

ESXi bootloader может подтягивать kickstart скрипт из нескольких расположений:

  • CD-ROM — ks=cd-rom:/kickstart/KS.CFG
  • USB — ks=usb:/kickstart/KS.CFG
  • NFS — ks=nfs://XXX.XXX.XXX.XXX/kickstart/KS.CFG
  • FTP — ks=ftp://XXX.XXX.XXX.XXX/kickstart/KS.CFG
  • HTTP(S) — ks=http://XXX.XXX.XXX.XXX/kickstart/KS.CFG

Если указывается сетевое расположение KS.CFG, то загрузчику потребуется настройка IP естественно, чтобы достичь файл, которая может быть задана в том же самом поле. Например:

ks=http://00.00.00.00/kickstart/ks.cfg nameserver=00.00.0.0 ip=00.00.00.000 netmask=255.255.255.0 gateway=00.00.00.000

Через SHIFT+O

Загружаем хост c установочного образа ESXi, затем, когда bootloader начинает грузиться мы прожимаем SHIFT+O и в открывшейся ниже строке прописываем параметры с файлом ответов и нажимаем Enter.

После этого хост применяет файл с ответами, если он доступен по указанному пути и начинает автоматическую установку или апгрейд, если файл недоступен, то продолжает грузиться в обычном ручном режиме. Этот способ воспользоваться «тихой установкой» достаточно неудобен и подходит скорее для разового использования, чем для массового развертывания армии гипервизоров, потому как вбивать строку с конфигом на каждом ESXi после прожатых клавиш в отведенные 3 секунды – это неудобно.

Через BOOT.CFG

BOOT.CFG – это файл с настройками загрузчика и валяется он в /EFI/BOOT/ установочного образа ESXi. Прописанные в нем настройки применяются при загрузке, bootloader-а сразу без надобности что-то жать и писать. 

Для начала мы распаковываем ISO образ установщика ESXi, находим там BOOT.CFG по вышеуказанному пути и редактируем его. По умолчанию он выглядит так:

bootstate=0
title=Loading ESXi installer
timeout=5
prefix=
kernel=/b.b00
kernelopt=cdromBoot runweasel
modules=<мега список модулей…>
build=
updated=0

Нужно добавить строку:

kernelopt=runweasel ks=<параметры для KS.CFG>

Получиться следующее:

bootstate=0
title=Loading ESXi installer
timeout=5
prefix=
kernel=/b.b00
kernelopt=runweasel ks=<параметры для KS.CFG>
modules=<мега список модулей…>
build=
updated=0

Мы задали настройки с указанием расположения kickstart скрипта для загрузчика и в случае если все настройки оказались правильными, загрузчик выполнит их и все произойдет автоматически. Запаковываем все это обратно в ISO образ и грузимся с него.

kickstart скрипт

До этого момента мы определились с тем как сделать так что б установщик ESXi начал использовать kickstart скрипт, но не о том, как его составить. Поехали.

Забираем сам файл с его местоположения в /etc/vmware/weasel/ на каком-либо ESXi хосте. И начинаем его заполнять. По полному синтаксису данного файла можно получить информацию из этого. По умолчанию скрипт содержит это:

#
Sample scripted installation file
#
Accept the VMware End User License Agreement
vmaccepteula
Set the root password for the DCUI and Tech Support Mode
rootpw myp@ssw0rd
Install on the first local disk available on machine
install --firstdisk --overwritevmfs
Set the network to DHCP on the first network adapter
network --bootproto=dhcp --device=vmnic0
A sample post-install script
%post --interpreter=python --ignorefailure=true
import time
stampFile = open('/finished.stamp', mode='w')
stampFile.write( time.asctime() )

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

  1. Hostname = esxi-lab
  2. IP= 10.10.10.100
  3. VLAN=1020
  4. Uplink port=vmnic0
  5. Root password= VMware!23
  6. Установка произведена на первый локальный диск

Наш kickstart скрипт будет выглядеть так:

#
Sample scripted installation file
#
Accept the VMware End User License Agreement
vmaccepteula
reboot
Set the root password for the DCUI and Tech Support Mode
rootpw VMware!@#
Install on the first local disk available on machine
install --firstdisk --overwritevmfs
Set the network to DHCP on the first network adapter
network --bootproto=static --device=vmnic0 --ip=10.10.10.10 --gateway=10.10.10.1
--nameserver=1.1.1.5 --netmask=255.255.255.0 --vlanid=1020 –-hostname=esxi-lab --addvmportgroup=0
A sample post-install script
%post --interpreter=python --ignorefailure=true
import time
stampFile = open('finished.stamp', mode='w')
stampFile.write( time.asctime() )

Сохраняем его и размещаем в зависимости от нашего сценария. Далее мы используем один из ранее перечисленных методов задействования kickstart скрипта — правим BOOT.CFG, для того что бы загрузчик ESXi сам подхватывал настройки и файл ответов, либо же используем SHIFT+O при загрузке установщика. В зависимости от нашего сценария, мы можем развертывать несколько хостов с помощью одного kickstart скрипта, либо же заранее подготовить несколько скриптов для каждого хоста отдельный. Так же не стоит забывать про возможность дополнять данный файл сценариями python для более продвинутой автоматизации, но как по мне это уже немного слишком, и если вам нужно что-то более автоматическое и гибкое, то лучше использовать Auto Deploy, о нем написано тут. Так же есть способ автоматизировать развертывание хоста ESXi при помощи kickstart скрипта и PowerCLI, с последующим добавлением в vCenter, о нем подробнее тут.