前回に続いて、ネステッド vSAN 環境セットアップの工夫を紹介します。
今回は、特にネスト特有の、物理マシンの ESXi と、ESXi VM の部分についてです。
ひきつづき PowerCLI も利用していきます。
これまでの話は下記をどうぞ。
ネステッド vSAN ラボを構築するための工夫 Part.1。(物理 マシン ESXi ~ VCSA デプロイ)
ネステッド ハイパーバイザとなる ESXi VM は、下図のように
vCenter(VCSA)と横並びの VM として作成して、ネスト環境特有の設定をします。
今回は最初に、テンプレートにする ESXi VM を作成し、
それをクローンして 3台の ネステッド ESXi にします。
2-1. ESXi VM を接続するポートグループの作成。
ESXi にデフォルトで作成される「VM Network」ポートグループは、
今回の構成ではネストではない VM で利用するものとします。
そこで、デフォルトで作成される仮想スイッチ「vSwitch0」に、
ESXi VM を接続する、ネスト環境むけのポートグループ
「Nested-Trunk-Network」を新規作成します。
このポートグループには、下記の設定をしています。
- 無差別モード(プロミスキャスモード)の許可。
- 「偽装転送」と「MAC アドレス変更」はデフォルト同様に「許可」。
- VLAN ID 4095。
※ PowerCLI は前回の投稿で vCenter に接続したままの状態です。
PowerCLI> $pg_name = "Nested-Trunk-Network"
PowerCLI> $pg = Get-VMHost | Get-VirtualSwitch -Name vSwitch0 | New-VirtualPortGroup -Name $pg_name -VLanId 4095
PowerCLI> $pg | Get-SecurityPolicy | Set-SecurityPolicy -AllowPromiscuous:$true -ForgedTransmits:$true -MacChanges:$true
2-2. ESXi VM の作成。
ESXi をインストールする VM を作成します。
これは、あとで複数台の ESXi をクローンするための、VM テンプレートとして利用する想定です。
今回は、下記のような PowerCLI スクリプトで VM を作成します。
末尾の 4行では「ハードウェア アシストによる仮想化をゲスト OS に公開」にあたる
NestedHVEnabled を有効にしています。
また、vNIC は 最低限である 1つだけ作成しています。
create-esxi-vm.ps1
$vm_name = "vm-esxi-template-01"
$hv_name = "192.168.1.20"
$guest_id = "vmkernel65Guest"
$num_cpu = 2
$memory_gb = 6
$ds_name = "datastore1"
$vmdk_gb = 16
$pg_name = "Nested-Trunk-Network"
$vm = New-VM -Name $vm_name -VMHost $hv_name `
-GuestId $guest_id `
-NumCpu $num_cpu -CoresPerSocket $num_cpu `
-MemoryGB $memory_gb `
-DiskGB $vmdk_gb -Datastore $ds_name -StorageFormat Thin `
-NetworkName $pg_name
$vm = Get-VM -Name $vm_name
$vm_config_spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$vm_config_spec.NestedHVEnabled = $true
$vm.ExtensionData.ReconfigVM($vm_config_spec)
スクリプトは、vCenter に接続した状態で、下記のように実行します。
PowerCLI> .\create-esxi-vm.ps1
さまざまな vSAN を作成しやすいように、
VMDK の追加や ISO ファイルの接続はクローン後に実施します。
2-3. ESXi VM への ESXi インストールとクローン準備。
まず ESXi VM に、ESXi インストーラの ISO イメージファイルを接続してから起動し、
通常どおり ESXi をインストールします。
ESXi Shell を有効化して、vSphere Client の VM のコンソールからログインします。
この時点では、まだネットワーク設定は不要です。
下記の 2つの設定をします。
1) クローンによる MAC アドレス変更の対策として、
/Net/FollowHardwareMac を有効化します。
[root@localhost:~] esxcli system settings advanced set -o /Net/FollowHardwareMac -i 1
2) クローン後の ESXi VM 初回起動で UUID を再生成するために、
/etc/vmware/esx.conf ファイルから「/system/uuid」をいったん記載削除します。
※ これは vi などの編集でもよいです。
[root@localhost:~] sed -i "/uuid/d" /etc/vmware/esx.conf
設定後、ESXi VM をシャットダウンします。
クローン前に ESXi VM を起動した場合は、また /system/uuid を記載削除する必要があります。
また、VM テンプレートには、変換しても、しなくても大丈夫です。
2-4. ESXi VM のクローン。
ここまでに作成した VM「vm-esxi-template-01」から、3台の VM をクローンします。
- PowerCLI は、vCenter に接続した状態で 物理マシン ESXi「192.168.1.20」上の VM をクローン。
- 仮想マシン名は「vm-esxi-XX」とする。
PowerCLI> 1..3 | % {New-VM -VMHost 192.168.1.20 -StorageFormat Thin -VM "vm-esxi-template-01" -Name ("vm-esxi-" + $_.toString("00"))}
vSAN Disk として利用する VMDK を追加します。
今回は Cache 用に 20GB x 1、Capacity 用に 50GB x 2 を 各 ESXi に用意します。
PowerCLI> Get-VM vm-esxi-?? | New-HardDisk -SizeGB 20 -StorageFormat Thin
PowerCLI> Get-VM vm-esxi-?? | New-HardDisk -SizeGB 50 -StorageFormat Thin
PowerCLI> Get-VM vm-esxi-?? | New-HardDisk -SizeGB 50 -StorageFormat Thin
VMDK は下記のように作成されます。
PowerCLI> Get-VM vm-esxi-?? | Get-HardDisk | select CapacityGB,Parent,Name | Sort-Object Parent,Name
CapacityGB Parent Name
---------- ------ ----
16 vm-esxi-01 Hard disk 1
20 vm-esxi-01 Hard disk 2
50 vm-esxi-01 Hard disk 3
50 vm-esxi-01 Hard disk 4
16 vm-esxi-02 Hard disk 1
20 vm-esxi-02 Hard disk 2
50 vm-esxi-02 Hard disk 3
50 vm-esxi-02 Hard disk 4
16 vm-esxi-03 Hard disk 1
20 vm-esxi-03 Hard disk 2
50 vm-esxi-03 Hard disk 3
50 vm-esxi-03 Hard disk 4
ESXi インストーラの ISO イメージファイルも、PowerCLIで VM に接続します。
ISO イメージファイルは、あらかじめ 物理マシン ESXi のデータストアに配置してあります。
※ESXi を Kickstart でインストールする場合は、この ISO イメージファイル接続は不要です。
PowerCLI> $iso_path = "[datastore1] iso/VMware-VMvisor-Installer-6.7.0.update01-10302608.x86_64.iso"
PowerCLI> Get-VM vm-esxi-?? | New-CDDrive -IsoPath $iso_path -StartConnected:$true
ESXi VM をまとめてパワーオンします。
PowerCLI> Get-VM vm-esxi-?? | Start-VM
このあとの工程に備えて、ネステッド ESXi の VMware Tools が起動したことを確認しておきます。
PowerCLI> Get-VM vm-esxi-?? | select Name,PowerState,@{N="ToolsStatus";E={$_.Guest.ExtensionData.ToolsStatus}}
Name PowerState ToolsStatus
---- ---------- -----------
vm-esxi-03 PoweredOn toolsOk
vm-esxi-02 PoweredOn toolsOk
vm-esxi-01 PoweredOn toolsOk
2-5. ネステッド ESXi の設定。
ネステッド ESXi が起動したら、普通の ESXi と同様に
vCenter から登録する準備としてネットワーク設定をします。
これは VM コンソール経由で DCUI や esxcli などで設定できます。
しかし、ESXi には標準で VMware Tools がインストールされており、
VM にインストールした場合は、vCenter 経由で(ゲスト OS としての)ESXiのコマンドが実行できます。
そして、それを PowerCLI 経由で実行することもできます。
そこで、下記の投稿にある PowerCLI のサンプルスクリプトを利用して、
3台の ESXi VM それぞれにむけて esxcli によるネットワーク設定をします。
PowerCLI から Nested ESXi の esxcli を実行してみる。(GuestProcessManager)
PowerCLI> ./invoke_nested-esxcli.ps1 -ESXiUser:root -ESXiPass:VMware1! -ESXiVM:vm-esxi-01 system hostname set --host esxi-01 --domain go-lab.jp
PowerCLI> ./invoke_nested-esxcli.ps1 -ESXiUser:root -ESXiPass:VMware1! -ESXiVM:vm-esxi-01 network ip interface ipv4 set --interface-name=vmk0 --type=static --ipv4=192.168.1.31 --netmask=255.255.255.0 --gateway=192.168.1.1
PowerCLI> ./invoke_nested-esxcli.ps1 -ESXiUser:root -ESXiPass:VMware1! -ESXiVM:vm-esxi-02 system hostname set --host esxi-02 --domain go-lab.jp
PowerCLI> ./invoke_nested-esxcli.ps1 -ESXiUser:root -ESXiPass:VMware1! -ESXiVM:vm-esxi-02 network ip interface ipv4 set --interface-name=vmk0 --type=static --ipv4=192.168.1.32 --netmask=255.255.255.0 --gateway=192.168.1.1
PowerCLI> ./invoke_nested-esxcli.ps1 -ESXiUser:root -ESXiPass:VMware1! -ESXiVM:vm-esxi-03 system hostname set --host esxi-03 --domain go-lab.jp
PowerCLI> ./invoke_nested-esxcli.ps1 -ESXiUser:root -ESXiPass:VMware1! -ESXiVM:vm-esxi-03 network ip interface ipv4 set --interface-name=vmk0 --type=static --ipv4=192.168.1.33 --netmask=255.255.255.0 --gateway=192.168.1.1
これで、ネステッド ESXi が 3台作成された状態になります。
あとは、vSAN クラスタのセットアップです。
つづく・・・