Ինքներդ արեք Bare-Metal Provisioning, կամ սերվերների ավտոմատ պատրաստում զրոյից

Բարև ձեզ, ես Դենիսն եմ և իմ գործունեության ոլորտներից մեկը X5-ում ենթակառուցվածքային լուծումների մշակումն է: Այսօր ես կցանկանայի ձեզ հետ կիսվել, թե ինչպես կարող եք տեղադրել սերվերի պատրաստման ավտոմատ համակարգ՝ հիմնված հանրությանը հասանելի գործիքների վրա: Իմ կարծիքով, սա հետաքրքիր, պարզ և ճկուն լուծում է։

Ինքներդ արեք Bare-Metal Provisioning, կամ սերվերների ավտոմատ պատրաստում զրոյից

Նախապատրաստում ասելով նկատի ունենք՝ նոր սերվերը տուփից վերածել OS-ով լիովին կազմաձևված սերվերի: Linux կամ ESXi հիպերվիզորով (Windows սերվերների տեղակայումը այս հոդվածում չի քննարկվում):

Պայմաններ:

  • սերվերներ – սերվերներ, որոնք պետք է կազմաձևվեն:
  • տեղադրման սերվերը հիմնական սերվերն է, որն ապահովում է պատրաստման ողջ գործընթացը ցանցի միջոցով:

Ինչու՞ է անհրաժեշտ ավտոմատացում:

Ենթադրենք, կա խնդիր՝ զանգվածաբար պատրաստել սերվերներ զրոյից, առավելագույնը՝ օրական 30: Նրանց վրա կարող են տեղադրվել տարբեր արտադրողների և մոդելների սերվերներ, տարբեր օպերացիոն համակարգեր և կարող են ունենալ կամ չունենալ հիպերվիզոր:

Ինչ գործողություններ են ներառված տեղադրման գործընթացում (առանց ավտոմատացման).

  • միացնել ստեղնաշարը, մկնիկը, մոնիտորը սերվերին;
  • կարգավորել BIOS, RAID, IPMI;
  • թարմացնել բաղադրիչի որոնվածը;
  • տեղակայել ֆայլային համակարգի պատկեր (կամ տեղադրել հիպերվիզոր և պատճենել վիրտուալ մեքենաներ);

Նշում. Որպես այլընտրանք, ՕՀ-ի տեղակայումը հնարավոր է ավտոմատ արձագանքման ֆայլի միջոցով տեղադրման միջոցով: Բայց դա հոդվածում չի քննարկվի: Թեև ստորև կտեսնեք, որ այս ֆունկցիոնալությունը ավելացնելը դժվար չէ:

  • կարգավորել OS-ի պարամետրերը (հյուրընկալողի անունը, IP և այլն):

Այս մոտեցմամբ նույն կարգավորումները հաջորդաբար կատարվում են յուրաքանչյուր սերվերի վրա: Նման աշխատանքի արդյունավետությունը շատ ցածր է։

Ավտոմատացման էությունը սերվերի պատրաստման գործընթացից մարդու մասնակցության վերացումն է: Ինչքան հնարավոր է շատ.

Ավտոմատացումը նվազեցնում է գործառնությունների միջև ընկած ժամանակը և հնարավորություն է տալիս միաժամանակ տրամադրել բազմաթիվ սերվերներ: Մարդկային գործոններով պայմանավորված սխալների հավանականությունը նույնպես մեծապես նվազում է։

Ինքներդ արեք Bare-Metal Provisioning, կամ սերվերների ավտոմատ պատրաստում զրոյից

Ինչպե՞ս են ավտոմատ կերպով կազմաձևվում սերվերները:

Եկեք մանրամասն վերլուծենք բոլոր փուլերը։

Դուք ունեք Linux սերվեր, որն օգտագործում եք որպես PXE տեղադրման սերվեր: Ծառայությունները տեղադրվում և կազմաձևվում են դրա վրա՝ DHCP, TFTP:

Այսպիսով, մենք բեռնում ենք սերվերը (որը պետք է կազմաձևվի) PXE-ի միջոցով: Եկեք հիշենք, թե ինչպես է այն աշխատում.

  • Ցանցի բեռնումը ընտրված է սերվերում:
  • Սերվերը բեռնում է ցանցային քարտի PXE-ROM-ը և DHCP-ի միջոցով կապվում է տեղադրման սերվերի հետ՝ ցանցի հասցե ստանալու համար:
  • DHCP տեղադրման սերվերը թողարկում է հասցե, ինչպես նաև PXE-ի միջոցով հետագա ներբեռնման հրահանգներ:
  • Սերվերը բեռնում է ցանցի բեռնիչը տեղադրման սերվերից PXE-ի միջոցով, հետագա բեռնումը տեղի է ունենում PXE կազմաձևման ֆայլի համաձայն:
  • Բեռնումը տեղի է ունենում ստացված պարամետրերի հիման վրա (միջուկ, initramfs, մոնտաժային կետեր, squashfs պատկեր և այլն):

Նշում. Հոդվածում նկարագրվում է BIOS ռեժիմի միջոցով PXE-ի միջոցով բեռնումը: Ներկայումս արտադրողները ակտիվորեն իրականացնում են UEFI bootmode-ը: 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 պատկեր են, որոնց օգնությամբ տեղի կունենա սերվերի հիմնական պատրաստումը և կոնֆիգուրացիան։

Ինչպես տեսնում եք, bootloader-ը բազմաթիվ պարամետրեր է փոխանցում միջուկին: Այս պարամետրերից մի քանիսն օգտագործվում են հենց միջուկի կողմից: Եվ մենք կարող ենք օգտագործել որոշները մեր նպատակների համար: Սա կքննարկվի ավելի ուշ, բայց առայժմ կարող եք պարզապես հիշել, որ բոլոր փոխանցված պարամետրերը հասանելի կլինեն միջանկյալ Linux պատկերում /proc/cmdline-ի միջոցով:

Որտեղի՞ց կարող եմ դրանք ստանալ, միջուկը և initramfs-ը:
Որպես հիմք, դուք կարող եք ընտրել ցանկացած Linux բաշխում: Ինչին մենք ուշադրություն ենք դարձնում ընտրելիս.

  • բեռնման պատկերը պետք է լինի ունիվերսալ (վարորդների առկայություն, լրացուցիչ կոմունալ ծառայություններ տեղադրելու հնարավորություն);
  • Ամենայն հավանականությամբ, ձեզ հարկավոր կլինի հարմարեցնել initramfs-ը:

Ինչպե՞ս է դա արվում X5-ի մեր լուծույթում: Որպես հիմք ընտրվել է CentOS 7-ը, փորձենք հետևյալ հնարքը՝ պատրաստել ապագա պատկերի կառուցվածքը, փաթեթավորել այն արխիվի մեջ և ստեղծել initramfs, որի ներսում կլինի մեր ֆայլային համակարգի արխիվը։ Պատկերը բեռնելիս արխիվը կընդլայնվի ստեղծված tmpfs բաժանման մեջ: Այս կերպ մենք կստանանք մինիմալ, բայց լիարժեք կենդանի linux պատկեր՝ բոլոր անհրաժեշտ կոմունալ ծառայություններով, որը բաղկացած է ընդամենը երկու ֆայլից՝ 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-ները, որոնք պետք է բեռնվեն: Արդյունքում այս փուլում PXE-ի միջոցով բեռնելով միջանկյալ linux պատկերը, մենք կստանանք OS կոնսոլը։

Հիանալի է, բայց հիմա մենք պետք է հսկողությունը փոխանցենք մեր «ավտոմատացմանը»:

Դա կարելի է անել այսպես.

Ենթադրենք, որ պատկերը բեռնելուց հետո մենք նախատեսում ենք կառավարումը փոխանցել 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=) և գործարկում անհրաժեշտ ծրագիրը/սկրիպտը։

պիտակի գործիքակազմ -ավտոմոբիլ
միջուկ...
հավելված...nfs_toolkit_script=scripts/mount.sh script_cmd=master-install.sh

պիտակի գործիքակազմ -կլպել
միջուկ...
հավելված...nfs_toolkit_script=scripts/mount.sh script_cmd=/bin/bash

Ինքներդ արեք Bare-Metal Provisioning, կամ սերվերների ավտոմատ պատրաստում զրոյից

Այստեղ ձախ կողմում PXE ընտրացանկն է, աջ կողմում՝ կառավարման փոխանցման դիագրամը:

Մենք պարզեցինք վերահսկողության փոխանցումը: Կախված PXE մենյուի ընտրությունից, գործարկվում է կամ ավտոմատ կազմաձևման սցենարը կամ վրիպազերծման վահանակը:

Ավտոմատ կազմաձևման դեպքում տեղադրման սերվերից տեղադրվում են անհրաժեշտ գրացուցակները, որոնք պարունակում են.

  • սցենարներ;
  • պահպանված BIOS/UEFI ձևանմուշներ տարբեր սերվերների համար;
  • որոնվածը;
  • սերվերի կոմունալ ծառայություններ;
  • գերաններ

Հաջորդը, mount.sh սկրիպտը կառավարումը փոխանցում է master-install.sh սկրիպտին script գրացուցակից:

Սցենարի ծառը (դրանց գործարկման հերթականությունը) մոտավորապես այսպիսի տեսք ունի.

  • վարպետ-տեղադրել
  • համօգտագործվող գործառույթներ (համօգտագործվող գործառույթներ)
  • տեղեկատվություն (տեղեկատվության ելք)
  • մոդելներ (տեղադրման պարամետրերի կարգավորում՝ հիմնված սերվերի մոդելի վրա)
  • preparate_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-ի համար: Բոլոր կոմունալ ծառայությունները հասանելի են վաճառողների պաշտոնական կայքերում:

Ինքներդ արեք Bare-Metal Provisioning, կամ սերվերների ավտոմատ պատրաստում զրոյից

Որոնվածի հետ, կարծում եմ, ամեն ինչ պարզ է: Նրանք սովորաբար գալիս են փաթեթավորված գործարկվող ֆայլերի տեսքով: Գործարկվող ֆայլը վերահսկում է որոնվածի թարմացման գործընթացը և հաղորդում վերադարձի կոդը:

BIOS-ը և IPMI-ն սովորաբար կազմաձևվում են կաղապարների միջոցով: Անհրաժեշտության դեպքում ձևանմուշը կարող է խմբագրվել նախքան ներբեռնելը:

Որոշ վաճառողների RAID կոմունալ ծառայությունները կարող են կազմաձևվել նաև կաղապարի միջոցով: Եթե ​​դա այդպես չէ, ապա դուք պետք է գրեք կազմաձևման սցենար:

RAID-ի տեղադրման կարգը ամենից հաճախ հետևյալն է.

  • Մենք խնդրում ենք ընթացիկ կոնֆիգուրացիան:
  • Եթե ​​արդեն կան տրամաբանական զանգվածներ, մենք ջնջում ենք դրանք։
  • Եկեք նայենք, թե ինչ ֆիզիկական սկավառակներ կան և քանիսն են:
  • Ստեղծեք նոր տրամաբանական զանգված: Մենք ընդհատում ենք գործընթացը սխալի դեպքում։

Ինչպե՞ս ստանալ կարգավորումներ կոնկրետ սերվերի համար:

Ենթադրենք, որ բոլոր սերվերների կարգավորումները կպահվեն տեղադրման սերվերում։ Այս դեպքում մեր հարցին պատասխանելու համար նախ պետք է որոշենք, թե ինչպես փոխանցել կարգավորումները տեղադրման սերվերին:

Սկզբում դուք կարող եք հաղթահարել տեքստային ֆայլերը: (Ապագայում դուք կարող եք օգտագործել տեքստային ֆայլը որպես կարգավորումների փոխանցման հետադարձ մեթոդ):

Դուք կարող եք «կիսվել» տեքստային ֆայլով տեղադրման սերվերում: Եվ դրա տեղադրումն ավելացրեք mount.sh սկրիպտին:

Տողերը, օրինակ, այսպիսի տեսք կունենան.

<սերիական համար> <հյուրընկալողի անունը> <ենթացանց>

Այս տողերը ինժեները կփոխանցի ֆայլին իր աշխատանքային մեքենայից: Եվ հետո, երբ ստեղծեք սերվեր, ֆայլից կկարդան որոշակի սերվերի պարամետրերը:

Սակայն երկարաժամկետ հեռանկարում ավելի լավ է օգտագործել տվյալների բազան՝ սերվերի տեղադրման կարգավորումները, վիճակները և տեղեկամատյանները պահելու համար:

Իհարկե, միայն տվյալների բազան բավարար չէ, և դուք պետք է ստեղծեք հաճախորդի մաս, որի օգնությամբ կարգավորումները կտեղափոխվեն տվյալների բազա։ Սա ավելի դժվար է իրականացնել տեքստային ֆայլի համեմատ, բայց իրականում ամեն ինչ այնքան էլ դժվար չէ, որքան թվում է: Միանգամայն հնարավոր է գրել հաճախորդի մինիմալ տարբերակ, որը պարզապես ինքներդ կփոխանցի տվյալները տվյալների բազա: Իսկ ապագայում հնարավոր կլինի կատարելագործել հաճախորդի ծրագիրը անվճար ռեժիմով (հաշվետվություններ, պիտակներ տպել, ծանուցումներ ուղարկել և այլն, որ գալիս է մտքին):

Տվյալների բազայում կոնկրետ հարցում կատարելով և սերվերի սերիական համարը նշելով, մենք կստանանք անհրաժեշտ պարամետրերը սերվերի կազմաձևման համար:

Բացի այդ, մենք կարիք չենք ունենա միաժամանակ մուտք գործելու կողպեքներ, ինչպես դա տեքստային ֆայլի դեպքում է:

Մենք կարող ենք կոնֆիգուրացիայի մատյան գրել տվյալների բազայում բոլոր փուլերում և վերահսկել տեղադրման գործընթացը նախապատրաստական ​​փուլերի իրադարձությունների և դրոշների միջոցով:

Այժմ մենք գիտենք, թե ինչպես.

  • բեռնել սերվերը PXE-ի միջոցով;
  • փոխանցել վերահսկողությունը մեր սցենարին;
  • նույնականացնել սերվերը, որը պետք է պատրաստվի իր սերիական համարով.
  • կարգավորել սերվերը՝ օգտագործելով համապատասխան կոմունալ ծառայություններ.
  • փոխանցել կարգավորումները տեղադրման սերվերի տվյալների բազայի վրա, օգտագործելով հաճախորդի մասը:

Մենք պարզեցինք, թե ինչպես.

  • տեղադրված սերվերը ստանում է անհրաժեշտ կարգավորումները տվյալների բազայից.
  • Բոլոր նախապատրաստական ​​առաջընթացը գրանցվում է տվյալների բազայում (տեղեկամատյաններ, իրադարձություններ, բեմական դրոշներ):

Ի՞նչ կասեք ձեր տեղադրած տարբեր տեսակի ծրագրերի մասին: Ինչպե՞ս տեղադրել հիպերվիզոր, պատճենել VM և կարգավորել այդ ամենը:

Ֆայլային համակարգի պատկերը (linux) սարքաշարում տեղակայելու դեպքում ամեն ինչ բավականին պարզ է.

  • Բոլոր սերվերի բաղադրիչները կարգավորելուց հետո մենք տեղակայում ենք պատկերը:
  • Տեղադրեք grub bootloader-ը:
  • Մենք chroot և կարգավորում ենք այն ամենը, ինչ անհրաժեշտ է:

Ինչպես փոխանցել կառավարումը OS տեղադրողին (օգտագործելով ESXi որպես օրինակ):

  • Մենք կազմակերպում ենք վերահսկողության փոխանցումը մեր սցենարից հիպերվիզորի տեղադրողին՝ օգտագործելով ավտոմատ պատասխան ֆայլը (kickstart).
  • Մենք ջնջում ենք ընթացիկ բաժանմունքները սկավառակի վրա:
  • Ստեղծեք բաժանում 500 ՄԲ չափով:
  • Մենք նշում ենք այն որպես bootable:
  • Ձևաչափեք 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 hypervisor-ի տեղակայումը և վիրտուալ մեքենաների կազմաձևումը (բոլորը ավտոմատ կերպով):

Մենք պարզեցինք, թե ինչպես.

  • տեղադրված սերվերը ստանում է անհրաժեշտ կարգավորումները տվյալների բազայից.
  • Բոլոր նախապատրաստական ​​առաջընթացը գրանցվում է տվյալների բազայում (տեղեկամատյաններ, իրադարձություններ, բեմական դրոշներ):


Ներքեւի տողը:

Կարծում եմ, որ այս լուծման եզակիությունը կայանում է նրա ճկունության, պարզության, հնարավորությունների և բազմակողմանիության մեջ:

Խնդրում եմ մեկնաբանություններում գրեք ձեր կարծիքը։

Source: www.habr.com

Добавить комментарий