Φτιάξτο μόνος σου Προμήθεια Bare-Metal ή Αυτόματη προετοιμασία διακομιστών από την αρχή

Γεια σας, είμαι ο Denis και ένας από τους τομείς δραστηριότητάς μου είναι η ανάπτυξη λύσεων υποδομής στο X5. Σήμερα θα ήθελα να μοιραστώ μαζί σας πώς μπορείτε να αναπτύξετε ένα αυτόματο σύστημα προετοιμασίας διακομιστή που βασίζεται σε δημόσια διαθέσιμα εργαλεία. Κατά τη γνώμη μου, αυτή είναι μια ενδιαφέρουσα, απλή και ευέλικτη λύση.

Φτιάξτο μόνος σου Προμήθεια Bare-Metal ή Αυτόματη προετοιμασία διακομιστών από την αρχή

Με τον όρο προετοιμασία εννοούμε: μετατρέψτε έναν νέο διακομιστή από το κουτί σε έναν πλήρως διαμορφωμένο διακομιστή με λειτουργικό σύστημα. Linux ή με τον hypervisor ESXi (η ανάπτυξη διακομιστών Windows δεν συζητείται σε αυτό το άρθρο).

Όροι:

  • διακομιστές – διακομιστές που πρέπει να ρυθμιστούν.
  • Ο διακομιστής εγκατάστασης είναι ο κύριος διακομιστής που παρέχει ολόκληρη τη διαδικασία προετοιμασίας μέσω του δικτύου.

Γιατί χρειάζεται αυτοματοποίηση;

Ας υποθέσουμε ότι υπάρχει μια εργασία: να προετοιμάζετε μαζικά διακομιστές από την αρχή, στο μέγιστο - 30 την ημέρα. Διακομιστές διαφορετικών κατασκευαστών και μοντέλων, διαφορετικά λειτουργικά συστήματα μπορεί να είναι εγκατεστημένα σε αυτούς και μπορεί να έχουν ή να μην έχουν hypervisor.

Ποιες λειτουργίες περιλαμβάνονται στη διαδικασία εγκατάστασης (χωρίς αυτοματισμό):

  • συνδέστε ένα πληκτρολόγιο, ποντίκι, οθόνη στον διακομιστή.
  • Ρύθμιση παραμέτρων BIOS, RAID, IPMI.
  • ενημέρωση υλικολογισμικού στοιχείου.
  • αναπτύξτε μια εικόνα συστήματος αρχείων (ή εγκαταστήστε έναν hypervisor και αντιγράψτε εικονικές μηχανές).

Σημείωση. Εναλλακτικά, η ανάπτυξη του λειτουργικού συστήματος είναι δυνατή μέσω εγκατάστασης με ένα αρχείο αυτόματης απόκρισης. Αλλά αυτό δεν θα συζητηθεί στο άρθρο. Αν και θα δείτε παρακάτω ότι η προσθήκη αυτής της λειτουργικότητας δεν είναι δύσκολη.

  • ρυθμίστε τις παραμέτρους του λειτουργικού συστήματος (όνομα κεντρικού υπολογιστή, IP, κ.λπ.).

Με αυτήν την προσέγγιση, οι ίδιες ρυθμίσεις εκτελούνται διαδοχικά σε κάθε διακομιστή. Η αποτελεσματικότητα μιας τέτοιας εργασίας είναι πολύ χαμηλή.

Η ουσία του αυτοματισμού είναι να εξαλειφθεί η ανθρώπινη συμμετοχή από τη διαδικασία προετοιμασίας του διακομιστή. Οσο το δυνατόν.

Ο αυτοματισμός μειώνει το χρόνο διακοπής λειτουργίας μεταξύ των λειτουργιών και καθιστά δυνατή την παροχή πολλών διακομιστών ταυτόχρονα. Η πιθανότητα σφαλμάτων που οφείλονται σε ανθρώπινους παράγοντες είναι επίσης πολύ μειωμένη.

Φτιάξτο μόνος σου Προμήθεια Bare-Metal ή Αυτόματη προετοιμασία διακομιστών από την αρχή

Πώς ρυθμίζονται αυτόματα οι διακομιστές;

Ας αναλύσουμε όλα τα στάδια λεπτομερώς.

Έχετε έναν διακομιστή Linux που χρησιμοποιείτε ως διακομιστή εγκατάστασης PXE. Οι υπηρεσίες εγκαθίστανται και διαμορφώνονται σε αυτό: DHCP, TFTP.

Έτσι, εκκινούμε τον διακομιστή (που πρέπει να ρυθμιστεί) μέσω PXE. Ας θυμηθούμε πώς λειτουργεί:

  • Η εκκίνηση δικτύου επιλέγεται στον διακομιστή.
  • Ο διακομιστής φορτώνει το PXE-ROM της κάρτας δικτύου και επικοινωνεί με τον διακομιστή εγκατάστασης μέσω DHCP για να αποκτήσει μια διεύθυνση δικτύου.
  • Ο διακομιστής εγκατάστασης DHCP εκδίδει μια διεύθυνση, καθώς και οδηγίες για περαιτέρω λήψη μέσω PXE.
  • Ο διακομιστής φορτώνει το πρόγραμμα εκκίνησης δικτύου από τον διακομιστή εγκατάστασης μέσω PXE, η περαιτέρω φόρτωση πραγματοποιείται σύμφωνα με το αρχείο διαμόρφωσης PXE.
  • Η εκκίνηση γίνεται με βάση τις παραμέτρους που λαμβάνονται (πυρήνας, initramfs, σημεία προσάρτησης, εικόνα squashf, κ.λπ.).

Σημείωση. Το άρθρο περιγράφει την εκκίνηση μέσω 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=”…”

Ο πυρήνας και το initramf σε αυτό το στάδιο είναι μια ενδιάμεση εικόνα 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

Έτσι έχουμε καθορίσει τον πυρήνα και τα initramfs που πρέπει να φορτωθούν. Ως αποτέλεσμα, σε αυτό το στάδιο, φορτώνοντας την ενδιάμεση εικόνα 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 ξεκινά από την αυτόματη εκτέλεση. Στη συνέχεια, το σενάριο mount.sh αναλύει τις περασμένες παραμέτρους (script_cmd=) κατά την εκτέλεση και εκκινεί το απαραίτητο πρόγραμμα/script.

εργαλειοθήκη ετικετών-αυτόματη
πυρήνας...
προσάρτηση... nfs_toolkit_script=scripts/mount.sh script_cmd=master-install.sh

εργαλειοθήκη ετικετών-κέλυφος
πυρήνας...
προσάρτηση... nfs_toolkit_script=scripts/mount.sh script_cmd=/bin/bash

Φτιάξτο μόνος σου Προμήθεια Bare-Metal ή Αυτόματη προετοιμασία διακομιστών από την αρχή

Εδώ στα αριστερά είναι το μενού PXE, στα δεξιά είναι το διάγραμμα μεταφοράς ελέγχου.

Καταλάβαμε τη μεταφορά του ελέγχου. Ανάλογα με την επιλογή του μενού PXE, εκκινείται είτε το σενάριο αυτόματης διαμόρφωσης είτε η κονσόλα εντοπισμού σφαλμάτων.

Σε περίπτωση αυτόματης διαμόρφωσης, οι απαραίτητοι κατάλογοι προσαρτώνται από τον διακομιστή εγκατάστασης, οι οποίοι περιέχουν:

  • σενάρια?
  • αποθηκευμένα πρότυπα BIOS/UEFI για διάφορους διακομιστές.
  • υλικολογισμικό;
  • βοηθητικά προγράμματα διακομιστή?
  • κούτσουρα

Στη συνέχεια, το σενάριο mount.sh μεταφέρει τον έλεγχο στο σενάριο master-install.sh από τον κατάλογο σεναρίων.

Το δέντρο σεναρίων (η σειρά με την οποία εκκινούνται) μοιάζει κάπως έτσι:

  • κύρια εγκατάσταση
  • κοινόχρηστες λειτουργίες (κοινόχρηστες λειτουργίες)
  • πληροφορίες (εξόδου πληροφοριών)
  • μοντέλα (ρύθμιση παραμέτρων εγκατάστασης με βάση το μοντέλο διακομιστή)
  • προετοιμασία_utils (εγκατάσταση των απαραίτητων βοηθητικών προγραμμάτων)
  • fwupdate (ενημέρωση υλικολογισμικού)
  • diag (στοιχειώδη διαγνωστικά)
  • biosconf (ρυθμίσεις BIOS/UEFI)
  • επιδιόρθωση ρολογιού (ρύθμιση της ώρας στη μητρική πλακέτα)
  • srmconf (διαμόρφωση διεπαφής απομακρυσμένης διεπαφής)
  • raidconf (διαμόρφωση λογικών τόμων)

ένας από:

  • προεγκατάσταση (μεταφορά του ελέγχου στο λειτουργικό σύστημα ή το πρόγραμμα εγκατάστασης του hypervisor, όπως το ESXi)
  • συγχώνευση-εγκατάσταση (άμεση έναρξη αποσυσκευασίας της εικόνας)

Τώρα ξέρουμε:

  • πώς να εκκινήσετε έναν διακομιστή μέσω PXE.
  • πώς να μεταφέρετε τον έλεγχο στο δικό σας σενάριο.


Ας συνεχίσουμε. Οι παρακάτω ερωτήσεις έγιναν σχετικές:

  • Πώς να αναγνωρίσετε τον διακομιστή που ετοιμάζουμε;
  • Ποια βοηθητικά προγράμματα και πώς να ρυθμίσετε τον διακομιστή;
  • Πώς μπορώ να λάβω ρυθμίσεις για έναν συγκεκριμένο διακομιστή;

Πώς να αναγνωρίσετε τον διακομιστή που ετοιμάζουμε;

Είναι απλό - DMI:

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

Όλα όσα χρειάζεστε είναι εδώ: πωλητής, μοντέλο, σειριακός αριθμός. Εάν δεν είστε βέβαιοι ότι αυτές οι πληροφορίες υπάρχουν σε όλους τους διακομιστές, μπορείτε να τους αναγνωρίσετε από τη διεύθυνση MAC τους. Ή και με τους δύο τρόπους ταυτόχρονα, εάν οι προμηθευτές διακομιστών είναι διαφορετικοί και σε ορισμένα μοντέλα απλά δεν υπάρχουν πληροφορίες σχετικά με τον σειριακό αριθμό.

Με βάση τις πληροφορίες που λαμβάνονται, οι φάκελοι δικτύου τοποθετούνται από τον διακομιστή εγκατάστασης και φορτώνονται όλα τα απαραίτητα (βοηθητικά προγράμματα, υλικολογισμικό κ.λπ.).

Ποια βοηθητικά προγράμματα και πώς να ρυθμίσετε τον διακομιστή;

Θα παρέχω βοηθητικά προγράμματα για Linux για ορισμένους κατασκευαστές. Όλα τα βοηθητικά προγράμματα είναι διαθέσιμα στους επίσημους ιστότοπους των πωλητών.

Φτιάξτο μόνος σου Προμήθεια Bare-Metal ή Αυτόματη προετοιμασία διακομιστών από την αρχή

Με το υλικολογισμικό, νομίζω ότι όλα είναι ξεκάθαρα. Συνήθως έρχονται με τη μορφή συσκευασμένων εκτελέσιμων αρχείων. Το εκτελέσιμο αρχείο ελέγχει τη διαδικασία ενημέρωσης υλικολογισμικού και αναφέρει τον κωδικό επιστροφής.

Το BIOS και το IPMI ρυθμίζονται συνήθως μέσω προτύπων. Εάν είναι απαραίτητο, το πρότυπο μπορεί να επεξεργαστεί πριν από τη λήψη.

Τα βοηθητικά προγράμματα RAID από ορισμένους προμηθευτές μπορούν επίσης να διαμορφωθούν χρησιμοποιώντας ένα πρότυπο. Εάν αυτό δεν συμβαίνει, τότε θα πρέπει να γράψετε ένα σενάριο διαμόρφωσης.

Η διαδικασία για τη ρύθμιση του RAID είναι συνήθως η εξής:

  • Ζητάμε την τρέχουσα διαμόρφωση.
  • Εάν υπάρχουν ήδη λογικοί πίνακες, τους διαγράφουμε.
  • Ας δούμε ποιοι φυσικοί δίσκοι υπάρχουν και πόσοι υπάρχουν.
  • Δημιουργήστε έναν νέο λογικό πίνακα. Διακόπτουμε τη διαδικασία σε περίπτωση σφάλματος.

Πώς μπορώ να λάβω ρυθμίσεις για έναν συγκεκριμένο διακομιστή;

Ας υποθέσουμε ότι οι ρυθμίσεις όλων των διακομιστών θα αποθηκευτούν στον διακομιστή εγκατάστασης. Σε αυτήν την περίπτωση, για να απαντήσουμε στην ερώτησή μας, πρέπει πρώτα να αποφασίσουμε πώς θα μεταφέρουμε τις ρυθμίσεις στον διακομιστή εγκατάστασης.

Στην αρχή, μπορείτε να τα βγάλετε πέρα ​​με αρχεία κειμένου. (Στο μέλλον, μπορεί να θέλετε να χρησιμοποιήσετε ένα αρχείο κειμένου ως εναλλακτική μέθοδο για τη μεταφορά ρυθμίσεων.)

Μπορείτε να "μοιράζεστε" ένα αρχείο κειμένου στον διακομιστή εγκατάστασης. Και προσθέστε τη βάση του στο σενάριο mount.sh.

Οι γραμμές, για παράδειγμα, θα μοιάζουν με αυτό:

<σειριακός αριθμός> <όνομα κεντρικού υπολογιστή> <υποδίκτυο>

Αυτές οι γραμμές θα μεταφερθούν στο αρχείο από τον μηχανικό από τη μηχανή εργασίας του. Στη συνέχεια, κατά τη ρύθμιση ενός διακομιστή, οι παράμετροι για έναν συγκεκριμένο διακομιστή θα διαβαστούν από το αρχείο.

Όμως, μακροπρόθεσμα, είναι καλύτερο να χρησιμοποιείτε μια βάση δεδομένων για την αποθήκευση των ρυθμίσεων, των καταστάσεων και των αρχείων καταγραφής των εγκαταστάσεων διακομιστή.

Φυσικά, μια βάση δεδομένων από μόνη της δεν αρκεί και θα χρειαστεί να δημιουργήσετε ένα τμήμα πελάτη με τη βοήθεια του οποίου οι ρυθμίσεις θα μεταφερθούν στη βάση δεδομένων. Αυτό είναι πιο δύσκολο να εφαρμοστεί σε σύγκριση με ένα αρχείο κειμένου, αλλά στην πραγματικότητα, όλα δεν είναι τόσο δύσκολα όσο φαίνονται. Είναι πολύ πιθανό να γράψετε μια ελάχιστη έκδοση ενός πελάτη που απλώς θα μεταφέρει δεδομένα στη βάση δεδομένων μόνοι σας. Και στο μέλλον θα είναι δυνατή η βελτίωση του προγράμματος πελάτη σε δωρεάν λειτουργία (αναφορές, εκτύπωση ετικετών, αποστολή ειδοποιήσεων κ.λπ. που σας έρχεται στο μυαλό).

Κάνοντας ένα συγκεκριμένο αίτημα στη βάση δεδομένων και προσδιορίζοντας τον σειριακό αριθμό διακομιστή, θα λάβουμε τις απαραίτητες παραμέτρους για τη διαμόρφωση του διακομιστή.

Επιπλέον, δεν θα χρειαστεί να βρούμε κλειδαριές για ταυτόχρονη πρόσβαση, όπως συμβαίνει με ένα αρχείο κειμένου.

Μπορούμε να γράψουμε το αρχείο καταγραφής διαμόρφωσης στη βάση δεδομένων σε όλα τα στάδια και να ελέγξουμε τη διαδικασία εγκατάστασης μέσω συμβάντων και σημαιών των σταδίων προετοιμασίας.

Τώρα ξέρουμε πώς:

  • εκκίνηση του διακομιστή μέσω PXE.
  • μεταφορά ελέγχου στο σενάριό μας.
  • Προσδιορίστε τον διακομιστή που πρέπει να προετοιμαστεί από τον αύξοντα αριθμό του·
  • ρυθμίστε τις παραμέτρους του διακομιστή χρησιμοποιώντας τα κατάλληλα βοηθητικά προγράμματα.
  • μεταφέρετε τις ρυθμίσεις στη βάση δεδομένων του διακομιστή εγκατάστασης χρησιμοποιώντας το τμήμα πελάτη.

Μάθαμε πώς:

  • ο εγκατεστημένος διακομιστής λαμβάνει τις απαραίτητες ρυθμίσεις από τη βάση δεδομένων.
  • όλη η πρόοδος της προετοιμασίας καταγράφεται στη βάση δεδομένων (ημερολόγια, συμβάντα, σημαίες σκηνής).

Τι γίνεται με τους διαφορετικούς τύπους λογισμικού που εγκαθιστάτε; Πώς να εγκαταστήσετε έναν hypervisor, να αντιγράψετε ένα VM και να τα ρυθμίσετε όλα;

Στην περίπτωση της ανάπτυξης μιας εικόνας συστήματος αρχείων (linux) σε υλικό, όλα είναι πολύ απλά:

  • Αφού ρυθμίσουμε όλα τα στοιχεία του διακομιστή, αναπτύσσουμε την εικόνα.
  • Εγκαταστήστε το πρόγραμμα εκκίνησης grub.
  • Κάνουμε chroot και ρυθμίζουμε όλα όσα χρειάζονται.

Πώς να μεταφέρετε τον έλεγχο στο πρόγραμμα εγκατάστασης του λειτουργικού συστήματος (χρησιμοποιώντας το ESXi ως παράδειγμα).

  • Οργανώνουμε τη μεταφορά του ελέγχου από το σενάριο μας στο πρόγραμμα εγκατάστασης του hypervisor χρησιμοποιώντας το αρχείο αυτόματης απόκρισης (kickstart):
  • Διαγράφουμε τα τρέχοντα διαμερίσματα στο δίσκο.
  • Δημιουργήστε ένα διαμέρισμα με μέγεθος 500MB.
  • Το επισημαίνουμε ως bootable.
  • Μορφοποίηση σε FAT32.
  • Αντιγράφουμε τα αρχεία εγκατάστασης ESXi στο root.
  • Εγκατάσταση syslinux.
  • Αντιγράψτε το syslinux.cfg στο /syslinux/

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

  • Αντιγράψτε το boot.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

Προσθέστε ένα σχόλιο