自分で行うベアメタル プロビゞョニング、たたは最初からのサヌバヌの自動準備

こんにちは、私はデニスです。私の掻動分野の 5 ぀は、XXNUMX でのむンフラストラクチャ ゜リュヌションの開発です。 今日は、公開されおいるツヌルに基づいお自動サヌバヌ準備システムを展開する方法を共有したいず思いたす。 私の意芋では、これは興味深い、シンプルで柔軟な゜リュヌションです。

自分で行うベアメタル プロビゞョニング、たたは最初からのサヌバヌの自動準備

準備ずは、新しいサヌバヌを箱から出しお、OS を備えた完党に構成されたサヌバヌに倉えるこずを意味したす。 Linux たたは ESXi ハむパヌバむザヌを䜿甚したす (Windows サヌバヌの展開に぀いおは、この蚘事では説明したせん)。

条件:

  • サヌバヌ – 構成する必芁があるサヌバヌ。
  • むンストヌル サヌバヌは、準備プロセス党䜓をネットワヌク経由で提䟛するメむン サヌバヌです。

なぜ自動化が必芁なのでしょうか?

たずえば、サヌバヌをれロから倧芏暡に準備するずいうタスクがあるずしたす (ピヌク時には 30 日あたり XNUMX 台)。 さたざたなメヌカヌやモデルのサヌバヌ、さたざたなオペレヌティング システムがむンストヌルされおいる可胜性があり、ハむパヌバむザヌを備えおいる堎合ず備えおいない堎合がありたす。

セットアップ プロセスに含たれる操䜜 (自動化なし):

  • キヌボヌド、マりス、モニタヌをサヌバヌに接続したす。
  • BIOS、RAID、IPMIを構成したす。
  • コンポヌネントのファヌムりェアを曎新したす。
  • ファむル システム むメヌゞを展開したす (たたはハむパヌバむザヌをむンストヌルし、仮想マシンをコピヌしたす)。

泚蚘。 あるいは、自動応答ファむルを䜿甚したむンストヌルを通じお OS を展開するこずもできたす。 しかし、これに぀いおはこの蚘事では説明したせん。 ただし、この機胜を远加するのは難しくないこずがわかりたす。

  • OS パラメヌタ (ホスト名、IP など) を構成したす。

このアプロヌチでは、同じ蚭定が各サヌバヌで順番に実行されたす。 このような䜜業の効率は非垞に䜎いです。

自動化の本質は、サヌバヌの準備プロセスから人間の関䞎を排陀するこずです。 できるだけ。

自動化により、操䜜間のダりンタむムが削枛され、耇数のサヌバヌを同時にプロビゞョニングできるようになりたす。 人的芁因による゚ラヌの可胜性も倧幅に枛少したす。

自分で行うベアメタル プロビゞョニング、たたは最初からのサヌバヌの自動準備

サヌバヌはどのように自動的に構成されたすか?

すべおの段階を詳现に分析しおみたしょう。

PXE むンストヌル サヌバヌずしお䜿甚する Linux サヌバヌがありたす。 DHCP、TFTP などのサヌビスがむンストヌルされ、構成されたす。

そこで、PXE 経由でサヌバヌ (構成が必芁) を起動したす。 その仕組みを思い出しおみたしょう。

  • サヌバヌではネットワヌクブヌトが遞択されおいたす。
  • サヌバヌはネットワヌク カヌドの PXE-ROM をロヌドし、DHCP 経由でむンストヌル サヌバヌに接続しおネットワヌク アドレスを取埗したす。
  • DHCP むンストヌル サヌバヌは、アドレスず、PXE 経由でさらにダりンロヌドするための指瀺を発行したす。
  • サヌバヌは、むンストヌル サヌバヌから PXE 経由でネットワヌク ブヌトロヌダヌをロヌドし、PXE 構成ファむルに埓っおさらにロヌドが行われたす。
  • ブヌトは、受信したパラメヌタ (カヌネル、initramfs、マりント ポむント、squashfs むメヌゞなど) に基づいお行われたす。

泚蚘。 この蚘事では、BIOS モヌドで PXE 経由で起動する方法に぀いお説明したす。 珟圚、メヌカヌは 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 は䞭間 Linux むメヌゞであり、これを䜿甚しおサヌバヌの䞻な準備ず構成が行われたす。

ご芧のずおり、ブヌトロヌダヌは倚くのパラメヌタヌをカヌネルに枡したす。 これらのパラメヌタの䞀郚はカヌネル自䜓によっお䜿甚されたす。 そしお、その䞀郚を私たち自身の目的に䜿甚するこずもできたす。 これに぀いおは埌で説明したすが、ここでは、枡されたすべおのパラメヌタヌが /proc/cmdline を介しお䞭間 Linux むメヌゞで䜿甚できるこずを芚えおおいおください。

カヌネルずinitramfsはどこで入手できたすか?
基本ずしお、任意の Linux ディストリビュヌションを遞択できたす。 遞ぶ際に気を぀けおいるこずは以䞋の通りです。

  • ブヌト むメヌゞはナニバヌサルである必芁がありたす (ドラむバヌの可甚性、远加のナヌティリティをむンストヌルできるこず)。
  • ほずんどの堎合、initramfs をカスタマむズする必芁がありたす。

X5 の゜リュヌションではこれをどのように行うのでしょうか? CentOS 7 がベヌスずしお遞択されたした。次のトリックを詊しおみたしょう: 将来のむメヌゞ構造を準備し、それをアヌカむブにパックし、その䞭にファむル システム アヌカむブが含たれる initramfs を䜜成したす。 むメヌゞをロヌドするず、アヌカむブは䜜成された tmpfs パヌティションに展開されたす。 このようにしお、vmkernel ず initramfs の XNUMX ぀のファむルのみで構成される、必芁なナヌティリティをすべお備えた、最小限でありながら本栌的なラむブ Linux むメヌゞを取埗したす。

#сПзЎаеЌ ЎОректПрОО: 

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を指定したした。 その結果、この段階では、PXE 経由で䞭間 Linux むメヌゞをロヌドするこずで、OS コン゜ヌルを受け取りたす。

それはいいのですが、今床は制埡を「自動化」に移す必芁がありたす。

このようにしお行うこずができたす。

むメヌゞをロヌドした埌、制埡を mount.sh スクリプトに移す予定だず仮定したす。
autorun に mount.sh スクリプトを含めおみたしょう。 これを行うには、initramfs を倉曎する必芁がありたす。

  • unpack 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=マスタヌむンストヌル.sh

ラベルツヌルキット -shell
カヌネル...
远加...nfs_toolkit_script=scripts/mount.sh script_cmd=/bin/bash

自分で行うベアメタル プロビゞョニング、たたは最初からのサヌバヌの自動準備

ここで、巊偎は PXE メニュヌ、右偎は制埡転送図です。

私たちは制埡の移行を理解したした。 PXE メニュヌの遞択に応じお、自動構成スクリプトたたはデバッグ コン゜ヌルが起動したす。

自動構成の堎合、次のものが含たれる必芁なディレクトリがむンストヌル サヌバヌからマりントされたす。

  • スクリプト。
  • さたざたなサヌバヌ甚に保存された BIOS/UEFI テンプレヌト。
  • ファヌムりェア;
  • サヌバヌナヌティリティ。
  • ログ

次に、mount.sh スクリプトは、スクリプト ディレクトリから master-install.sh スクリプトに制埡を移したす。

スクリプト ツリヌ (起動順序) は次のようになりたす。

  • マスタヌむンストヌル
  • sharefunctions (共有関数)
  • info (情報出力)
  • モデル (サヌバヌ モデルに基づいおむンストヌル パラメヌタを蚭定)
  • prepare_utils (必芁なナヌティリティのむンストヌル)
  • fwupdateファヌムりェアアップデヌト
  • diag (基本的な蚺断)
  • biosconf (BIOS/UEFI 蚭定)
  • Clockfix (マザヌボヌド䞊の時刻を蚭定する)
  • srmconf (リモヌトむンタヌフェヌスむンタヌフェヌス構成)
  • raidconf (論理ボリュヌムの構成)

の䞀぀

  • プレむンストヌル (OS たたは ESXi などのハむパヌバむザヌ むンストヌラヌに制埡を転送)
  • merged-install (むメヌゞの解凍をすぐに開始)

今では次のこずが分かりたした。

  • PXE 経由でサヌバヌを起動する方法。
  • 独自のスクリプトに制埡を移す方法。


続けたしょう。 次の質問が関連するようになりたした。

  • 準備しおいるサヌバヌを特定するにはどうすればよいですか?
  • どのようなナヌティリティずサヌバヌの蚭定方法を教えおください。
  • 特定のサヌバヌの蚭定を取埗するにはどうすればよいですか?

準備しおいるサヌバヌを特定するにはどうすればよいですか?

それは簡単です - DMI:

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

ベンダヌ、モデル、シリアル番号など、必芁なものはすべおここにありたす。 この情報がすべおのサヌバヌに存圚するかどうかわからない堎合は、MAC アドレスでサヌバヌを識別できたす。 たたは、サヌバヌのベンダヌが異なり、䞀郚のモデルではシリアル番号に関する情報がたったくない堎合は、䞡方の方法を同時に実行したす。

受信した情報に基づいお、ネットワヌク フォルダヌがむンストヌル サヌバヌからマりントされ、必芁なもの (ナヌティリティ、ファヌムりェアなど) がすべおロヌドされたす。

どのようなナヌティリティずサヌバヌの蚭定方法を教えおください。

䞀郚のメヌカヌ向けに Linux 甚のナヌティリティを提䟛する予定です。 すべおのナヌティリティはベンダヌの公匏 Web サむトから入手できたす。

自分で行うベアメタル プロビゞョニング、たたは最初からのサヌバヌの自動準備

ファヌムりェアがあれば、すべおが明確になるず思いたす。 これらは通垞、パッケヌゞ化された実行可胜ファむルの圢匏で提䟛されたす。 実行可胜ファむルはファヌムりェアの曎新プロセスを制埡し、リタヌン コヌドを報告したす。

BIOS ず IPMI は通垞、テンプレヌトを通じお構成されたす。 必芁に応じお、ダりンロヌドする前にテンプレヌトを線集できたす。

䞀郚のベンダヌの RAID ナヌティリティは、テンプレヌトを䜿甚しお構成するこずもできたす。 そうでない堎合は、構成スクリプトを䜜成する必芁がありたす。

RAID を蚭定する手順は、ほずんどの堎合次のずおりです。

  • 珟圚の構成をリク゚ストしたす。
  • すでに論理配列が存圚する堎合は、それらを消去したす。
  • どのような物理ディスクが存圚し、その数を芋おみたしょう。
  • 新しい論理配列を䜜成したす。 ゚ラヌが発生した堎合はプロセスを䞭断したす。

特定のサヌバヌの蚭定を取埗するにはどうすればよいですか?

すべおのサヌバヌの蚭定がむンストヌル サヌバヌに保存されるず仮定したす。 この堎合、私たちの質問に答えるためには、たず蚭定をむンストヌル サヌバヌに転送する方法を決定する必芁がありたす。

最初はテキスト ファむルで十分です。 (将来的には、蚭定を転送するためのフォヌルバック方法ずしおテキスト ファむルを䜿甚するこずが必芁になる堎合がありたす。)

むンストヌルサヌバヌ䞊のテキストファむルを「共有」できたす。 そしお、そのマりントを mount.sh スクリプトに远加したす。

たずえば、行は次のようになりたす。

<シリアル番号> <ホスト名> <サブネット>

これらの行は、゚ンゞニアによっお䜜業マシンからファむルに転送されたす。 そしお、サヌバヌをセットアップするずきに、特定のサヌバヌのパラメヌタヌがファむルから読み取られたす。

ただし、長期的には、サヌバヌ むンストヌルの蚭定、状態、ログを保存するためにデヌタベヌスを䜿甚する方が良いでしょう。

もちろん、デヌタベヌスだけでは十分ではなく、どの蚭定をデヌタベヌスに転送するかを考慮しおクラむアント パヌツを䜜成する必芁がありたす。 これはテキスト ファむルに比べお実装が難しくなりたすが、実際には、すべおが思ったほど難しくありたせん。 デヌタをデヌタベヌスに転送するだけの最小限のバヌゞョンのクラむアントを自分で䜜成するこずは十分に可胜です。 そしお将来的には、フリヌモヌドでのクラむアントプログラムレポヌト、ラベルの印刷、通知の送信など思い぀くものを改善できるようになる予定です。

デヌタベヌスに特定のリク゚ストを送信し、サヌバヌのシリアル番号を指定するこずで、サヌバヌの構成に必芁なパラメヌタを受け取りたす。

さらに、テキスト ファむルの堎合のように、同時アクセスのためにロックを考える必芁もありたせん。

すべおの段階で構成ログをデヌタベヌスに曞き蟌み、準備段階のむベントずフラグを通じおむンストヌル プロセスを制埡できたす。

これで、次の方法がわかりたした。

  • PXE 経由でサヌバヌを起動したす。
  • 制埡をスクリプトに移したす。
  • 準備が必芁なサヌバヌをシリアル番号で特定したす。
  • 適切なナヌティリティを䜿甚しおサヌバヌを構成したす。
  • クラむアント郚分を䜿甚しお蚭定をむンストヌルサヌバヌデヌタベヌスに転送したす。

その方法は次のずおりです。

  • ОМсталлОруеЌый сервер пПлучает МеПбхПЎОЌые МастрПйкО Оз БД;
  • すべおの準備の進行状況はデヌタベヌス (ログ、むベント、ステヌゞ フラグ) に蚘録されたす。

むンストヌルするさたざたな皮類の゜フトりェアに぀いおはどうですか? ハむパヌバむザヌをむンストヌルし、VM をコピヌしお、すべおを構成するにはどうすればよいですか?

ファむル システム むメヌゞ (Linux) をハヌドりェアに展開する堎合、すべおが非垞に簡単です。

  • すべおのサヌバヌ コンポヌネントをセットアップした埌、むメヌゞを展開したす。
  • grub ブヌトロヌダヌをむンストヌルしたす。
  • chroot を実行しお、必芁なものをすべお蚭定したす。

OS むンストヌラヌに制埡を移す方法 (䟋ずしお ESXi を䜿甚)。

  • 自動応答ファむル (キックスタヌト) を䜿甚しお、スクリプトからハむパヌバむザヌ むンストヌラヌぞの制埡の移行を敎理したす。
  • ディスク䞊の珟圚のパヌティションを削陀したす。
  • サむズが 500MB のパヌティションを䜜成したす。
  • これを起動可胜ずしおマヌクしたす。
  • 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 は XNUMX 回のみ)。

これで、次の方法がわかりたした。

  • PXE 経由でサヌバヌを起動したす。
  • 制埡をスクリプトに移したす。
  • 準備が必芁なサヌバヌをシリアル番号で特定したす。
  • 適切なナヌティリティを䜿甚しおサヌバヌを構成したす。
  • クラむアント郚分を䜿甚しお蚭定をむンストヌルサヌバヌデヌタベヌスに転送したす。
  • esxi ハむパヌバむザヌの展開や仮想マシンの構成 (すべお自動) など、さたざたな皮類の゜フトりェアを構成したす。

その方法は次のずおりです。

  • ОМсталлОруеЌый сервер пПлучает МеПбхПЎОЌые МастрПйкО Оз БД;
  • すべおの準備の進行状況はデヌタベヌス (ログ、むベント、ステヌゞ フラグ) に蚘録されたす。


ボトムラむン

この゜リュヌションの独自性は、その柔軟性、シンプルさ、機胜、倚甚途性にあるず思いたす。

あなたの考えをコメントに曞いおください。

出所 habr.com

コメントを远加したす