افعل ذلك بنفسك، أو قم بالإعداد التلقائي للخوادم من البداية

مرحبًا، اسمي دينيس وأحد مجالات نشاطي هو تطوير حلول البنية التحتية في X5. أود اليوم أن أشارككم كيف يمكنك نشر نظام الإعداد التلقائي للخادم استنادًا إلى الأدوات المتاحة للعامة. في رأيي، هذا حل مثير للاهتمام وبسيط ومرن.

افعل ذلك بنفسك، أو قم بالإعداد التلقائي للخوادم من البداية

نعني بالتحضير: تحويل خادم جديد خارج الصندوق إلى خادم مهيأ بالكامل مع نظام التشغيل. Linux أو باستخدام برنامج Hypervisor ESXi (لم تتم مناقشة نشر خوادم Windows في هذه المقالة).

حيث:

  • الخوادم - الخوادم التي تحتاج إلى تكوين.
  • خادم التثبيت هو الخادم الرئيسي الذي يوفر عملية الإعداد بأكملها عبر الشبكة.

لماذا هناك حاجة إلى الأتمتة؟

لنفترض أن هناك مهمة: إعداد خوادم على نطاق واسع من الصفر، وبذروة – 30 خوادم يوميًا. قد يتم تثبيت خوادم من شركات مصنعة ونماذج مختلفة وأنظمة تشغيل مختلفة عليها، وقد تحتوي أو لا تحتوي على برنامج Hypervisor.

ما هي العمليات المضمنة في عملية الإعداد (بدون الأتمتة):

  • توصيل لوحة المفاتيح والماوس والشاشة بالخادم؛
  • تكوين BIOS، RAID، IPMI؛
  • تحديث البرامج الثابتة للمكونات؛
  • نشر صورة نظام الملفات (أو تثبيت برنامج Hypervisor ونسخ الأجهزة الافتراضية)؛

ملحوظة. وبدلاً من ذلك، يمكن نشر نظام التشغيل من خلال التثبيت باستخدام ملف الاستجابة التلقائية. لكن هذا لن يتم مناقشته في المقال. على الرغم من أنك سترى أدناه أن إضافة هذه الوظيفة ليس بالأمر الصعب.

  • تكوين معلمات نظام التشغيل (اسم المضيف، IP، وما إلى ذلك).

باستخدام هذا الأسلوب، يتم تنفيذ نفس الإعدادات بشكل تسلسلي على كل خادم. كفاءة مثل هذا العمل منخفضة للغاية.

جوهر الأتمتة هو استبعاد المشاركة البشرية من عملية إعداد الخادم. بقدر المستطاع.

تعمل الأتمتة على تقليل وقت التوقف عن العمل بين العمليات وتجعل من الممكن توفير خوادم متعددة في وقت واحد. كما يتم أيضًا تقليل احتمالية حدوث أخطاء بسبب العوامل البشرية بشكل كبير.

افعل ذلك بنفسك، أو قم بالإعداد التلقائي للخوادم من البداية

كيف يتم تكوين الخوادم تلقائيا؟

دعونا نحلل جميع المراحل بالتفصيل.

لديك خادم Linux تستخدمه كخادم تثبيت PXE. يتم تثبيت الخدمات وتكوينها عليه: DHCP، TFTP.

لذلك، نقوم بتشغيل الخادم (الذي يحتاج إلى تكوين) عبر PXE. دعونا نتذكر كيف يعمل:

  • تم تحديد تمهيد الشبكة على الخادم.
  • يقوم الخادم بتحميل PXE-ROM الخاص ببطاقة الشبكة ويتصل بخادم التثبيت عبر DHCP للحصول على عنوان الشبكة.
  • يصدر خادم تثبيت DHCP عنوانًا، بالإضافة إلى تعليمات لمزيد من التنزيل عبر PXE.
  • يقوم الخادم بتحميل أداة تحميل تشغيل الشبكة من خادم التثبيت عبر PXE، ويتم التحميل الإضافي وفقًا لملف تكوين PXE.
  • يحدث التمهيد بناءً على المعلمات المستلمة (kernel، 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=”…”

يعد kernel و initramfs في هذه المرحلة صورة Linux وسيطة، والتي سيتم من خلالها الإعداد والتكوين الرئيسي للخادم.

كما ترون، يقوم محمل الإقلاع بتمرير العديد من المعلمات إلى النواة. يتم استخدام بعض هذه المعلمات بواسطة النواة نفسها. ويمكننا استخدام بعضها لأغراضنا الخاصة. سيتم مناقشة ذلك لاحقًا، ولكن في الوقت الحالي يمكنك فقط أن تتذكر أن جميع المعلمات التي تم تمريرها ستكون متاحة في صورة Linux الوسيطة عبر /proc/cmdline.

أين يمكنني الحصول عليها، kernel و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

لذلك قمنا بتحديد النواة وinitramfs التي يجب تحميلها. نتيجة لذلك، في هذه المرحلة، من خلال تحميل صورة Linux المتوسطة عبر PXE، سنتلقى وحدة تحكم نظام التشغيل.

عظيم، لكننا الآن بحاجة إلى نقل التحكم إلى "الأتمتة" الخاصة بنا.

يمكن القيام به على هذا النحو.

لنفترض أنه بعد تحميل الصورة نخطط لنقل التحكم إلى البرنامج النصي mount.sh.
لنقم بتضمين البرنامج النصي mount.sh في التشغيل التلقائي. للقيام بذلك سوف تحتاج إلى تعديل initramfs:

  • فك ضغط initramfs (إذا استخدمنا خيار initramfs أعلاه، فهذا غير مطلوب)
  • قم بتضمين التعليمات البرمجية عند بدء التشغيل والتي ستقوم بتحليل المعلمات التي تم تمريرها عبر /proc/cmdline ونقل التحكم بشكل أكبر؛
  • حزمة initramfs.

ملحوظة. في حالة مجموعة أدوات X5، يتم نقل التحكم في التحميل إلى البرنامج النصي /opt/x5/toolkit/bin/hook.sh с помощью override.conf в getty tty1 (ExecStart=…)

لذلك، يتم تحميل الصورة، حيث يبدأ البرنامج النصي mount.sh عند التشغيل التلقائي. بعد ذلك، يقوم البرنامج النصي 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 من دليل البرنامج النصي.

تبدو شجرة البرامج النصية (الترتيب الذي تم إطلاقها به) كما يلي:

  • تثبيت رئيسي
  • وظائف مشتركة (وظائف مشتركة)
  • معلومات (مخرجات المعلومات)
  • النماذج (ضبط معلمات التثبيت بناءً على طراز الخادم)
  • Prepar_utils (تثبيت الأدوات المساعدة الضرورية)
  • fwupdate (تحديث البرنامج الثابت)
  • دياج (التشخيص الأولي)
  • biosconf (إعدادات BIOS/UEFI)
  • Clockfix (ضبط الوقت على اللوحة الأم)
  • srmconf (تكوين واجهة الواجهة البعيدة)
  • RAIDConf (تكوين وحدات التخزين المنطقية)

واحد من:

  • التثبيت المسبق (نقل التحكم إلى نظام التشغيل أو مثبت برنامج Hypervisor، مثل 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؛
  • نقل التحكم إلى البرنامج النصي لدينا؛
  • تحديد الخادم الذي يجب إعداده من خلال رقمه التسلسلي؛
  • تكوين الخادم باستخدام الأدوات المساعدة المناسبة؛
  • نقل الإعدادات إلى قاعدة بيانات خادم التثبيت باستخدام جزء العميل.

اكتشفنا كيف:

  • يتلقى الخادم المثبت الإعدادات اللازمة من قاعدة البيانات؛
  • يتم تسجيل كل تقدم الإعداد في قاعدة البيانات (السجلات، الأحداث، أعلام المرحلة).

ماذا عن أنواع البرامج المختلفة التي تقوم بتثبيتها؟ كيفية تثبيت برنامج Hypervisor ونسخ جهاز افتراضي وتكوينه بالكامل؟

في حالة نشر صورة نظام الملفات (لينكس) على الأجهزة، كل شيء بسيط للغاية:

  • بعد إعداد جميع مكونات الخادم، نقوم بنشر الصورة.
  • قم بتثبيت أداة تحميل التشغيل grub.
  • نحن نقوم بتجذير وتكوين كل ما هو مطلوب.

كيفية نقل التحكم إلى مثبت نظام التشغيل (باستخدام ESXi كمثال).

  • نقوم بتنظيم نقل التحكم من البرنامج النصي الخاص بنا إلى برنامج تثبيت برنامج Hypervisor باستخدام ملف الاستجابة التلقائية (kickstart):
  • نقوم بحذف الأقسام الحالية على القرص.
  • قم بإنشاء قسم بحجم 500 ميجابايت.
  • نحن نضع علامة عليه على أنه قابل للتمهيد.
  • التنسيق إلى FAT32.
  • نقوم بنسخ ملفات تثبيت ESXi إلى الجذر.
  • تثبيت سيسلينوكس.
  • انسخ 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

في هذه المرحلة، يتم تثبيت برنامج Hypervisor وتكوينه، ويتم نسخ الأجهزة الافتراضية.

كيفية تكوين الأجهزة الافتراضية الآن؟

لقد خدعنا قليلاً: أثناء التثبيت، قمنا بتعيين المعلمة Guestinfo.esxihost.id = "$SYSSN" في ملف VM1.vmx وأشرنا إلى الرقم التسلسلي للخادم الفعلي فيه.

الآن، بعد البدء، يمكن للجهاز الظاهري (مع تثبيت حزمة vmware-tools) الوصول إلى هذه المعلمة:

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

أي أن الجهاز الظاهري سيكون قادرًا على تعريف نفسه (يعرف الرقم التسلسلي للمضيف الفعلي)، وتقديم طلب إلى قاعدة بيانات خادم التثبيت وتلقي المعلمات التي تحتاج إلى تكوين. يتم تجميع كل هذا في برنامج نصي، والذي يجب تشغيله تلقائيًا عند بدء تشغيل Guestos Vm (ولكن مرة واحدة: RunOnce).

والآن نعرف كيف:

  • تمهيد الخادم عبر PXE؛
  • نقل التحكم إلى البرنامج النصي لدينا؛
  • تحديد الخادم الذي يجب إعداده من خلال رقمه التسلسلي؛
  • تكوين الخادم باستخدام الأدوات المساعدة المناسبة؛
  • نقل الإعدادات إلى قاعدة بيانات خادم التثبيت باستخدام جزء العميل؛
  • قم بتكوين أنواع مختلفة من البرامج، بما في ذلك نشر برنامج Hypervisor esxi وتكوين الأجهزة الافتراضية (كل ذلك تلقائيًا).

اكتشفنا كيف:

  • يتلقى الخادم المثبت الإعدادات اللازمة من قاعدة البيانات؛
  • يتم تسجيل كل تقدم الإعداد في قاعدة البيانات (السجلات، الأحداث، أعلام المرحلة).


وخلاصة القول:

أعتقد أن تفرد هذا الحل يكمن في مرونته وبساطته وإمكانياته وتعدد استخداماته.

يرجى الكتابة في التعليقات ما هو رأيك.

المصدر: www.habr.com

إضافة تعليق