Do-it-yourself-Bare-Metal-Provisioning oder automatische Vorbereitung von Servern von Grund auf

Hallo, ich bin Denis und einer meiner Tätigkeitsbereiche ist die Entwicklung von Infrastrukturlösungen bei X5. Heute möchte ich mit Ihnen teilen, wie Sie ein automatisches Servervorbereitungssystem basierend auf öffentlich verfügbaren Tools bereitstellen können. Meiner Meinung nach ist dies eine interessante, einfache und flexible Lösung.

Do-it-yourself-Bare-Metal-Provisioning oder automatische Vorbereitung von Servern von Grund auf

Mit Vorbereitung meinen wir: Verwandeln Sie einen neuen Server sofort in einen vollständig konfigurierten Server mit Betriebssystem. Linux oder mit dem ESXi-Hypervisor (die Bereitstellung von Windows-Servern wird in diesem Artikel nicht behandelt).

Bedingungen:

  • Server – Server, die konfiguriert werden müssen.
  • Der Installationsserver ist der Hauptserver, der den gesamten Vorbereitungsprozess über das Netzwerk bereitstellt.

Warum ist Automatisierung nötig?

Nehmen wir an, es gibt eine Aufgabe: Server in großem Umfang von Grund auf vorzubereiten, in der Spitze – 30 pro Tag. Auf ihnen können Server verschiedener Hersteller und Modelle sowie unterschiedliche Betriebssysteme installiert sein und möglicherweise über einen Hypervisor verfügen oder auch nicht.

Welche Vorgänge sind im Einrichtungsprozess enthalten (ohne Automatisierung):

  • Schließen Sie eine Tastatur, eine Maus und einen Monitor an den Server an.
  • BIOS, RAID, IPMI konfigurieren;
  • Komponenten-Firmware aktualisieren;
  • Bereitstellen eines Dateisystem-Images (oder Installieren eines Hypervisors und Kopieren virtueller Maschinen);

Notiz. Alternativ ist die Betriebssystembereitstellung durch Installation mit einer Auto-Response-Datei möglich. Aber darauf wird im Artikel nicht eingegangen. Obwohl Sie unten sehen werden, dass das Hinzufügen dieser Funktionalität nicht schwierig ist.

  • Konfigurieren Sie Betriebssystemparameter (Hostname, IP usw.).

Bei diesem Ansatz werden auf jedem Server nacheinander dieselben Einstellungen vorgenommen. Die Effizienz solcher Arbeiten ist sehr gering.

Der Kern der Automatisierung besteht darin, die menschliche Beteiligung am Servervorbereitungsprozess zu eliminieren. So viel wie möglich.

Die Automatisierung reduziert Ausfallzeiten zwischen Vorgängen und ermöglicht die gleichzeitige Bereitstellung mehrerer Server. Auch die Wahrscheinlichkeit menschlicher Fehler wird deutlich reduziert.

Do-it-yourself-Bare-Metal-Provisioning oder automatische Vorbereitung von Servern von Grund auf

Wie werden Server automatisch konfiguriert?

Lassen Sie uns alle Phasen im Detail analysieren.

Sie verfügen über einen Linux-Server, den Sie als PXE-Installationsserver verwenden. Darauf werden Dienste installiert und konfiguriert: DHCP, TFTP.

Also booten wir den Server (der konfiguriert werden muss) über PXE. Erinnern wir uns daran, wie es funktioniert:

  • Auf dem Server ist Netzwerkstart ausgewählt.
  • Der Server lädt das PXE-ROM der Netzwerkkarte und kontaktiert den Installationsserver über DHCP, um eine Netzwerkadresse zu erhalten.
  • Der DHCP-Installationsserver vergibt eine Adresse sowie Anweisungen zum weiteren Download per PXE.
  • Der Server lädt den Netzwerk-Bootloader vom Installationsserver über PXE, das weitere Laden erfolgt entsprechend der PXE-Konfigurationsdatei.
  • Der Bootvorgang erfolgt basierend auf den empfangenen Parametern (Kernel, Initramfs, Mount-Punkte, Squashfs-Image usw.).

Notiz. Der Artikel beschreibt das Booten per PXE über den BIOS-Modus. Derzeit implementieren Hersteller aktiv den UEFI-Bootmodus. Bei PXE liegt der Unterschied in der Konfiguration des DHCP-Servers und dem Vorhandensein eines zusätzlichen Bootloaders.

Schauen wir uns ein Beispiel einer PXE-Serverkonfiguration an (Pxelinux-Menü).

Datei pxelinux.cfg/default:

default menu.c32
prompt 0
timeout 100
menu title X5 PXE Boot Menu
LABEL InstallServer Menu
	MENU LABEL InstallServer
	KERNEL menu.c32
	APPEND pxelinux.cfg/installserver
LABEL VMware Menu
	MENU LABEL VMware ESXi Install
	KERNEL menu.c32
	APPEND pxelinux.cfg/vmware
LABEL toolkit // меню по умолчанию
	MENU LABEL Linux Scripting Toolkits
	MENU default
	KERNEL menu.c32
	APPEND pxelinux.cfg/toolkit // переход на следующее меню

Datei pxelinux.cfg/toolkit:

prompt 0
timeout 100
menu title X5 PXE Boot Menu
label mainmenu
    menu label ^Return to Main Menu
    kernel menu.c32
    append pxelinux.cfg/default
label x5toolkit-auto // по умолчанию — автоматический режим
        menu label x5 toolkit autoinstall
        menu default
        kernel toolkit/tkcustom-kernel
        append initrd=toolkit/tk-initramfs.gz quiet net.ifnames=0 biosdevname=0 nfs_toolkit_ip=192.168.200.1 nfs_toolkit_path=tftpboot/toolkit nfs_toolkit_script=scripts/mount.sh script_cmd=master-install.sh CMDIS2=”…”
label x5toolkit-shell // для отладки - консоль
        menu label x5 toolkit shell
        kernel toolkit/tkcustom-kernel
        append initrd=toolkit/tkcustom-initramfs.gz quiet net.ifnames=0 biosdevname=0 nfs_toolkit_ip=192.168.200.1 nfs_toolkit_path=tftpboot/toolkit nfs_toolkit_script=scripts/mount.sh script_cmd=/bin/bash CMDIS2=”…”

Der Kernel und initramfs sind in dieser Phase ein Zwischen-Linux-Image, mit dessen Hilfe die Hauptvorbereitung und Konfiguration des Servers erfolgt.

Wie Sie sehen, übergibt der Bootloader viele Parameter an den Kernel. Einige dieser Parameter werden vom Kernel selbst verwendet. Und einige können wir für unsere eigenen Zwecke nutzen. Dies wird später besprochen, aber Sie können sich vorerst nur daran erinnern, dass alle übergebenen Parameter im Linux-Zwischenimage über /proc/cmdline verfügbar sein werden.

Wo kann ich sie bekommen, Kernel und Initramfs?
Als Basis können Sie eine beliebige Linux-Distribution wählen. Worauf wir bei der Auswahl achten:

  • das Boot-Image muss universell sein (Verfügbarkeit von Treibern, Möglichkeit zur Installation zusätzlicher Dienstprogramme);
  • Höchstwahrscheinlich müssen Sie die Initramfs anpassen.

Wie wird das in unserer Lösung für X5 gemacht? Als Basis wurde CentOS 7 gewählt. Versuchen wir den folgenden Trick: Bereiten Sie die zukünftige Image-Struktur vor, packen Sie sie in ein Archiv und erstellen Sie ein Initramfs, in dem sich unser Dateisystemarchiv befindet. Beim Laden des Images wird das Archiv in die erstellte tmpfs-Partition erweitert. Auf diese Weise erhalten wir ein minimales, aber vollwertiges Live-Linux-Image mit allen erforderlichen Dienstprogrammen, das nur aus zwei Dateien besteht: vmkernel und initramfs.

#создаем директории: 

mkdir -p /tftpboot/toolkit/CustomTK/rootfs /tftpboot/toolkit/CustomTK/initramfs/bin

#подготавливаем структуру:

yum groups -y install "Minimal Install" --installroot=/tftpboot/toolkit/CustomTK/rootfs/
yum -y install nfs-utils mariadb ntpdate mtools syslinux mdadm tbb libgomp efibootmgr dosfstools net-tools pciutils openssl make ipmitool OpenIPMI-modalias rng-tools --installroot=/tftpboot/toolkit/CustomTK/rootfs/
yum -y remove biosdevname --installroot=/tftpboot/toolkit/CustomTK/rootfs/

# подготавливаем initramfs:

wget https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-x86_64 -O /tftpboot/toolkit/CustomTK/initramfs/bin/busybox
chmod a+x /tftpboot/toolkit/CustomTK/initramfs/bin/busybox
cp /tftpboot/toolkit/CustomTK/rootfs/boot/vmlinuz-3.10.0-957.el7.x86_64 /tftpboot/toolkit/tkcustom-kernel

# создаем /tftpboot/toolkit/CustomTK/initramfs/init (ниже содержание скрипта):

#!/bin/busybox sh
/bin/busybox --install /bin
mkdir -p /dev /proc /sys /var/run /newroot
mount -t proc proc /proc
mount -o mode=0755 -t devtmpfs devtmpfs /dev
mkdir -p /dev/pts /dev/shm /dev/mapper /dev/vc
mount -t devpts -o gid=5,mode=620 devpts /dev/pts
mount -t sysfs sysfs /sys
mount -t tmpfs -o size=4000m tmpfs /newroot
echo -n "Extracting rootfs... "
xz -d -c -f rootfs.tar.xz | tar -x -f - -C /newroot
echo "done"
mkdir -p /newroot/dev /newroot/proc /newroot/sys
mount --move /sys  /newroot/sys
mount --move /proc /newroot/proc
mount --move /dev  /newroot/dev
exec switch_root /newroot /sbin/init

# упаковываем rootfs и initramfs:

cd /tftpboot/toolkit/CustomTK/rootfs
tar cJf /tftpboot/toolkit/CustomTK/initramfs/rootfs.tar.xz --exclude ./proc --exclude ./sys --exclude ./dev .
cd /tftpboot/toolkit/CustomTK/initramfs
find . -print0 | cpio --null -ov --format=newc | gzip -9 > /tftpboot/toolkit/tkcustom-initramfs-new.gz

Daher haben wir den Kernel und die Initramfs angegeben, die geladen werden sollen. Als Ergebnis erhalten wir zu diesem Zeitpunkt durch das Laden des Zwischen-Linux-Images über PXE die Betriebssystemkonsole.

Großartig, aber jetzt müssen wir die Kontrolle an unsere „Automatisierung“ übergeben.

Es kann so gemacht werden.

Nehmen wir an, dass wir nach dem Laden des Bildes planen, die Kontrolle an das Skript mount.sh zu übergeben.
Lassen Sie uns das Skript mount.sh in Autorun einbeziehen. Dazu müssen Sie die initramfs ändern:

  • initramfs entpacken (wenn wir die obige initramfs-Option verwenden, ist dies nicht erforderlich)
  • Fügen Sie Code in den Start ein, der die über /proc/cmdline übergebenen Parameter analysiert und die Steuerung weiter überträgt;
  • Initramfs packen.

Notiz. Beim X5-Toolkit wird die Ladesteuerung an das Skript übergeben /opt/x5/toolkit/bin/hook.sh с помощью override.conf в getty tty1 (ExecStart=…)

Es wird also das Image geladen, in dem das mount.sh-Skript bei Autorun startet. Als nächstes analysiert das mount.sh-Skript die übergebenen Parameter (script_cmd=) während der Ausführung und startet das erforderliche Programm/Skript.

Etiketten-Toolkit-Auto
Kernel...
anhängen... nfs_toolkit_script=scripts/mount.sh script_cmd=master-install.sh

Etiketten-Toolkit-Schale
Kernel...
anhängen... nfs_toolkit_script=scripts/mount.sh script_cmd=/bin/bash

Do-it-yourself-Bare-Metal-Provisioning oder automatische Vorbereitung von Servern von Grund auf

Hier links ist das PXE-Menü, rechts das Steuerungsübertragungsdiagramm.

Wir haben die Übertragung der Kontrolle herausgefunden. Abhängig von der Auswahl des PXE-Menüs wird entweder das Autokonfigurationsskript oder die Debugging-Konsole gestartet.

Bei der automatischen Konfiguration werden vom Installationsserver die notwendigen Verzeichnisse gemountet, die Folgendes enthalten:

  • Skripte;
  • gespeicherte BIOS/UEFI-Vorlagen für verschiedene Server;
  • Firmware;
  • Server-Dienstprogramme;
  • Protokolle

Als Nächstes überträgt das Skript mount.sh die Steuerung aus dem Skriptverzeichnis an das Skript master-install.sh.

Der Skriptbaum (die Reihenfolge, in der sie gestartet werden) sieht etwa so aus:

  • Master-Installation
  • Sharefunctions (gemeinsame Funktionen)
  • info (Informationsausgabe)
  • Modelle (Festlegen von Installationsparametern basierend auf dem Servermodell)
  • Prepare_utils (Installation der notwendigen Dienstprogramme)
  • fwupdate (Firmware-Update)
  • diag (Elementardiagnostik)
  • biosconf (BIOS/UEFI-Einstellungen)
  • Clockfix (Einstellen der Uhrzeit auf dem Motherboard)
  • srmconf (Konfiguration der Remote-Schnittstellenschnittstelle)
  • Raidconf (Logische Volumes konfigurieren)

ein von:

  • Vorinstallation (Übertragung der Kontrolle an das Betriebssystem oder den Hypervisor-Installer, z. B. ESXi)
  • merged-install (sofortiger Start des Entpackens des Images)

Jetzt wissen wir:

  • wie man einen Server über PXE startet;
  • wie Sie die Kontrolle an Ihr eigenes Skript übertragen.


Lass uns weitermachen. Folgende Fragen wurden relevant:

  • Wie identifizieren wir den Server, den wir vorbereiten?
  • Welche Dienstprogramme und wie wird der Server konfiguriert?
  • Wie erhalte ich Einstellungen für einen bestimmten Server?

Wie identifizieren wir den Server, den wir vorbereiten?

Ganz einfach – DMI:

dmidecode –s system-product-name
dmidecode –s system-manufacturer
dmidecode –s system-serial-number

Hier finden Sie alles, was Sie brauchen: Hersteller, Modell, Seriennummer. Wenn Sie nicht sicher sind, ob diese Informationen auf allen Servern vorhanden sind, können Sie sie anhand ihrer MAC-Adresse identifizieren. Oder in beide Richtungen gleichzeitig, wenn die Serverhersteller unterschiedlich sind und bei manchen Modellen einfach keine Informationen zur Seriennummer vorhanden sind.

Basierend auf den erhaltenen Informationen werden Netzwerkordner vom Installationsserver bereitgestellt und alles Notwendige geladen (Dienstprogramme, Firmware usw.).

Welche Dienstprogramme und wie wird der Server konfiguriert?

Ich werde für einige Hersteller Dienstprogramme für Linux bereitstellen. Alle Dienstprogramme sind auf den offiziellen Websites der Anbieter verfügbar.

Do-it-yourself-Bare-Metal-Provisioning oder automatische Vorbereitung von Servern von Grund auf

Mit der Firmware denke ich, dass alles klar ist. Sie liegen normalerweise in Form gepackter ausführbarer Dateien vor. Die ausführbare Datei steuert den Firmware-Aktualisierungsprozess und meldet den Rückkehrcode.

BIOS und IPMI werden normalerweise über Vorlagen konfiguriert. Bei Bedarf kann die Vorlage vor dem Download bearbeitet werden.

RAID-Dienstprogramme einiger Anbieter können auch mithilfe einer Vorlage konfiguriert werden. Ist dies nicht der Fall, müssen Sie ein Konfigurationsskript schreiben.

Das Verfahren zum Einrichten von RAID ist am häufigsten wie folgt:

  • Wir fordern die aktuelle Konfiguration an.
  • Wenn bereits logische Arrays vorhanden sind, löschen wir diese.
  • Schauen wir uns an, welche physischen Festplatten vorhanden sind und wie viele es gibt.
  • Erstellen Sie ein neues logisches Array. Im Fehlerfall unterbrechen wir den Vorgang.

Wie erhalte ich Einstellungen für einen bestimmten Server?

Gehen wir davon aus, dass die Einstellungen aller Server auf dem Installationsserver gespeichert werden. In diesem Fall müssen wir zur Beantwortung unserer Frage zunächst entscheiden, wie wir die Einstellungen auf den Installationsserver übertragen.

Zunächst können Sie mit Textdateien auskommen. (In Zukunft möchten Sie möglicherweise eine Textdatei als Ersatzmethode für die Übertragung von Einstellungen verwenden.)

Sie können eine Textdatei auf dem Installationsserver „freigeben“. Und fügen Sie seinen Mount zum mount.sh-Skript hinzu.

Die Zeilen sehen beispielsweise so aus:

<Seriennummer> <Hostname> <Subnetz>

Diese Zeilen werden vom Ingenieur von seiner Arbeitsmaschine in die Datei übertragen. Und dann werden beim Einrichten eines Servers die Parameter für einen bestimmten Server aus der Datei gelesen.

Langfristig gesehen ist es jedoch besser, eine Datenbank zum Speichern von Einstellungen, Zuständen und Protokollen von Serverinstallationen zu verwenden.

Natürlich reicht eine Datenbank allein nicht aus und Sie müssen einen Client-Teil erstellen, mit dessen Hilfe Einstellungen in die Datenbank übertragen werden. Dies ist im Vergleich zu einer Textdatei schwieriger zu implementieren, aber tatsächlich ist nicht alles so schwierig, wie es scheint. Es ist durchaus möglich, eine Minimalversion eines Clients zu schreiben, der die Daten einfach selbst in die Datenbank überträgt. Und in Zukunft wird es möglich sein, das Client-Programm im kostenlosen Modus zu verbessern (Berichte, Etiketten drucken, Benachrichtigungen senden usw., was mir einfällt).

Durch eine gezielte Anfrage an die Datenbank und Angabe der Server-Seriennummer erhalten wir die notwendigen Parameter zur Konfiguration des Servers.

Außerdem müssen wir uns keine Sperren für den gleichzeitigen Zugriff einfallen lassen, wie es bei einer Textdatei der Fall ist.

Wir können das Konfigurationsprotokoll in allen Phasen in die Datenbank schreiben und den Installationsprozess durch Ereignisse und Flags der Vorbereitungsphasen steuern.

Jetzt wissen wir wie:

  • Booten Sie den Server über PXE;
  • Übertragen Sie die Kontrolle an unser Skript.
  • Identifizieren Sie den Server, der vorbereitet werden muss, anhand seiner Seriennummer.
  • Konfigurieren Sie den Server mit den entsprechenden Dienstprogrammen.
  • Übertragen Sie Einstellungen mithilfe des Client-Teils in die Datenbank des Installationsservers.

Wir haben herausgefunden, wie:

  • der installierte Server erhält die notwendigen Einstellungen aus der Datenbank;
  • Der gesamte Vorbereitungsfortschritt wird in der Datenbank aufgezeichnet (Protokolle, Ereignisse, Phasenmarkierungen).

Was ist mit den verschiedenen Arten von Software, die Sie installieren? Wie installiere ich einen Hypervisor, kopiere eine VM und konfiguriere alles?

Bei der Bereitstellung eines Dateisystem-Images (Linux) auf Hardware ist alles ganz einfach:

  • Nachdem wir alle Serverkomponenten eingerichtet haben, stellen wir das Image bereit.
  • Installieren Sie den Grub-Bootloader.
  • Wir chrooten und konfigurieren alles, was benötigt wird.

So übertragen Sie die Kontrolle an das Betriebssystem-Installationsprogramm (am Beispiel von ESXi).

  • Die Übergabe der Kontrolle von unserem Skript an den Hypervisor-Installer organisieren wir mithilfe der automatischen Antwortdatei (Kickstart):
  • Wir löschen die aktuellen Partitionen auf der Festplatte.
  • Erstellen Sie eine Partition mit einer Größe von 500 MB.
  • Wir markieren es als bootfähig.
  • Formatieren Sie auf FAT32.
  • Wir kopieren die ESXi-Installationsdateien in das Stammverzeichnis.
  • Syslinux installieren.
  • Kopieren Sie syslinux.cfg nach /syslinux/

default esxi
prompt 1
timeout 50
label esxi
kernel mboot.c32
append -c boot.cfg

  • Kopieren Sie mboot.c32 nach /syslinux.
  • Boot.cfg sollte kernelopt=ks=ftp:// haben /ks_esxi.cfg
  • Starten Sie den Server neu.

Nach dem Neustart des Servers wird das ESXi-Installationsprogramm von der Festplatte des Servers heruntergeladen. Alle erforderlichen Installationsdateien werden in den Speicher geladen und dann beginnt die ESXi-Installation entsprechend der angegebenen Auto-Response-Datei.

Hier sind ein paar Zeilen aus der Autoresponse-Datei ks_esxi.cfg:

%firstboot --interpreter=busybox
…
# получаем серийный номер

SYSSN=$(esxcli hardware platform get | grep Serial | awk -F " " '{print $3}')

# получаем IP

IPADDRT=$(esxcli network ip interface ipv4 get | grep vmk0 | awk -F " " '{print $2}')
LAST_OCTET=$(echo $IPADDRT | awk -F'.' '{print $4}')

# подключаем NFS инсталл-сервера

esxcli storage nfs add -H is -s /srv/nfs_share -v nfsshare1

# копируем временные настройки ssh, для использования ssh-клиента

mv /etc/ssh /etc/ssh.tmp
cp -R /vmfs/volumes/nfsshare1/ssh /etc/
chmod go-r /etc/ssh/ssh_host_rsa_key

# копируем ovftool, для развертывания ВМ сейчас, плюс возможно пригодится позже

cp -R /vmfs/volumes/nfsshare1/ovftool /vmfs/volumes/datastore1/

# развертываем ВМ

/vmfs/volumes/datastore1/ovftool/tools/ovftool --acceptAllEulas --noSSLVerify --datastore=datastore1 --name=VM1 /vmfs/volumes/nfsshare1/VM_T/VM1.ova vi://root:[email protected]
/vmfs/volumes/datastore1/ovftool/tools/ovftool --acceptAllEulas --noSSLVerify --datastore=datastore1 --name=VM2 /vmfs/volumes/nfsshare1/VM_T/VM2.ova vi://root:[email protected]

# получаем строку с настройками нашего сервера

ssh root@is "mysql -h'192.168.0.1' -D'servers' -u'user' -p'secretpassword' -e "SELECT ... WHERE servers.serial='$SYSSN'"" | grep -v ^$ | sed 's/NULL//g' > /tmp/servers
...
# генерируем скрипт настройки сети

echo '#!/bin/sh' > /vmfs/volumes/datastore1/netconf.sh
echo "esxcli network ip interface ipv4 set -i=vmk0 -t=static --ipv4=$IPADDR --netmask=$S_SUB || exit 1" >> /vmfs/volumes/datastore1/netconf.sh
echo "esxcli network ip route ipv4 add -g=$S_GW -n=default || exit 1" >> /vmfs/volumes/datastore1/netconf.sh
chmod a+x /vmfs/volumes/datastore1/netconf.sh

# задаем параметр guestinfo.esxihost.id, указываем в нем серийный номер

echo "guestinfo.esxihost.id = "$SYSSN"" >> /vmfs/volumes/datastore1/VM1/VM1.vmx
echo "guestinfo.esxihost.id = "$SYSSN"" >> /vmfs/volumes/datastore1/VM2/VM2.vmx
...
# обновляем информацию в базе

SYSNAME=$(esxcli hardware platform get | grep Product | sed 's/Product Name://' | sed 's/^ *//')
UUID=$(vim-cmd hostsvc/hostsummary | grep uuid | sed 's/ //g;s/,$//' | sed 's/^uuid="//;s/"$//')
ssh root@is "mysql -D'servers' -u'user' -p'secretpassword' -e "UPDATE servers ... SET ... WHERE servers.serial='$SYSSN'""
ssh root@is "mysql -D'servers' -u'user' -p'secretpassword' -e "INSERT INTO events ...""

# возвращаем настройки SSH

rm -rf /etc/ssh
mv /etc/ssh.tmp /etc/ssh

# настраиваем сеть и перезагружаемся

esxcli system hostname set --fqdn=esx-${G_NICK}.x5.ru
/vmfs/volumes/datastore1/netconf.sh
reboot

In dieser Phase wird der Hypervisor installiert und konfiguriert und virtuelle Maschinen werden kopiert.

Wie konfiguriere ich jetzt virtuelle Maschinen?

Wir haben ein wenig geschummelt: Bei der Installation haben wir in der Datei VM1.vmx den Parameter „guestinfo.esxihost.id = „$SYSSN““ gesetzt und darin die Seriennummer des physischen Servers angegeben.

Nach dem Start kann die virtuelle Maschine (mit installiertem vmware-tools-Paket) nun auf diesen Parameter zugreifen:

ESXI_SN=$(vmtoolsd --cmd "info-get guestinfo.esxihost.id")

Das heißt, die VM kann sich selbst identifizieren (sie kennt die Seriennummer des physischen Hosts), eine Anfrage an die Datenbank des Installationsservers stellen und die Parameter empfangen, die konfiguriert werden müssen. Dies alles wird in ein Skript kompiliert, das automatisch gestartet werden sollte, wenn GuestOS VM startet (aber einmal: RunOnce).

Jetzt wissen wir wie:

  • Booten Sie den Server über PXE;
  • Übertragen Sie die Kontrolle an unser Skript.
  • Identifizieren Sie den Server, der vorbereitet werden muss, anhand seiner Seriennummer.
  • Konfigurieren Sie den Server mit den entsprechenden Dienstprogrammen.
  • Übertragen Sie Einstellungen mithilfe des Client-Teils an die Datenbank des Installationsservers.
  • Konfigurieren Sie verschiedene Arten von Software, einschließlich der Bereitstellung des ESXI-Hypervisors und der Konfiguration virtueller Maschinen (alles automatisch).

Wir haben herausgefunden, wie:

  • der installierte Server erhält die notwendigen Einstellungen aus der Datenbank;
  • Der gesamte Vorbereitungsfortschritt wird in der Datenbank aufgezeichnet (Protokolle, Ereignisse, Phasenmarkierungen).


Unterm Strich:

Ich glaube, dass die Einzigartigkeit dieser Lösung in ihrer Flexibilität, Einfachheit, Leistungsfähigkeit und Vielseitigkeit liegt.

Bitte schreiben Sie in die Kommentare, was Sie denken.

Source: habr.com

Kommentar hinzufügen