Բարև ձեզ, ես Դենիսն եմ և իմ գործունեության ոլորտներից մեկը X5-ում ենթակառուցվածքային լուծումների մշակումն է: Այսօր ես կցանկանայի ձեզ հետ կիսվել, թե ինչպես կարող եք տեղադրել սերվերի պատրաստման ավտոմատ համակարգ՝ հիմնված հանրությանը հասանելի գործիքների վրա: Իմ կարծիքով, սա հետաքրքիր, պարզ և ճկուն լուծում է։
Նախապատրաստում ասելով նկատի ունենք՝ նոր սերվերը տուփից վերածել OS-ով լիովին կազմաձևված սերվերի: Linux կամ ESXi հիպերվիզորով (Windows սերվերների տեղակայումը այս հոդվածում չի քննարկվում):
Պայմաններ:
- սերվերներ – սերվերներ, որոնք պետք է կազմաձևվեն:
- տեղադրման սերվերը հիմնական սերվերն է, որն ապահովում է պատրաստման ողջ գործընթացը ցանցի միջոցով:
Ինչու՞ է անհրաժեշտ ավտոմատացում:
Ենթադրենք, կա խնդիր՝ զանգվածաբար պատրաստել սերվերներ զրոյից, առավելագույնը՝ օրական 30: Նրանց վրա կարող են տեղադրվել տարբեր արտադրողների և մոդելների սերվերներ, տարբեր օպերացիոն համակարգեր և կարող են ունենալ կամ չունենալ հիպերվիզոր:
Ինչ գործողություններ են ներառված տեղադրման գործընթացում (առանց ավտոմատացման).
- միացնել ստեղնաշարը, մկնիկը, մոնիտորը սերվերին;
- կարգավորել BIOS, RAID, IPMI;
- թարմացնել բաղադրիչի որոնվածը;
- տեղակայել ֆայլային համակարգի պատկեր (կամ տեղադրել հիպերվիզոր և պատճենել վիրտուալ մեքենաներ);
Նշում. Որպես այլընտրանք, ՕՀ-ի տեղակայումը հնարավոր է ավտոմատ արձագանքման ֆայլի միջոցով տեղադրման միջոցով: Բայց դա հոդվածում չի քննարկվի: Թեև ստորև կտեսնեք, որ այս ֆունկցիոնալությունը ավելացնելը դժվար չէ:
- կարգավորել OS-ի պարամետրերը (հյուրընկալողի անունը, IP և այլն):
Այս մոտեցմամբ նույն կարգավորումները հաջորդաբար կատարվում են յուրաքանչյուր սերվերի վրա: Նման աշխատանքի արդյունավետությունը շատ ցածր է։
Ավտոմատացման էությունը սերվերի պատրաստման գործընթացից մարդու մասնակցության վերացումն է: Ինչքան հնարավոր է շատ.
Ավտոմատացումը նվազեցնում է գործառնությունների միջև ընկած ժամանակը և հնարավորություն է տալիս միաժամանակ տրամադրել բազմաթիվ սերվերներ: Մարդկային գործոններով պայմանավորված սխալների հավանականությունը նույնպես մեծապես նվազում է։
Ինչպե՞ս են ավտոմատ կերպով կազմաձևվում սերվերները:
Եկեք մանրամասն վերլուծենք բոլոր փուլերը։
Դուք ունեք 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
Այստեղ ձախ կողմում 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-ի համար: Բոլոր կոմունալ ծառայությունները հասանելի են վաճառողների պաշտոնական կայքերում:
Որոնվածի հետ, կարծում եմ, ամեն ինչ պարզ է: Նրանք սովորաբար գալիս են փաթեթավորված գործարկվող ֆայլերի տեսքով: Գործարկվող ֆայլը վերահսկում է որոնվածի թարմացման գործընթացը և հաղորդում վերադարձի կոդը:
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