Penyediaan Bare-Metal yang dilakukan sendiri, atau Persiapan server otomatis dari awal

Halo, saya Denis dan salah satu bidang kegiatan saya adalah pengembangan solusi infrastruktur di X5. Hari ini saya ingin berbagi dengan Anda bagaimana Anda dapat menerapkan sistem persiapan server otomatis berdasarkan alat yang tersedia untuk umum. Menurut pendapat saya, ini adalah solusi yang menarik, sederhana dan fleksibel.

Penyediaan Bare-Metal yang dilakukan sendiri, atau Persiapan server otomatis dari awal

Yang kami maksud dengan persiapan adalah: mengubah server baru menjadi server yang terkonfigurasi sepenuhnya dengan OS. Linux atau dengan hypervisor ESXi (penerapan server Windows tidak dibahas dalam artikel ini).

hal:

  • server – server yang perlu dikonfigurasi.
  • server instalasi adalah server utama yang menyediakan seluruh proses persiapan melalui jaringan.

Mengapa otomatisasi diperlukan?

Katakanlah ada tugas: menyiapkan server secara besar-besaran dari awal, dengan kecepatan maksimal – 30 per hari. Server dari pabrikan dan model berbeda, sistem operasi berbeda mungkin diinstal di dalamnya, dan mungkin memiliki hypervisor atau tidak.

Operasi apa yang termasuk dalam proses penyiapan (tanpa otomatisasi):

  • sambungkan keyboard, mouse, monitor ke server;
  • konfigurasikan BIOS, RAID, IPMI;
  • perbarui firmware komponen;
  • menyebarkan citra sistem file (atau menginstal hypervisor dan menyalin mesin virtual);

Catatan. Alternatifnya, penerapan OS dapat dilakukan melalui instalasi dengan file respons otomatis. Namun hal ini tidak akan dibahas dalam artikel tersebut. Meskipun Anda akan melihat di bawah bahwa menambahkan fungsi ini tidaklah sulit.

  • konfigurasikan parameter OS (nama host, IP, dll.).

Dengan pendekatan ini, pengaturan yang sama dilakukan secara berurutan di setiap server. Efisiensi pekerjaan tersebut sangat rendah.

Inti dari otomatisasi adalah menghilangkan partisipasi manusia dari proses persiapan server. Sebanyak mungkin.

Otomatisasi mengurangi waktu henti antar operasi dan memungkinkan penyediaan beberapa server secara bersamaan. Kemungkinan kesalahan karena faktor manusia juga sangat berkurang.

Penyediaan Bare-Metal yang dilakukan sendiri, atau Persiapan server otomatis dari awal

Bagaimana server dikonfigurasi secara otomatis?

Mari kita analisis semua tahapan secara detail.

Anda memiliki server Linux yang Anda gunakan sebagai server instalasi PXE. Layanan diinstal dan dikonfigurasi di dalamnya: DHCP, TFTP.

Jadi, kita mem-boot server (yang perlu dikonfigurasi) melalui PXE. Mari kita ingat cara kerjanya:

  • Boot jaringan dipilih di server.
  • Server memuat PXE-ROM kartu jaringan dan menghubungi server instalasi melalui DHCP untuk mendapatkan alamat jaringan.
  • Server instalasi DHCP mengeluarkan alamat, serta instruksi untuk pengunduhan lebih lanjut melalui PXE.
  • Server memuat bootloader jaringan dari server instalasi melalui PXE, pemuatan lebih lanjut terjadi sesuai dengan file konfigurasi PXE.
  • Booting terjadi berdasarkan parameter yang diterima (kernel, initramfs, mount point, image squashfs, dll.).

Catatan. Artikel ini menjelaskan booting melalui PXE melalui mode BIOS. Saat ini, produsen secara aktif menerapkan mode boot UEFI. Untuk PXE, perbedaannya terletak pada konfigurasi server DHCP dan adanya bootloader tambahan.

Mari kita lihat contoh konfigurasi server PXE (menu pxelinux).

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

Kernel dan initramfs pada tahap ini adalah image Linux perantara, yang dengannya persiapan utama dan konfigurasi server akan dilakukan.

Seperti yang Anda lihat, bootloader meneruskan banyak parameter ke kernel. Beberapa parameter ini digunakan oleh kernel itu sendiri. Dan kita dapat menggunakannya untuk tujuan kita sendiri. Ini akan dibahas nanti, tetapi untuk saat ini Anda hanya perlu mengingat bahwa semua parameter yang diteruskan akan tersedia di image Linux perantara melalui /proc/cmdline.

Di mana saya bisa mendapatkannya, kernel dan initramfs?
Sebagai dasar, Anda dapat memilih distribusi Linux apa pun. Apa yang kami perhatikan saat memilih:

  • gambar boot harus bersifat universal (ketersediaan driver, kemampuan untuk menginstal utilitas tambahan);
  • Kemungkinan besar, Anda perlu menyesuaikan initramfs.

Bagaimana hal ini dilakukan dalam solusi kami untuk X5? CentOS 7 dipilih sebagai dasarnya. Mari kita coba trik berikut: siapkan struktur gambar masa depan, masukkan ke dalam arsip dan buat initramfs, yang di dalamnya akan terdapat arsip sistem file kita. Saat memuat gambar, arsip akan diperluas ke partisi tmpfs yang dibuat. Dengan cara ini kita akan mendapatkan image live linux yang minimal namun lengkap dengan semua utilitas yang diperlukan, hanya terdiri dari dua file: vmkernel dan 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

Jadi kami telah menentukan kernel dan initramf yang harus dimuat. Hasilnya, pada tahap ini, dengan memuat image perantara linux melalui PXE, kita akan menerima konsol OS.

Bagus, tapi sekarang kita perlu mentransfer kendali ke β€œotomatisasi” kita.

Itu bisa dilakukan seperti ini.

Mari kita asumsikan bahwa setelah memuat gambar kita berencana untuk mentransfer kontrol ke skrip mount.sh.
Mari sertakan skrip mount.sh di autorun. Untuk melakukan ini, Anda perlu memodifikasi initramfs:

  • unpack initramfs (jika kita menggunakan opsi initramfs di atas, ini tidak diperlukan)
  • sertakan kode di startup yang akan menganalisis parameter yang melewati /proc/cmdline dan mentransfer kontrol lebih lanjut;
  • paket initramfs.

Catatan. Dalam kasus toolkit X5, kontrol pemuatan ditransfer ke skrip /opt/x5/toolkit/bin/hook.sh с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ override.conf Π² getty tty1 (ExecStart=…)

Jadi, gambar dimuat, di mana skrip mount.sh dimulai saat autorun. Selanjutnya, skrip mount.sh menganalisis parameter yang diteruskan (script_cmd=) selama eksekusi dan meluncurkan program/skrip yang diperlukan.

perangkat label-mobil
inti...
tambahkan... nfs_toolkit_script=scripts/mount.sh script_cmd=master-install.sh

perangkat label-tempurung
inti...
tambahkan... nfs_toolkit_script=scripts/mount.sh script_cmd=/bin/bash

Penyediaan Bare-Metal yang dilakukan sendiri, atau Persiapan server otomatis dari awal

Di sini di sebelah kiri adalah menu PXE, di sebelah kanan adalah diagram transfer kendali.

Kami menemukan transfer kendali. Tergantung pada pilihan menu PXE, skrip konfigurasi otomatis atau konsol debugging diluncurkan.

Dalam hal konfigurasi otomatis, direktori yang diperlukan dipasang dari server instalasi, yang berisi:

  • skrip;
  • templat BIOS/UEFI yang disimpan untuk berbagai server;
  • perangkat lunak;
  • utilitas server;
  • log

Selanjutnya, skrip mount.sh mentransfer kontrol ke skrip master-install.sh dari direktori skrip.

Pohon skrip (urutan peluncurannya) terlihat seperti ini:

  • instalasi utama
  • fungsi berbagi (fungsi bersama)
  • info (keluaran informasi)
  • model (mengatur parameter instalasi berdasarkan model server)
  • prep_utils (instalasi utilitas yang diperlukan)
  • fwupdate (pembaruan firmware)
  • diag (diagnostik dasar)
  • biosconf (pengaturan BIOS/UEFI)
  • clockfix (mengatur waktu pada motherboard)
  • srmconf (konfigurasi antarmuka antarmuka jarak jauh)
  • raidconf (mengonfigurasi volume logis)

satu dari:

  • prainstal (mentransfer kontrol ke penginstal OS atau hypervisor, seperti ESXi)
  • merge-install (segera mulai membongkar gambar)

Sekarang kita tahu:

  • cara mem-boot server melalui PXE;
  • cara mentransfer kontrol ke skrip Anda sendiri.


Ayo lanjutkan. Pertanyaan-pertanyaan berikut menjadi relevan:

  • Bagaimana cara mengidentifikasi server yang sedang kami persiapkan?
  • Utilitas apa dan bagaimana cara mengkonfigurasi server?
  • Bagaimana cara mendapatkan pengaturan untuk server tertentu?

Bagaimana cara mengidentifikasi server yang sedang kami persiapkan?

Sederhana saja - DMI:

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

Semua yang Anda butuhkan ada di sini: vendor, model, nomor seri. Jika Anda tidak yakin bahwa informasi ini ada di semua server, Anda dapat mengidentifikasinya berdasarkan alamat MAC-nya. Atau kedua cara tersebut secara bersamaan, jika vendor server berbeda dan pada beberapa model tidak ada informasi tentang nomor serinya.

Berdasarkan informasi yang diterima, folder jaringan dipasang dari server instalasi dan semua yang diperlukan dimuat (utilitas, firmware, dll.).

Utilitas apa dan bagaimana cara mengkonfigurasi server?

Saya akan menyediakan utilitas untuk Linux untuk beberapa produsen. Semua utilitas tersedia di situs resmi vendor.

Penyediaan Bare-Metal yang dilakukan sendiri, atau Persiapan server otomatis dari awal

Dengan firmware, saya rasa semuanya sudah jelas. Mereka biasanya datang dalam bentuk paket file yang dapat dieksekusi. File yang dapat dieksekusi mengontrol proses pembaruan firmware dan melaporkan kode pengembalian.

BIOS dan IPMI biasanya dikonfigurasi melalui template. Jika perlu, template dapat diedit sebelum diunduh.

Utilitas RAID dari beberapa vendor juga dapat dikonfigurasi menggunakan template. Jika tidak demikian, Anda harus menulis skrip konfigurasi.

Prosedur untuk menyiapkan RAID paling sering adalah sebagai berikut:

  • Kami meminta konfigurasi saat ini.
  • Jika sudah ada array logis, kami menghapusnya.
  • Mari kita lihat disk fisik apa yang ada dan berapa jumlahnya.
  • Buat array logis baru. Kami menghentikan proses jika terjadi kesalahan.

Bagaimana cara mendapatkan pengaturan untuk server tertentu?

Misalkan pengaturan semua server akan disimpan di server instalasi. Dalam hal ini, untuk menjawab pertanyaan kita, pertama-tama kita harus memutuskan bagaimana cara mentransfer pengaturan ke server instalasi.

Pada awalnya, Anda dapat bertahan dengan file teks. (Di masa depan, Anda mungkin ingin menggunakan file teks sebagai metode cadangan untuk mentransfer pengaturan.)

Anda dapat β€œberbagi” file teks di server instalasi. Dan tambahkan mountnya ke skrip mount.sh.

Misalnya, garisnya akan terlihat seperti ini:

<nomor seri> <nama host> <subnet>

Baris-baris ini akan ditransfer ke file oleh insinyur dari mesin kerjanya. Dan kemudian, saat menyiapkan server, parameter untuk server tertentu akan dibaca dari file.

Namun, dalam jangka panjang, lebih baik menggunakan database untuk menyimpan pengaturan, status, dan log instalasi server.

Tentu saja, database saja tidak cukup, dan Anda perlu membuat bagian klien yang pengaturannya akan ditransfer ke database. Ini lebih sulit diterapkan dibandingkan dengan file teks, namun kenyataannya, semuanya tidak sesulit kelihatannya. Sangat mungkin untuk menulis versi minimal klien yang hanya akan mentransfer data ke database sendiri. Dan di masa depan dimungkinkan untuk meningkatkan program klien dalam mode bebas (laporan, pencetakan label, pengiriman pemberitahuan, dll. yang terlintas dalam pikiran).

Dengan membuat permintaan khusus ke database dan menentukan nomor seri server, kami akan menerima parameter yang diperlukan untuk mengkonfigurasi server.

Selain itu, kita tidak perlu membuat kunci untuk akses simultan, seperti halnya file teks.

Kita dapat menulis log konfigurasi ke database di semua tahapan dan mengontrol proses instalasi melalui event dan flag pada tahap persiapan.

Sekarang kita tahu caranya:

  • boot server melalui PXE;
  • mentransfer kendali ke skrip kami;
  • mengidentifikasi server yang perlu disiapkan berdasarkan nomor serinya;
  • konfigurasikan server menggunakan utilitas yang sesuai;
  • mentransfer pengaturan ke database server instalasi menggunakan bagian klien.

Kami menemukan caranya:

  • server yang diinstal menerima pengaturan yang diperlukan dari database;
  • semua kemajuan persiapan dicatat dalam database (log, acara, bendera panggung).

Bagaimana dengan berbagai jenis perangkat lunak yang Anda instal? Bagaimana cara menginstal hypervisor, menyalin VM dan mengkonfigurasi semuanya?

Dalam hal menyebarkan image sistem file (linux) ke perangkat keras, semuanya cukup sederhana:

  • Setelah menyiapkan semua komponen server, kami menyebarkan gambar.
  • Instal bootloader grub.
  • Kami melakukan chroot dan mengkonfigurasi semua yang diperlukan.

Cara mentransfer kontrol ke penginstal OS (menggunakan ESXi sebagai contoh).

  • Kami mengatur transfer kontrol dari skrip kami ke penginstal hypervisor menggunakan file respons otomatis (kickstart):
  • Kami menghapus partisi saat ini pada disk.
  • Buat partisi dengan ukuran 500MB.
  • Kami menandainya sebagai dapat di-boot.
  • Format ke FAT32.
  • Kami menyalin file instalasi ESXi ke root.
  • Menginstal syslinux.
  • Salin syslinux.cfg ke /syslinux/

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

  • Salin mboot.c32 ke /syslinux.
  • Boot.cfg harus memiliki kernelopt=ks=ftp:// /ks_esxi.cfg
  • Nyalakan ulang servernya.

Setelah server di-boot ulang, penginstal ESXi akan diunduh dari hard drive server. Semua file penginstal yang diperlukan akan dimuat ke dalam memori dan kemudian instalasi ESXi akan dimulai, sesuai dengan file respons otomatis yang ditentukan.

Berikut beberapa baris dari file autoresponse 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

Pada tahap ini, hypervisor diinstal dan dikonfigurasi, dan mesin virtual disalin.

Bagaimana cara mengkonfigurasi mesin virtual sekarang?

Kami sedikit curang: selama instalasi kami mengatur parameter guestinfo.esxihost.id = "$SYSSN" di file VM1.vmx dan menunjukkan nomor seri server fisik di dalamnya.

Sekarang, setelah memulai, mesin virtual (dengan paket vmware-tools terinstal) dapat mengakses parameter ini:

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

Artinya, VM akan dapat mengidentifikasi dirinya sendiri (mengetahui nomor seri host fisik), membuat permintaan ke database server instalasi dan menerima parameter yang perlu dikonfigurasi. Ini semua dikompilasi menjadi sebuah skrip, yang akan diluncurkan secara otomatis ketika guestos vm dimulai (tetapi sekali: RunOnce).

Sekarang kita tahu caranya:

  • boot server melalui PXE;
  • mentransfer kendali ke skrip kami;
  • mengidentifikasi server yang perlu disiapkan berdasarkan nomor serinya;
  • konfigurasikan server menggunakan utilitas yang sesuai;
  • mentransfer pengaturan ke database server instalasi menggunakan bagian klien;
  • mengonfigurasi berbagai jenis perangkat lunak, termasuk menerapkan hypervisor esxi dan mengonfigurasi mesin virtual (semuanya secara otomatis).

Kami menemukan caranya:

  • server yang diinstal menerima pengaturan yang diperlukan dari database;
  • semua kemajuan persiapan dicatat dalam database (log, acara, bendera panggung).


Intinya:

Saya yakin keunikan solusi ini terletak pada fleksibilitas, kesederhanaan, kemampuan, dan keserbagunaannya.

Silakan tulis di komentar apa pendapat Anda.

Sumber: www.habr.com

Tambah komentar