تهیه‌ی فلز برهنه را خودتان انجام دهید، یا آماده‌سازی خودکار سرورها از ابتدا

سلام، من دنیس هستم و یکی از زمینه های فعالیت من توسعه راه حل های زیرساختی در X5 است. امروز می‌خواهم با شما در میان بگذارم که چگونه می‌توانید یک سیستم آماده‌سازی خودکار سرور را بر اساس ابزارهای در دسترس عموم مستقر کنید. به نظر من، این یک راه حل جالب، ساده و قابل انعطاف است.

تهیه‌ی فلز برهنه را خودتان انجام دهید، یا آماده‌سازی خودکار سرورها از ابتدا

منظور ما از آماده سازی: تبدیل یک سرور جدید از جعبه به یک سرور کاملاً پیکربندی شده با سیستم عامل. لینوکس یا با هایپروایزر ESXi (استقرار سرورهای ویندوز در این مقاله مورد بحث قرار نگرفته است).

قوانین و مقررات:

  • سرورها - سرورهایی که باید پیکربندی شوند.
  • سرور نصب، سرور اصلی است که کل فرآیند آماده سازی را از طریق شبکه فراهم می کند.

چرا اتوماسیون مورد نیاز است؟

بیایید بگوییم یک وظیفه وجود دارد: آماده سازی انبوه سرورها از ابتدا، در اوج - 30 در روز. سرورهای سازنده و مدل های مختلف، سیستم عامل های مختلف ممکن است بر روی آنها نصب شده باشد و ممکن است هایپروایزر داشته باشند یا نداشته باشند.

چه عملیاتی در فرآیند راه اندازی (بدون اتوماسیون) گنجانده شده است:

  • اتصال صفحه کلید، ماوس، مانیتور به سرور؛
  • پیکربندی BIOS، RAID، IPMI؛
  • به روز رسانی سیستم عامل جزء؛
  • استقرار یک تصویر سیستم فایل (یا نصب هایپروایزر و کپی کردن ماشین های مجازی)؛

توجه داشته باشید. روش دیگر، استقرار سیستم عامل از طریق نصب با یک فایل پاسخ خودکار امکان پذیر است. اما این موضوع در مقاله مورد بحث قرار نخواهد گرفت. اگرچه در زیر خواهید دید که افزودن این قابلیت کار دشواری نیست.

  • پارامترهای سیستم عامل (نام میزبان، IP و غیره) را پیکربندی کنید.

با این رویکرد، تنظیمات یکسانی به صورت متوالی در هر سرور انجام می شود. راندمان چنین کاری بسیار پایین است.

ماهیت اتوماسیون حذف مشارکت انسانی از فرآیند آماده سازی سرور است. تا حد امکان.

اتوماسیون زمان خرابی بین عملیات را کاهش می دهد و امکان ارائه چندین سرور را به طور همزمان فراهم می کند. احتمال خطاهای ناشی از عوامل انسانی نیز بسیار کاهش می یابد.

تهیه‌ی فلز برهنه را خودتان انجام دهید، یا آماده‌سازی خودکار سرورها از ابتدا

چگونه سرورها به طور خودکار پیکربندی می شوند؟

بیایید تمام مراحل را با جزئیات تجزیه و تحلیل کنیم.

شما یک سرور لینوکس دارید که از آن به عنوان سرور نصب PXE استفاده می کنید. سرویس ها بر روی آن نصب و پیکربندی می شوند: DHCP، TFTP.

بنابراین، ما سرور (که باید پیکربندی شود) را از طریق PXE بوت می کنیم. بیایید به یاد بیاوریم که چگونه کار می کند:

  • بوت شبکه روی سرور انتخاب شده است.
  • سرور PXE-ROM کارت شبکه را بارگیری می کند و از طریق DHCP با سرور نصب تماس می گیرد تا آدرس شبکه را بدست آورد.
  • سرور نصب DHCP یک آدرس و همچنین دستورالعمل هایی برای دانلود بیشتر از طریق PXE صادر می کند.
  • سرور بوت لودر شبکه را از سرور نصب از طریق PXE بارگیری می کند، بارگذاری بیشتر طبق فایل پیکربندی PXE انجام می شود.
  • بوت بر اساس پارامترهای دریافتی (هسته، initramfs، نقاط اتصال، تصویر squashfs و غیره) انجام می شود.

توجه داشته باشید. این مقاله راه اندازی از طریق PXE از طریق حالت BIOS را توضیح می دهد. در حال حاضر، سازندگان به طور فعال در حال پیاده سازی بوت مود 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 در این مرحله یک تصویر میانی لینوکس هستند که به کمک آنها آماده سازی و پیکربندی اصلی سرور انجام خواهد شد.

همانطور که می بینید، بوت لودر پارامترهای زیادی را به هسته ارسال می کند. برخی از این پارامترها توسط خود کرنل استفاده می شود. و ما می توانیم از برخی برای اهداف خود استفاده کنیم. این بعداً مورد بحث قرار خواهد گرفت، اما در حال حاضر فقط می توانید به یاد داشته باشید که تمام پارامترهای ارسال شده در تصویر میانی لینوکس از طریق /proc/cmdline در دسترس خواهند بود.

آنها، کرنل و initramfs را از کجا می توانم تهیه کنم؟
به عنوان پایه، می توانید هر توزیع لینوکس را انتخاب کنید. مواردی که هنگام انتخاب به آن توجه می کنیم:

  • تصویر بوت باید جهانی باشد (در دسترس بودن درایورها، امکان نصب ابزارهای اضافی)؛
  • به احتمال زیاد، شما باید 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هایی را که باید بارگذاری شوند را مشخص کرده ایم. در نتیجه در این مرحله با بارگذاری تصویر میانی لینوکس از طریق PXE، کنسول 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 منتقل می کند.

درخت اسکریپت (ترتیبی که آنها راه اندازی می شوند) چیزی شبیه به این است:

  • نصب اصلی
  • توابع اشتراک گذاری (توابع مشترک)
  • اطلاعات (خروجی اطلاعات)
  • مدل‌ها (تنظیم پارامترهای نصب بر اساس مدل سرور)
  • 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 خود شناسایی کنید. یا به هر دو صورت همزمان، اگر فروشنده‌های سرور متفاوت هستند و در برخی مدل‌ها به سادگی هیچ اطلاعاتی در مورد شماره سریال وجود ندارد.

بر اساس اطلاعات دریافتی، پوشه های شبکه از سرور نصب سوار می شوند و همه چیز لازم بارگذاری می شود (برنامه های کاربردی، سیستم عامل و غیره).

چه ابزارهایی و چگونه سرور را پیکربندی کنیم؟

من برای برخی از تولید کنندگان برنامه های کاربردی برای لینوکس ارائه خواهم کرد. همه ابزارها در وب سایت های رسمی فروشندگان در دسترس هستند.

تهیه‌ی فلز برهنه را خودتان انجام دهید، یا آماده‌سازی خودکار سرورها از ابتدا

با فریمور، فکر می کنم همه چیز واضح است. آنها معمولا به شکل فایل های اجرایی بسته بندی شده هستند. فایل اجرایی فرآیند به روز رسانی سیستم عامل را کنترل می کند و کد بازگشتی را گزارش می دهد.

BIOS و IPMI معمولاً از طریق قالب ها پیکربندی می شوند. در صورت لزوم، می توان قالب را قبل از دانلود ویرایش کرد.

ابزارهای RAID برخی از فروشندگان نیز می توانند با استفاده از یک الگو پیکربندی شوند. اگر اینطور نیست، باید یک اسکریپت پیکربندی بنویسید.

روش تنظیم RAID اغلب به شرح زیر است:

  • ما پیکربندی فعلی را درخواست می کنیم.
  • اگر از قبل آرایه های منطقی وجود داشته باشد، آنها را پاک می کنیم.
  • بیایید ببینیم چه دیسک های فیزیکی وجود دارد و چه تعداد وجود دارد.
  • یک آرایه منطقی جدید ایجاد کنید. در صورت بروز خطا، فرآیند را قطع می کنیم.

چگونه تنظیمات یک سرور خاص را دریافت کنیم؟

فرض کنید تنظیمات همه سرورها در سرور نصب ذخیره می شود. در این صورت برای پاسخ به سوال خود ابتدا باید تصمیم بگیریم که چگونه تنظیمات را به سرور نصب منتقل کنیم.

در ابتدا می‌توانید با فایل‌های متنی کنار بیایید. (در آینده، ممکن است بخواهید از یک فایل متنی به عنوان روش بازگشتی برای انتقال تنظیمات استفاده کنید.)

شما می توانید یک فایل متنی را در سرور نصب "به اشتراک بگذارید". و mount آن را به اسکریپت mount.sh اضافه کنید.

برای مثال خطوط به صورت زیر خواهد بود:

<شماره سریال> <نام میزبان> <زیر شبکه>

این خطوط توسط مهندس از دستگاه کار خود به پرونده منتقل می شود. و سپس، هنگام راه اندازی یک سرور، پارامترهای یک سرور خاص از فایل خوانده می شود.

اما در دراز مدت، بهتر است از یک پایگاه داده برای ذخیره تنظیمات، وضعیت ها و گزارش های نصب سرور استفاده کنید.

البته یک پایگاه داده به تنهایی کافی نیست و باید یک بخش کلاینت ایجاد کنید که به کمک آن تنظیمات به دیتابیس منتقل شود. پیاده سازی این در مقایسه با یک فایل متنی دشوارتر است، اما در واقع، همه چیز آنقدرها هم که به نظر می رسد دشوار نیست. نوشتن یک نسخه حداقلی از یک کلاینت کاملاً امکان پذیر است که به سادگی داده ها را خودتان به پایگاه داده منتقل می کند. و در آینده امکان بهبود برنامه کلاینت در حالت رایگان وجود خواهد داشت (گزارش ها، چاپ برچسب ها، ارسال اعلان ها و غیره که به ذهن می رسد).

با درخواست مشخص به پایگاه داده و تعیین شماره سریال سرور، پارامترهای لازم برای پیکربندی سرور را دریافت خواهیم کرد.

به علاوه، مانند یک فایل متنی، نیازی به ایجاد قفل برای دسترسی همزمان نخواهیم داشت.

می‌توانیم لاگ پیکربندی را در تمام مراحل در پایگاه داده بنویسیم و فرآیند نصب را از طریق رویدادها و پرچم‌های مراحل آماده‌سازی کنترل کنیم.

اکنون می دانیم که چگونه:

  • سرور را از طریق PXE بوت کنید.
  • انتقال کنترل به اسکریپت ما؛
  • شناسایی سروری که باید با شماره سریال آن آماده شود؛
  • سرور را با استفاده از ابزارهای مناسب پیکربندی کنید.
  • با استفاده از بخش مشتری، تنظیمات را به پایگاه داده سرور نصب منتقل کنید.

ما متوجه شدیم که چگونه:

  • سرور نصب شده تنظیمات لازم را از پایگاه داده دریافت می کند.
  • تمام پیشرفت های آماده سازی در پایگاه داده ثبت می شود (لاگ ها، رویدادها، پرچم های مرحله).

در مورد انواع مختلف نرم افزارهایی که نصب می کنید چطور؟ چگونه یک Hypervisor نصب کنیم، یک VM را کپی کنیم و همه آن را پیکربندی کنیم؟

در مورد استقرار یک تصویر سیستم فایل (لینوکس) روی سخت افزار، همه چیز بسیار ساده است:

  • پس از تنظیم تمام اجزای سرور، تصویر را مستقر می کنیم.
  • بوت لودر grub را نصب کنید.
  • ما همه چیز مورد نیاز را chroot و پیکربندی می کنیم.

نحوه انتقال کنترل به نصب کننده سیستم عامل (با استفاده از ESXi به عنوان مثال).

  • ما انتقال کنترل را از اسکریپت خود به نصب کننده Hypervisor با استفاده از فایل پاسخ خودکار (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

در این مرحله هایپروایزر نصب و پیکربندی می شود و ماشین های مجازی کپی می شوند.

اکنون چگونه ماشین های مجازی را پیکربندی کنیم؟

ما کمی تقلب کردیم: در حین نصب پارامتر guestinfo.esxihost.id = "$SYSSN" را در فایل VM1.vmx تنظیم کردیم و شماره سریال سرور فیزیکی را در آن نشان دادیم.

اکنون پس از راه اندازی، ماشین مجازی (با بسته vmware-tools نصب شده) می تواند به این پارامتر دسترسی داشته باشد:

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

یعنی ماشین مجازی می‌تواند خود را شناسایی کند (شماره سریال میزبان فیزیکی را می‌داند)، درخواستی به پایگاه داده سرور نصب کند و پارامترهایی را که باید پیکربندی شوند را دریافت کند. همه اینها در یک اسکریپت کامپایل می شود که باید به طور خودکار هنگام راه اندازی guestos vm راه اندازی شود (اما یک بار: RunOnce).

اکنون می دانیم که چگونه:

  • سرور را از طریق PXE بوت کنید.
  • انتقال کنترل به اسکریپت ما؛
  • شناسایی سروری که باید با شماره سریال آن آماده شود؛
  • سرور را با استفاده از ابزارهای مناسب پیکربندی کنید.
  • با استفاده از بخش مشتری، تنظیمات را به پایگاه داده سرور نصب منتقل کنید.
  • پیکربندی انواع مختلف نرم افزار، از جمله استقرار هایپروایزر esxi و پیکربندی ماشین های مجازی (همه به طور خودکار).

ما متوجه شدیم که چگونه:

  • سرور نصب شده تنظیمات لازم را از پایگاه داده دریافت می کند.
  • تمام پیشرفت های آماده سازی در پایگاه داده ثبت می شود (لاگ ها، رویدادها، پرچم های مرحله).


خط پایین:

من معتقدم که منحصر به فرد بودن این راه حل در انعطاف پذیری، سادگی، قابلیت ها و تطبیق پذیری آن نهفته است.

لطفا نظر خود را در نظرات بنویسید.

منبع: www.habr.com

اضافه کردن نظر