vSphere 6.0 から vCenter 間での vMotion が可能になりましたが、
標準的な vSphere Web Client / vSphere Client(旧 HTML5 Client)から実行するには
vCenter が同一の PSC / vSphere Single Sign-On(SSO)ドメインに所属している必要があります。
そして vCenter の SSO ドメインが異なる場合の vCenter 間の vMotion は、
API や PowerCLI から実行する必要があります。
そこで、今回は PowerCLI を利用して、できるだけシンプルな構成で
Cross vCenter vMotion を実行してみます。
今回の環境。
vCenter 6.7 を 2台用意しました。それぞれ別の SSO ドメインに所属しているので、
それぞれ別の vSphere Client からの管理となっています。
移行元の vCenter の名前は、lab-nsxt-vcsa-01.go-lab.jp です。
この vCenter 配下の VM「vm05」を vMotion します。
移行先の vCenter の名前は、infra-vc-01.go-lab.jp です。
PowerCLI 11 を利用します。
PowerCLI> Get-Module -ListAvailable VMware.PowerCLI | select Name,Version
Name Version
---- -------
VMware.PowerCLI 11.0.0.10380590
PowerCLI による Cross vCenter vMotion の実行。
今回は、PowerCLI のスクリプト実行ではなく、対話的な実行(コマンドラインの手入力)で
できるだけ簡潔に Cross vCenter vMotion を実行してみます。
まず、vMotion 元 / 先それぞれの vCenter に接続します。
PowerCLI> $vc_a = Connect-VIServer lab-nsxt-vcsa-01.go-lab.jp
PowerCLI> $vc_b = Connect-VIServer infra-vc-01.go-lab.jp
今回は、vCenter のバージョンがそろっています。
PowerCLI> $vc_a | select Name,Version,Build
Name Version Build
---- ------- -----
lab-nsxt-vcsa-01.go-lab.jp 6.7.0 10244857
PowerCLI> $vc_b | select Name,Version,Build
Name Version Build
---- ------- -----
infra-vc-01.go-lab.jp 6.7.0 10244857
vMotion 先として指定するため、ESXi、データストア、ポートグループを取得して、
それぞれ1件ずつ取得できていることを確認しておきます。
確実に移行先 vCenter から取得するため「-Server」で vCenter を明示的に指定しています。
データストアを取得します。
PowerCLI> $ds = Get-Datastore -Server $vc_b -Name "vsanDatastore"
PowerCLI> $ds | select Name,Type
Name Type
---- ----
vsanDatastore vsan
今回の宛先ポートグループは、vDS の分散仮想スイッチです。
PowerCLI> $pg = Get-VDPortgroup -Server $vc_b -Name "dvpg-infra-0000"
PowerCLI> $pg | select Name
Name
----
dvpg-infra-0000
宛先のESXi です。
ちなみに Cross vCenter vMotion の宛先(Move-VM の -Destination)には、
ESXi(VMHost)かリソースプールを指定できます。
PowerCLI> $hv = Get-VMHost -Server $vc_b -Name "infra-esxi-01.go-lab.jp"
PowerCLI> $hv | select Name
Name
----
infra-esxi-01.go-lab.jp
VM「vm05」の現在の配置を確認しておきます。
「-Server」では、移行元の vCenter を指定しています。
PowerCLI> Get-VM -Server $vc_a -Name vm05 | select Name,PowerState,VMHost,@{N="vCenter";E={$_.Uid -replace ".*@|:.*",""}}| fl
Name : vm05
PowerState : PoweredOn
VMHost : lab-esxi-21.go-lab.jp
vCenter : lab-nsxt-vcsa-01.go-lab.jp
それでは vm05 を vMotion します。
オプションで、あらかじめ取得した ESXi、データストア、ポートグループを指定しています。
PowerCLI> Get-VM -Server $vc_a -Name vm05 | Move-VM -Destination $hv -Datastore $ds -PortGroup $pg
vMotion 完了後に VM の配置を確認すると、期待通り vCenter 間で移動されたことがわかります。
PowerCLI> Get-VM -Name vm05 | select Name,PowerState,VMHost,@{N="vCenter";E={$_.Uid -replace ".*@|:.*",""}} | fl
Name : vm05
PowerState : PoweredOn
VMHost : infra-esxi-01.go-lab.jp
vCenter : infra-vc-01.go-lab.jp
今回の処理を vSphere Client から見た様子。
ちなみに vMotion タスクの進捗は、PowerCLI で実行した場合でも
vSphere Client から確認することができます。
vMotion 実行中の、移行元 vCenter です。
ほぼ同じタイミングでの、移行先 vCenter です。
タスク ステータスの進捗%は、移行元 / 先で一致するわけではありません。
vCenter をまたいで、指定したホストに vMotion されました。
このように、仮想マシンの vNIC や VMDK の構成がシンプルであれば、
対話的に PowerCLI を利用したとしても(PowerCLI スクリプトを作りこむことをしなくても)
簡単に Cross vCenter vMotion できます。
またそれぞれの vCenter / ESXi では、従来の vMotion と同様に
vmkポートでの vMotion トラフィックの有効化や、通信経路でのポート解放などを
済ませておく必要があります。
以上、PowerCLI で Cross vCenter vMotion を実行してみる話でした。