Do-it-yourself Bare-Metal Provisioning, o Awtomatikong paghahanda ng mga server mula sa simula

Kumusta, ako si Denis at isa sa aking mga lugar ng aktibidad ay ang pagbuo ng mga solusyon sa imprastraktura sa X5. Ngayon gusto kong ibahagi sa iyo kung paano ka makakapag-deploy ng awtomatikong sistema ng paghahanda ng server batay sa mga tool na magagamit sa publiko. Sa aking opinyon, ito ay isang kawili-wili, simple at nababaluktot na solusyon.

Do-it-yourself Bare-Metal Provisioning, o Awtomatikong paghahanda ng mga server mula sa simula

Ang ibig sabihin ng paghahanda ay: gawing ganap na naka-configure na server na may OS ang isang bagong server. Linux o sa ESXi hypervisor (ang pag-deploy ng mga server ng Windows ay hindi tinalakay sa artikulong ito).

mga tuntunin:

  • mga server – mga server na kailangang i-configure.
  • Ang server ng pag-install ay ang pangunahing server na nagbibigay ng buong proseso ng paghahanda sa network.

Bakit kailangan ang automation?

Sabihin nating mayroong isang gawain: upang maihanda nang malaki ang mga server mula sa simula, sa isang peak - 30 bawat araw. Ang mga server ng iba't ibang mga tagagawa at modelo, iba't ibang mga operating system ay maaaring mai-install sa kanila, at maaaring magkaroon o walang hypervisor.

Anong mga operasyon ang kasama sa proseso ng pag-setup (nang walang automation):

  • ikonekta ang isang keyboard, mouse, monitor sa server;
  • i-configure ang BIOS, RAID, IPMI;
  • i-update ang firmware ng bahagi;
  • mag-deploy ng imahe ng file system (o mag-install ng hypervisor at kopyahin ang mga virtual machine);

Tandaan. Bilang kahalili, posible ang pag-deploy ng OS sa pamamagitan ng pag-install gamit ang isang file ng auto-response. Ngunit hindi ito tatalakayin sa artikulo. Bagama't makikita mo sa ibaba na ang pagdaragdag ng pagpapaandar na ito ay hindi mahirap.

  • i-configure ang mga parameter ng OS (hostname, IP, atbp.).

Sa diskarteng ito, ang parehong mga setting ay isinasagawa nang sunud-sunod sa bawat server. Ang kahusayan ng naturang gawain ay napakababa.

Ang kakanyahan ng automation ay upang alisin ang pakikilahok ng tao mula sa proseso ng paghahanda ng server. Hangga't maaari.

Binabawasan ng automation ang downtime sa pagitan ng mga operasyon at ginagawang posible na magkaloob ng maraming server nang sabay-sabay. Ang posibilidad ng mga pagkakamali dahil sa mga kadahilanan ng tao ay lubhang nabawasan.

Do-it-yourself Bare-Metal Provisioning, o Awtomatikong paghahanda ng mga server mula sa simula

Paano awtomatikong na-configure ang mga server?

Suriin natin ang lahat ng mga yugto nang detalyado.

Mayroon kang Linux server na ginagamit mo bilang server ng pag-install ng PXE. Ang mga serbisyo ay naka-install at naka-configure dito: DHCP, TFTP.

Kaya, i-boot namin ang server (na kailangang i-configure) sa pamamagitan ng PXE. Tandaan natin kung paano ito gumagana:

  • Ang network boot ay pinili sa server.
  • Nilo-load ng server ang PXE-ROM ng network card at nakikipag-ugnayan sa server ng pag-install sa pamamagitan ng DHCP upang makakuha ng address ng network.
  • Ang server ng pag-install ng DHCP ay nagbibigay ng isang address, pati na rin ang mga tagubilin para sa karagdagang pag-download sa pamamagitan ng PXE.
  • Nilo-load ng server ang network bootloader mula sa installation server sa pamamagitan ng PXE, ang karagdagang paglo-load ay nangyayari ayon sa PXE configuration file.
  • Ang boot ay nangyayari batay sa natanggap na mga parameter (kernel, initramfs, mount point, squashfs image, atbp.).

Tandaan. Inilalarawan ng artikulo ang pag-boot sa pamamagitan ng PXE sa pamamagitan ng BIOS mode. Sa kasalukuyan, ang mga tagagawa ay aktibong nagpapatupad ng UEFI bootmode. Para sa PXE, ang pagkakaiba ay nasa configuration ng DHCP server at ang pagkakaroon ng karagdagang bootloader.

Tingnan natin ang isang halimbawa ng configuration ng PXE server (pxelinux menu).

File 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 // ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ мСню

File 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=”…”

Ang kernel at initramfs sa yugtong ito ay isang intermediate na imahe ng Linux, sa tulong kung saan ang pangunahing paghahanda at pagsasaayos ng server ay magaganap.

Tulad ng nakikita mo, ang bootloader ay nagpapasa ng maraming mga parameter sa kernel. Ang ilan sa mga parameter na ito ay ginagamit ng kernel mismo. At maaari nating gamitin ang ilan para sa ating sariling mga layunin. Tatalakayin ito sa ibang pagkakataon, ngunit sa ngayon ay maaalala mo lamang na ang lahat ng naipasa na mga parameter ay magagamit sa intermediate na imahe ng Linux sa pamamagitan ng /proc/cmdline.

Saan ko makukuha ang mga ito, kernel at initramfs?
Bilang batayan, maaari kang pumili ng anumang pamamahagi ng Linux. Ano ang binibigyang pansin natin kapag pumipili:

  • ang imahe ng boot ay dapat na unibersal (availability ng mga driver, kakayahang mag-install ng mga karagdagang kagamitan);
  • Malamang, kakailanganin mong i-customize ang initramfs.

Paano ito ginagawa sa aming solusyon para sa X5? Pinili ang CentOS 7 bilang batayan. Subukan natin ang sumusunod na trick: ihanda ang istraktura ng imahe sa hinaharap, i-pack ito sa isang archive at lumikha ng initramfs, kung saan makikita ang aming file system archive. Kapag naglo-load ng imahe, ang archive ay lalawak sa nilikha na tmpfs partition. Sa ganitong paraan makakakuha tayo ng isang minimal, ngunit ganap na live na imahe ng linux kasama ang lahat ng kinakailangang mga utility, na binubuo lamang ng dalawang file: vmkernel at 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

Kaya tinukoy namin ang kernel at initramfs na dapat i-load. Bilang resulta, sa yugtong ito, sa pamamagitan ng paglo-load ng intermediate linux na imahe sa pamamagitan ng PXE, matatanggap namin ang OS console.

Mahusay, ngunit ngayon kailangan naming ilipat ang kontrol sa aming "automation".

Maaari itong gawin tulad nito.

Ipagpalagay natin na pagkatapos i-load ang imahe plano naming ilipat ang kontrol sa mount.sh script.
Isama natin ang mount.sh script sa autorun. Upang gawin ito kakailanganin mong baguhin ang initramfs:

  • i-unpack ang initramfs (kung gagamitin namin ang opsyon sa initramfs sa itaas, hindi ito kinakailangan)
  • isama ang code sa startup na susuriin ang mga parameter na dumaan sa /proc/cmdline at higit pang kontrol sa paglipat;
  • pack initramfs.

Tandaan. Sa kaso ng X5 toolkit, ang kontrol sa pag-load ay inililipat sa script /opt/x5/toolkit/bin/hook.sh с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ override.conf Π² getty tty1 (ExecStart=…)

Kaya, ang imahe ay na-load, kung saan ang mount.sh script ay nagsisimula sa autorun. Susunod, sinusuri ng mount.sh script ang mga naipasa na parameter (script_cmd=) sa panahon ng pagpapatupad at inilulunsad ang kinakailangang programa/script.

label toolkit-kotse
kernel...
dugtungan... nfs_toolkit_script=scripts/mount.sh script_cmd=master-install.sh

label toolkit-talukap ng alimango
kernel...
dugtungan... nfs_toolkit_script=scripts/mount.sh script_cmd=/bin/bash

Do-it-yourself Bare-Metal Provisioning, o Awtomatikong paghahanda ng mga server mula sa simula

Dito sa kaliwa ay ang PXE menu, sa kanan ay ang control transfer diagram.

Naisip namin ang paglipat ng kontrol. Depende sa pagpili ng menu ng PXE, ang alinman sa auto-configuration script o ang debugging console ay ilulunsad.

Sa kaso ng awtomatikong pagsasaayos, ang mga kinakailangang direktoryo ay naka-mount mula sa server ng pag-install, na naglalaman ng:

  • mga script;
  • naka-save na mga template ng BIOS/UEFI para sa iba't ibang mga server;
  • firmware;
  • mga kagamitan sa server;
  • mga log

Susunod, inililipat ng mount.sh script ang kontrol sa master-install.sh script mula sa direktoryo ng script.

Ang script tree (ang pagkakasunud-sunod kung saan sila ay inilunsad) ay ganito ang hitsura:

  • master-install
  • sharefunctions (shared functions)
  • impormasyon (output ng impormasyon)
  • mga modelo (pagtatakda ng mga parameter ng pag-install batay sa modelo ng server)
  • prepare_utils (pag-install ng mga kinakailangang kagamitan)
  • fwupdate (pag-update ng firmware)
  • diag (elementarya na diagnostic)
  • biosconf (mga setting ng BIOS/UEFI)
  • clockfix (pagtatakda ng oras sa motherboard)
  • srmconf (remote interface interface configuration)
  • raidconf (pag-configure ng mga lohikal na volume)

isa sa:

  • preinstall (paglilipat ng kontrol sa OS o hypervisor installer, gaya ng ESXi)
  • merged-install (agarang pagsisimula ng pag-unpack ng imahe)

Ngayon alam na natin:

  • kung paano mag-boot ng isang server sa pamamagitan ng PXE;
  • kung paano ilipat ang kontrol sa iyong sariling script.


Ituloy natin. Ang mga sumusunod na tanong ay naging may kaugnayan:

  • Paano matukoy ang server na inihahanda namin?
  • Anong mga utility at paano i-configure ang server?
  • Paano makakuha ng mga setting para sa isang partikular na server?

Paano matukoy ang server na inihahanda namin?

Ito ay simple - DMI:

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

Lahat ng kailangan mo ay nandito: vendor, modelo, serial number. Kung hindi ka sigurado na ang impormasyong ito ay naroroon sa lahat ng mga server, maaari mong tukuyin ang mga ito sa pamamagitan ng kanilang MAC address. O sa parehong paraan sa parehong oras, kung ang mga vendor ng server ay iba at sa ilang mga modelo ay walang impormasyon tungkol sa serial number.

Batay sa impormasyong natanggap, ang mga folder ng network ay naka-mount mula sa server ng pag-install at lahat ng kailangan ay na-load (mga utility, firmware, atbp.).

Anong mga utility at paano i-configure ang server?

Magbibigay ako ng mga utility para sa Linux para sa ilang mga tagagawa. Ang lahat ng mga utility ay magagamit sa mga opisyal na website ng mga vendor.

Do-it-yourself Bare-Metal Provisioning, o Awtomatikong paghahanda ng mga server mula sa simula

Sa firmware, sa tingin ko ang lahat ay malinaw. Karaniwang dumating ang mga ito sa anyo ng mga naka-package na executable na file. Kinokontrol ng executable file ang proseso ng pag-update ng firmware at iniuulat ang return code.

Karaniwang na-configure ang BIOS at IPMI sa pamamagitan ng mga template. Kung kinakailangan, maaaring i-edit ang template bago i-download.

Ang mga utility ng RAID mula sa ilang mga vendor ay maaari ding i-configure gamit ang isang template. Kung hindi ito ang kaso, kakailanganin mong magsulat ng script ng pagsasaayos.

Ang pamamaraan para sa pag-set up ng RAID ay kadalasang tulad ng sumusunod:

  • Hinihiling namin ang kasalukuyang configuration.
  • Kung mayroon nang mga lohikal na array, binubura namin ang mga ito.
  • Tingnan natin kung anong mga pisikal na disk ang naroroon at kung ilan ang mayroon.
  • Lumikha ng bagong lohikal na hanay. Inaantala namin ang proseso kung sakaling magkaroon ng error.

Paano makakuha ng mga setting para sa isang partikular na server?

Ipagpalagay natin na ang mga setting ng lahat ng mga server ay maiimbak sa server ng pag-install. Sa kasong ito, upang masagot ang aming tanong, kailangan muna naming magpasya kung paano ilipat ang mga setting sa server ng pag-install.

Sa una, makakapagpatuloy ka sa mga text file. (Sa hinaharap, maaaring gusto mong gumamit ng text file bilang fallback na paraan para sa paglilipat ng mga setting.)

Maaari kang "magbahagi" ng isang text file sa server ng pag-install. At idagdag ang mount nito sa mount.sh script.

Ang mga linya, halimbawa, ay magiging ganito:

<serial number> <hostname> <subnet>

Ang mga linyang ito ay ililipat ng engineer sa file mula sa kanyang work machine. At pagkatapos, kapag nagse-set up ng isang server, ang mga parameter para sa isang partikular na server ay mababasa mula sa file.

Ngunit, sa mahabang panahon, mas mainam na gumamit ng database upang mag-imbak ng mga setting, estado at log ng mga pag-install ng server.

Siyempre, hindi sapat ang isang database lamang, at kakailanganin mong lumikha ng bahagi ng kliyente sa tulong ng kung aling mga setting ang ililipat sa database. Ito ay mas mahirap ipatupad kumpara sa isang text file, ngunit sa katunayan, ang lahat ay hindi kasing mahirap na tila. Posible na magsulat ng isang minimal na bersyon ng isang kliyente na maglilipat lamang ng data sa database mismo. At sa hinaharap posible na mapabuti ang programa ng kliyente sa libreng mode (mga ulat, mga label sa pag-print, pagpapadala ng mga abiso, atbp. na nasa isip).

Sa pamamagitan ng paggawa ng isang partikular na kahilingan sa database at pagtukoy sa serial number ng server, matatanggap namin ang mga kinakailangang parameter para sa pag-configure ng server.

Dagdag pa, hindi namin kakailanganing gumawa ng mga kandado para sa sabay-sabay na pag-access, tulad ng kaso sa isang text file.

Maaari naming isulat ang configuration log sa database sa lahat ng yugto at kontrolin ang proseso ng pag-install sa pamamagitan ng mga kaganapan at flag ng mga yugto ng paghahanda.

Ngayon alam na natin kung paano:

  • i-boot ang server sa pamamagitan ng PXE;
  • ilipat ang kontrol sa aming script;
  • tukuyin ang server na kailangang ihanda sa pamamagitan ng serial number nito;
  • i-configure ang server gamit ang naaangkop na mga utility;
  • ilipat ang mga setting sa database ng server ng pag-install gamit ang bahagi ng kliyente.

Nalaman namin kung paano:

  • ang naka-install na server ay tumatanggap ng mga kinakailangang setting mula sa database;
  • lahat ng pag-unlad ng paghahanda ay naitala sa database (mga log, mga kaganapan, mga flag ng entablado).

Paano ang iba't ibang uri ng software na iyong ini-install? Paano mag-install ng hypervisor, kopyahin ang isang VM at i-configure ang lahat?

Sa kaso ng pag-deploy ng isang file system image (linux) sa hardware, ang lahat ay medyo simple:

  • Pagkatapos i-set up ang lahat ng mga bahagi ng server, i-deploy namin ang imahe.
  • I-install ang grub bootloader.
  • Nag-chroot kami at nag-configure ng lahat ng kailangan.

Paano ilipat ang kontrol sa installer ng OS (gamit ang ESXi bilang isang halimbawa).

  • Inayos namin ang paglipat ng kontrol mula sa aming script patungo sa hypervisor installer gamit ang awtomatikong tugon na file (kickstart):
  • Tinatanggal namin ang kasalukuyang mga partisyon sa disk.
  • Gumawa ng partition na may sukat na 500MB.
  • Minarkahan namin ito bilang bootable.
  • I-format sa FAT32.
  • Kopyahin ang mga file sa pag-install ng ESXi sa ugat nito.
  • Pag-install ng syslinux.
  • Kopyahin ang syslinux.cfg sa /syslinux/

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

  • Kopyahin ang mboot.c32 sa /syslinux.
  • Ang Boot.cfg ay dapat magkaroon ng kernelopt=ks=ftp:// /ks_esxi.cfg
  • I-reboot ang server.

Pagkatapos mag-reboot ng server, magda-download ang ESXi installer mula sa hard drive ng server. Ang lahat ng kinakailangang installer file ay ilo-load sa memorya at pagkatapos ay magsisimula ang pag-install ng ESXi, ayon sa tinukoy na file ng auto-response.

Narito ang ilang linya mula sa autoresponse file na 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

Sa yugtong ito, naka-install at naka-configure ang hypervisor, at kinokopya ang mga virtual machine.

Paano i-configure ang mga virtual machine ngayon?

Medyo nadaya kami: sa panahon ng pag-install, itinakda namin ang parameter guestinfo.esxihost.id = "$SYSSN" sa VM1.vmx file at ipinahiwatig ang serial number ng pisikal na server sa loob nito.

Ngayon, pagkatapos magsimula, ang virtual machine (na may naka-install na vmware-tools package) ay maaaring ma-access ang parameter na ito:

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

Iyon ay, makikilala ng VM ang sarili nito (alam nito ang serial number ng pisikal na host), gumawa ng kahilingan sa database ng pag-install ng server at tumanggap ng mga parameter na kailangang i-configure. Ang lahat ng ito ay pinagsama-sama sa isang script, na dapat na awtomatikong ilunsad kapag nagsimula ang guestos vm (ngunit isang beses: RunOnce).

Ngayon alam na natin kung paano:

  • i-boot ang server sa pamamagitan ng PXE;
  • ilipat ang kontrol sa aming script;
  • tukuyin ang server na kailangang ihanda sa pamamagitan ng serial number nito;
  • i-configure ang server gamit ang naaangkop na mga utility;
  • ilipat ang mga setting sa database ng pag-install ng server gamit ang bahagi ng kliyente;
  • i-configure ang iba't ibang uri ng software, kabilang ang pag-deploy ng esxi hypervisor at pag-configure ng mga virtual machine (awtomatikong lahat).

Nalaman namin kung paano:

  • ang naka-install na server ay tumatanggap ng mga kinakailangang setting mula sa database;
  • lahat ng pag-unlad ng paghahanda ay naitala sa database (mga log, mga kaganapan, mga flag ng entablado).


Ang bottom line:

Naniniwala ako na ang pagiging natatangi ng solusyon na ito ay nakasalalay sa kakayahang umangkop, pagiging simple, mga kakayahan at kakayahang magamit.

Mangyaring isulat sa mga komento kung ano ang iniisip mo.

Pinagmulan: www.habr.com

Magdagdag ng komento