Нүцгэн металлаар хангах, эсвэл эхнээс нь серверүүдийг автоматаар бэлтгэх

Сайн байна уу, намайг Денис гэдэг бөгөөд миний үйл ажиллагааны нэг чиглэл бол X5 дахь дэд бүтцийн шийдлүүдийг боловсруулах явдал юм. Өнөөдөр би та бүхэнтэй олон нийтэд нээлттэй хэрэгслүүд дээр суурилсан автомат сервер бэлтгэх системийг хэрхэн ашиглах талаар хуваалцахыг хүсч байна. Миний бодлоор энэ бол сонирхолтой, энгийн, уян хатан шийдэл юм.

Нүцгэн металлаар хангах, эсвэл эхнээс нь серверүүдийг автоматаар бэлтгэх

Бэлтгэл гэдэг нь бид шинэ серверийг OS-тэй бүрэн тохируулагдсан сервер болгон хувиргах гэсэн үг юм. Линукс эсвэл ESXi гипервизортой (Windows серверүүдийг байрлуулах талаар энэ нийтлэлд авч үзэхгүй).

Нэр томъёо:

  • серверүүд - тохируулах шаардлагатай серверүүд.
  • Суулгах сервер нь сүлжээгээр дамжуулан бүхэл бүтэн бэлтгэл ажлыг хангадаг үндсэн сервер юм.

Яагаад автоматжуулалт хэрэгтэй байна вэ?

Даалгавар байна гэж бодъё: серверүүдийг эхнээс нь их хэмжээгээр бэлтгэх, оргил үедээ - өдөрт 30. Өөр өөр үйлдвэрлэгч, загваруудын серверүүд, өөр өөр үйлдлийн системүүд дээр суулгасан байж болох ба гипервизортой эсвэл байхгүй байж болно.

Тохируулах процесст ямар үйлдлүүд багтдаг вэ (автоматжуулалтгүйгээр):

  • гар, хулгана, дэлгэцийг серверт холбох;
  • BIOS, RAID, IPMI-г тохируулах;
  • бүрэлдэхүүн хэсгийн програм хангамжийг шинэчлэх;
  • файлын системийн дүрсийг байрлуулах (эсвэл гипервизор суулгаж, виртуал машинуудыг хуулах);

Анхаарна уу. Эсвэл автомат хариу файл бүхий суулгацаар дамжуулан үйлдлийн системийг байршуулах боломжтой. Гэхдээ энэ нийтлэлд энэ талаар ярихгүй. Хэдийгээр та энэ функцийг нэмэх нь тийм ч хэцүү биш гэдгийг доороос харах болно.

  • үйлдлийн системийн параметрүүдийг тохируулах (хостын нэр, IP гэх мэт).

Энэ аргын тусламжтайгаар ижил тохиргоог сервер бүр дээр дараалан гүйцэтгэдэг. Ийм ажлын үр ашиг маш бага байдаг.

Автоматжуулалтын мөн чанар нь сервер бэлтгэх үйл явцаас хүний ​​оролцоог арилгах явдал юм. Аль болох их.

Автоматжуулалт нь үйл ажиллагааны хоорондох зогсолтыг багасгаж, олон серверийг нэгэн зэрэг хангах боломжтой болгодог. Хүний хүчин зүйлээс шалтгаалсан алдаа гарах магадлал ч эрс багасдаг.

Нүцгэн металлаар хангах, эсвэл эхнээс нь серверүүдийг автоматаар бэлтгэх

Серверүүд хэрхэн автоматаар тохируулагддаг вэ?

Бүх үе шатуудыг нарийвчлан авч үзье.

Танд PXE суулгацын сервер болгон ашигладаг Линукс сервер байна. Үүн дээр үйлчилгээг суулгаж, тохируулсан: DHCP, TFTP.

Тиймээс, бид PXE-ээр дамжуулан серверийг (тохируулга хийх шаардлагатай) ачаална. Энэ нь хэрхэн ажилладагийг санацгаая:

  • Сүлжээний ачааллыг сервер дээр сонгосон.
  • Сервер нь сүлжээний картын PXE-ROM-г ачаалж, сүлжээний хаягийг авахын тулд DHCP-ээр дамжуулан суулгах сервертэй холбогддог.
  • DHCP суулгацын сервер нь хаяг, мөн PXE-ээр дамжуулан цаашид татаж авах зааварчилгааг гаргадаг.
  • Сервер нь сүлжээний ачаалагчийг суулгах серверээс PXE-ээр дамжуулан ачаалдаг бөгөөд PXE тохиргооны файлын дагуу цааш ачаалагдана.
  • Ачаалах нь хүлээн авсан параметрүүд (цөм, initramfs, холбох цэг, squashfs дүрс гэх мэт) дээр суурилдаг.

Анхаарна уу. Энэ нийтлэлд BIOS горимоор PXE-ээр ачаалах талаар тайлбарласан болно. Одоогоор үйлдвэрлэгчид UEFI ачаалах горимыг идэвхтэй хэрэгжүүлж байна. PXE-ийн хувьд ялгаа нь DHCP серверийн тохиргоо болон нэмэлт ачаалагч байгаа эсэхээс хамаарна.

PXE серверийн тохиргооны жишээг (pxelinux цэс) харцгаая.

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 // переход на следующее меню

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

Энэ үе шатанд байгаа цөм болон initramfs нь Linux-ийн завсрын дүрс бөгөөд түүний тусламжтайгаар серверийн үндсэн бэлтгэл, тохиргоог хийх болно.

Таны харж байгаагаар ачаалагч нь олон параметрүүдийг цөм рүү дамжуулдаг. Эдгээр параметрүүдийн заримыг цөм өөрөө ашигладаг. Мөн бид заримыг нь өөрсдийн зорилгоор ашиглаж болно. Үүнийг дараа хэлэлцэх болно, гэхдээ одоо та бүх дамжуулсан параметрүүдийг Linux-ийн завсрын зураг дээр /proc/cmdline-аар дамжуулан авах боломжтой гэдгийг санаж байна.

Би тэдгээрийг хаанаас авах вэ, цөм болон initramfs?
Үүний үндэс болгон та ямар ч Linux түгээлтийг сонгож болно. Сонгохдоо бид юуг анхаардаг вэ:

  • ачаалах дүрс нь бүх нийтийнх байх ёстой (драйверуудын бэлэн байдал, нэмэлт хэрэгслийг суулгах чадвар);
  • Магадгүй та initramfs-ийг тохируулах хэрэгтэй болно.

Үүнийг манай X5 шийдэлд хэрхэн хийдэг вэ? CentOS 7-г үндэс болгон сонгосон. Дараах заль мэхийг туршиж үзье: ирээдүйн зургийн бүтцийг бэлтгэж, архивт багцлаад initramfs үүсгэн дотор нь манай файлын системийн архив байх болно. Зургийг ачаалах үед архивыг үүсгэсэн tmpfs хуваалт болгон өргөжүүлэх болно. Ингэснээр бид vmkernel болон 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

Тиймээс бид ачаалах ёстой цөм болон initramf-уудыг тодорхойлсон. Үүний үр дүнд, энэ үе шатанд завсрын Linux дүрсийг PXE-ээр ачаалснаар бид үйлдлийн системийн консолыг хүлээн авах болно.

Гайхалтай, гэхдээ одоо бид хяналтыг "автоматжуулалт" руу шилжүүлэх хэрэгтэй.

Үүнийг ингэж хийж болно.

Зургийг ачаалсны дараа бид хяналтыг mount.sh скрипт рүү шилжүүлэхээр төлөвлөж байна гэж бодъё.
mount.sh скриптийг autorun-д оруулъя. Үүнийг хийхийн тулд та initramfs-г өөрчлөх хэрэгтэй:

  • initramfs-ийг задлах (хэрэв бид дээрх initramfs сонголтыг ашигладаг бол энэ шаардлагагүй)
  • /proc/cmdline-аар дамжсан параметрүүдийг задлан шинжилж, цаашдын хяналтыг шилжүүлэх кодыг эхлүүлэхэд оруулах;
  • initramfs багц.

Анхаарна уу. X5 хэрэгслийн хувьд ачаалах хяналтыг скрипт рүү шилжүүлдэг /opt/x5/toolkit/bin/hook.sh с помощью override.conf в getty tty1 (ExecStart=…)

Тиймээс, mount.sh скрипт нь autorun дээр эхэлдэг зураг ачаалагдсан байна. Дараа нь mount.sh скрипт нь гүйцэтгэлийн явцад дамжуулсан параметрүүдийг (script_cmd=) шинжилж, шаардлагатай програм/скриптийг ажиллуулна.

шошго хэрэгсэл -автомашин
цөм...
append...nfs_toolkit_script=scripts/mount.sh script_cmd=master-install.sh

шошго хэрэгсэл -бүрхүүл
цөм...
append...nfs_toolkit_script=scripts/mount.sh script_cmd=/bin/bash

Нүцгэн металлаар хангах, эсвэл эхнээс нь серверүүдийг автоматаар бэлтгэх

Энд зүүн талд PXE цэс, баруун талд хяналтын дамжуулалтын диаграмм байна.

Бид хяналтыг шилжүүлэх асуудлыг шийдсэн. PXE цэсийн сонголтоос хамааран автомат тохиргооны скрипт эсвэл дибаг хийх консолыг ажиллуулна.

Автомат тохируулгын хувьд шаардлагатай сангуудыг суулгах серверээс суулгасан бөгөөд үүнд дараахь зүйлс орно.

  • скриптүүд;
  • янз бүрийн серверүүдэд хадгалсан BIOS/UEFI загварууд;
  • програм хангамж;
  • серверийн хэрэгслүүд;
  • бүртгэлүүд

Дараа нь mount.sh скрипт нь удирдлагыг скриптийн лавлахаас master-install.sh скрипт рүү шилжүүлдэг.

Скриптийн мод (тэдгээрийг ажиллуулах дараалал) иймэрхүү харагдаж байна:

  • мастер-суулгах
  • хуваалцах функцууд (хуваалцсан функцууд)
  • мэдээлэл (мэдээллийн гаралт)
  • загварууд (серверийн загвар дээр үндэслэн суулгах параметрүүдийг тохируулах)
  • Preparat_utils (шаардлагатай хэрэгслүүдийг суулгах)
  • fwupdate (програм хангамжийн шинэчлэл)
  • оношлогоо (анхан шатны оношлогоо)
  • biosconf (BIOS/UEFI тохиргоо)
  • цаг засах (эх хавтан дээрх цагийг тохируулах)
  • srmconf (алсын интерфэйсийн тохиргоо)
  • raidconf (логик эзлэхүүнийг тохируулах)

нэг нь:

  • урьдчилан суулгах (хяналтыг үйлдлийн систем эсвэл ESXi гэх мэт гипервизор суулгагч руу шилжүүлэх)
  • нэгтгэх-суулгах (зургийг задлах ажлыг шууд эхлүүлэх)

Одоо бид мэднэ:

  • PXE-ээр серверийг хэрхэн ачаалах;
  • хяналтыг өөрийн скрипт рүү хэрхэн шилжүүлэх.


Үргэлжлүүлье. Дараах асуултууд хамааралтай болсон.

  • Бидний бэлтгэж буй серверийг хэрхэн тодорхойлох вэ?
  • Ямар хэрэгслүүд, серверийг хэрхэн тохируулах вэ?
  • Тодорхой серверийн тохиргоог хэрхэн авах вэ?

Бидний бэлтгэж буй серверийг хэрхэн тодорхойлох вэ?

Энэ нь энгийн - DMI:

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

Танд хэрэгтэй бүх зүйл энд байна: борлуулагч, загвар, серийн дугаар. Хэрэв та энэ мэдээлэл бүх серверт байгаа гэдэгт итгэлгүй байгаа бол тэдгээрийг MAC хаягаар нь тодорхойлж болно. Эсвэл хоёр аргаар нэгэн зэрэг, хэрэв сервер борлуулагчид өөр бөгөөд зарим загварт серийн дугаарын талаар ямар ч мэдээлэл байдаггүй.

Хүлээн авсан мэдээлэлд үндэслэн сүлжээний фолдеруудыг суулгацын серверээс холбож, шаардлагатай бүх зүйлийг (хэрэгсэл, програм хангамж гэх мэт) ачаална.

Ямар хэрэгслүүд, серверийг хэрхэн тохируулах вэ?

Би зарим үйлдвэрлэгчдэд Linux-д зориулсан хэрэгслүүдээр хангах болно. Бүх хэрэгслийг борлуулагчдын албан ёсны вэбсайтаас авах боломжтой.

Нүцгэн металлаар хангах, эсвэл эхнээс нь серверүүдийг автоматаар бэлтгэх

Програм хангамжийн хувьд бүх зүйл тодорхой болсон гэж би бодож байна. Тэдгээр нь ихэвчлэн багцалсан гүйцэтгэх файл хэлбэрээр ирдэг. Гүйцэтгэх файл нь програм хангамжийг шинэчлэх процессыг удирдаж, буцах кодыг мэдээлдэг.

BIOS болон IPMI нь ихэвчлэн загвараар тохируулагддаг. Шаардлагатай бол загварыг татаж авахаас өмнө засварлаж болно.

Зарим үйлдвэрлэгчдийн RAID хэрэгслүүдийг загвар ашиглан тохируулж болно. Хэрэв тийм биш бол та тохиргооны скрипт бичих хэрэгтэй болно.

RAID-г тохируулах журам нь ихэвчлэн дараах байдалтай байна.

  • Бид одоогийн тохиргоог хүсч байна.
  • Хэрэв аль хэдийн логик массив байгаа бол бид тэдгээрийг арилгана.
  • Ямар физик дискүүд байгаа, хэд нь байгааг харцгаая.
  • Шинэ логик массив үүсгэх. Алдаа гарсан тохиолдолд бид үйл явцыг тасалдуулж байна.

Тодорхой серверийн тохиргоог хэрхэн авах вэ?

Бүх серверийн тохиргоог суулгах сервер дээр хадгална гэж бодъё. Энэ тохиолдолд бидний асуултанд хариулахын тулд эхлээд тохиргоог суулгах сервер рүү хэрхэн шилжүүлэхээ шийдэх хэрэгтэй.

Эхлээд та текст файлуудыг ашиглаж болно. (Ирээдүйд та текст файлыг тохиргоог шилжүүлэх нөөц арга болгон ашиглаж болно.)

Та текст файлыг суулгах сервер дээр "хуваалцах" боломжтой. Мөн түүний холболтыг mount.sh скрипт дээр нэмнэ үү.

Жишээлбэл, мөрүүд дараах байдлаар харагдах болно.

<серийн дугаар> <хостын нэр> <дэд сүлжээ>

Эдгээр мөрүүдийг инженер ажлын машинаасаа файл руу шилжүүлнэ. Дараа нь серверийг тохируулахдаа тухайн серверийн параметрүүдийг файлаас унших болно.

Гэхдээ урт хугацаанд серверийн суулгацын тохиргоо, төлөв, бүртгэлийг хадгалах мэдээллийн санг ашиглах нь дээр.

Мэдээжийн хэрэг, дан ганц мэдээллийн сан хангалтгүй бөгөөд та мэдээллийн санд тохиргоог шилжүүлэх тусламжтайгаар үйлчлүүлэгчийн хэсгийг үүсгэх шаардлагатай болно. Текст файлтай харьцуулахад үүнийг хэрэгжүүлэхэд илүү төвөгтэй боловч үнэн хэрэгтээ бүх зүйл санагдсан шиг тийм ч хэцүү биш юм. Мэдээллийн сан руу өөрөө өгөгдөл дамжуулах үйлчлүүлэгчийн хамгийн бага хувилбарыг бичих бүрэн боломжтой. Мөн ирээдүйд үйлчлүүлэгчийн програмыг үнэгүй горимд (тайлангууд, шошго хэвлэх, мэдэгдэл илгээх гэх мэт санаанд орж ирдэг) сайжруулах боломжтой болно.

Өгөгдлийн санд тодорхой хүсэлт гаргаж, серверийн серийн дугаарыг зааж өгснөөр бид серверийг тохируулахад шаардлагатай параметрүүдийг хүлээн авах болно.

Нэмж дурдахад, бид текст файлтай адил нэгэн зэрэг хандахын тулд түгжээ хийх шаардлагагүй болно.

Бид тохиргооны бүртгэлийг бүх үе шатанд мэдээллийн санд бичиж, бэлтгэл үе шатуудын үйл явдал, тугуудыг ашиглан суулгах процессыг хянах боломжтой.

Одоо бид яаж гэдгийг мэдэж байна:

  • серверийг PXE-ээр ачаалах;
  • хяналтыг манай скрипт рүү шилжүүлэх;
  • бэлтгэх шаардлагатай серверийг серийн дугаараар нь тодорхойлох;
  • тохирох хэрэгслүүдийг ашиглан серверийг тохируулах;
  • клиент хэсгийг ашиглан тохиргоог суулгах серверийн мэдээллийн сан руу шилжүүлэх.

Бид хэрхэн яаж олж мэдсэн:

  • суулгасан сервер нь мэдээллийн сангаас шаардлагатай тохиргоог хүлээн авдаг;
  • Бэлтгэлийн бүх явцыг мэдээллийн санд (лог, үйл явдал, тайзны туг) бүртгэдэг.

Таны суулгасан янз бүрийн төрлийн програм хангамжийн талаар юу хэлэх вэ? Хэрхэн гипервизор суулгаж, VM-г хуулж, бүгдийг нь тохируулах вэ?

Файлын системийн дүрсийг (linux) техник хангамжид байрлуулах тохиолдолд бүх зүйл маш энгийн:

  • Серверийн бүх бүрэлдэхүүн хэсгүүдийг тохируулсны дараа бид зургийг байрлуулна.
  • Grub ачаалагчийг суулгана уу.
  • Бид шаардлагатай бүх зүйлийг chroot хийж, тохируулдаг.

Хяналтыг үйлдлийн систем суулгагч руу хэрхэн шилжүүлэх вэ (жишээ нь ESXi ашиглан).

  • Бид автомат хариултын файлыг (kickstart) ашиглан скриптээсээ гипервизор суулгагч руу хяналтыг шилжүүлэх ажлыг зохион байгуулдаг.
  • Бид диск дээрх одоогийн хуваалтыг устгадаг.
  • 500MB хэмжээтэй хуваалт үүсгэ.
  • Бид үүнийг ачаалах боломжтой гэж тэмдэглэнэ.
  • FAT32 болгон форматлах.
  • Бид ESXi суулгацын файлуудыг үндэс рүү хуулдаг.
  • Syslinux суулгаж байна.
  • syslinux.cfg-г /syslinux/ руу хуулна уу.

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

  • mboot.c32-г /syslinux руу хуулна уу.
  • Boot.cfg нь kernelopt=ks=ftp:// байх ёстой. /ks_esxi.cfg
  • Серверийг дахин ачаална уу.

Сервер дахин ачаалсны дараа ESXi суулгагчийг серверийн хатуу дискнээс татаж авна. Шаардлагатай бүх суулгагч файлууд санах ойд ачаалагдах бөгөөд дараа нь заасан автомат хариу файлын дагуу ESXi суулгац эхэлнэ.

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

Энэ үе шатанд гипервизорыг суулгаж, тохируулж, виртуал машинуудыг хуулж авдаг.

Одоо виртуал машинуудыг хэрхэн тохируулах вэ?

Бид бага зэрэг хуурсан: суулгах явцад бид VM1.vmx файлд guestinfo.esxihost.id = "$SYSSN" параметрийг тохируулж, дотор нь физик серверийн серийн дугаарыг зааж өгсөн.

Одоо эхлүүлсний дараа виртуал машин (vmware-tools багц суулгасан) энэ параметрт хандах боломжтой.

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

Өөрөөр хэлбэл, VM нь өөрийгөө таних (энэ нь физик хостын серийн дугаарыг мэддэг), суулгах серверийн мэдээллийн санд хүсэлт гаргаж, тохируулах шаардлагатай параметрүүдийг хүлээн авах боломжтой болно. Энэ бүгдийг скрипт болгон эмхэтгэсэн бөгөөд энэ нь guestos vm эхлэхэд автоматаар эхлэх ёстой (гэхдээ нэг удаа: RunOnce).

Одоо бид яаж гэдгийг мэдэж байна:

  • серверийг PXE-ээр ачаалах;
  • хяналтыг манай скрипт рүү шилжүүлэх;
  • бэлтгэх шаардлагатай серверийг серийн дугаараар нь тодорхойлох;
  • тохирох хэрэгслүүдийг ашиглан серверийг тохируулах;
  • клиент хэсгийг ашиглан тохиргоог суулгах серверийн мэдээллийн сан руу шилжүүлэх;
  • esxi гипервизорыг байрлуулах, виртуал машиныг тохируулах (бүгд автоматаар) зэрэг янз бүрийн төрлийн програм хангамжийг тохируулах.

Бид хэрхэн яаж олж мэдсэн:

  • суулгасан сервер нь мэдээллийн сангаас шаардлагатай тохиргоог хүлээн авдаг;
  • Бэлтгэлийн бүх явцыг мэдээллийн санд (лог, үйл явдал, тайзны туг) бүртгэдэг.


Доод шугам:

Энэхүү шийдлийн өвөрмөц байдал нь уян хатан байдал, энгийн байдал, чадвар, олон талт байдалд оршдог гэдэгт би итгэдэг.

Та юу гэж бодож байгаагаа сэтгэгдэл дээр бичээрэй.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх