**** 留意事項 *****
こちらのブログの内容はDECN(Dell EMC Community Network)に投稿されたブログの再掲です。
DECNが近い将来に廃止となるためこちらに移行させていただいております。
内容についてはオリジナルの執筆当時のものとなりますので最新ではない場合がありますがご容赦ください。
本記事ではPowerCLIのMove-VMコマンドレットを利用したVM移行について紹介します。
前回と前々回の記事は以下です。
既存環境からvSAN 環境へのMigration:その① 【イントロダクション】
既存環境からvSAN 環境へのMigration:その② 【PowerCLIのInstall】
前回まででPowerCLIのInstallは完了していますのであとは実際にコマンドレットを発行してvSAN ClusterであるVxRailに既存環境からVMを移行します。
イントロダクションの記事でも説明しましたが、VxRailを想定しているため、今回は以下の環境での移行を想定しています。
- 既存および新規(VxRail)環境のそれぞれで独立したvCenterを持つ
- それぞれのvCenterはSSO ドメインを共有していない(拡張リンクモードでない)
- 共有ストレージがない
※こちらの図は以下の資料より抜粋しています。
・Migrating to vSAN
https://storagehub.vmware.com/export_to_pdf/migrating-to-vsan
移行の際はMove-VMコマンドレットを使用します。具体的な使用方法は上記の資料、および以下のBlogにも載っています。
・VMware PowerCLI Blog
https://blogs.vmware.com/PowerCLI/2017/01/spotlight-move-vm-cmdlet.html
もっと簡単に参照する方法として、PowerCLIからMove-VMのコマンドヘルプを見る方法があります。
Get-Help Move-VM -full
※クリックして画像を拡大してください
上図のヘルプからもわかるようにPowerCLIで実施するのは以下です。
- 既存環境のVCにログイン
- 新規環境(VxRail)のVCにログイン
- 移行対象VMのObjectを取得($vm)
- 移行先のホストObjectを取得($destination)
- 移行対象VMのネットワークアダプタ(vNIC)のObjectを取得($networkAdapter)
- 移行先のdvportgroup のObjectを取得($destinationPortGroup)
- 移行先のvSAN データストア Objectを取得($destinationDatastore)
- ↑で入手したObjectを指定して、Move-VMコマンドレットを実行
では実際の例を紹介します。
まずはGet-Credential コマンドレットを使って、VCにログインする認証情報を$creとして保存します。
コマンドを実行するとポップアップが出るので認証情報を入力してください。
※今回の例では既存VCと新規VC(VxRail)で同じ認証情報を利用しています。異なる場合は別々に保存してください
$cre = Get-Credential
認証情報を保存できたら、Connect-VIServer(もしくはGet-VIServer)コマンドレットを利用して両VCにログインします。
-Credential オプションで先ほど保存して認証情報を引数として渡します。
Connect-VIServer -Server <vCenter FQDN> -Credential $cre
両VCにログインできたら既存環境のVMから移行対象のVMを探します。
下記の例ではVM 名に joeを含むVMの一覧の中から、一つのVMを指定して$vmに格納しています。
Get-VM -Server non-vxrailVC -Name *joe*
$vm = Get-VM -Server non-vxrailVC -Name *joe*
次に移行先となる新規環境(VxRail)クラスタの中から移行先ESXiを指定します。
以下の例ではhostnameに 01 を含むESXiを指定しています。
$destination = Get-VMHost -Server vxrailVC -Name *01*
次に移行対象VMのvNIC情報を取得します。
$networkAdapter = Get-NetworkAdapter -VM $vm
次に移行先のVxRail上でvNICが接続されるdvportgroupを指定します。
以下の例ではVxRail上のVDSに存在するPortGroupを列挙して、その中からvCenter~で始まるPortGroupを選んで変数に格納して言います。
Get-VDPortgroup -VDSwitch (Get-VDSwitch -Server vxrailVC)
$destinationPortGroup = Get-VDPortgroup -VDSwitch (Get-VDSwitch -Server vxrailVC) -Name vCenter*
次に移行先となるvSANデータストアの情報を変数に格納します。
VxRail環境の場合はデフォルトからデータストア名称を変更していない限り同じコマンドで取得可能と思います。
Get-Datastore -Server vxrailVC
$destinationDatastore = Get-Datastore -Server vxrailVC -Name MARVIN*
最後にこれまでに取得した情報を利用して移行を開始します。
$vm | Move-VM -Destination $destination -NetworkAdapter $networkAdapter -PortGroup $destinationPortGroup -Datastore $destinationDatastore -RunAsync
※表示幅の関係で2行に見えるかも知れませんが1行コマンドですのでご注意ください。
資料やヘルプには紹介されていませんが、-RunAsyncオプションを加えることでバックグラウンド実行となりPowerCLI起因でのタイムアウトによってコマンドが失敗することがなくなります。
トラブルシューティングや実行順序を制御したいなどの場合に-RunAsyncオプションを外す場合は、前回(その②)の最後で紹介している方法にてタイムアウト値を無期限に設定してください
※実行中のvMotionタスクは移行元(既存環境)のvSphere Webclient、もしくはGet-Taskコマンドレットで確認できます。
ここまでの例は単一VMの移行でしたがPowerCLIの機能を使えば複数VMをまとめて移行させることができます。
以下の例ではVM名にjoeを含むVMすべてをまとめて移行させる方法の例です。
最初のコマンドで該当するVMの一覧を取得して、二つ目のコマンドで一覧を変数に格納しています。
Get-VM -Server non-vxrailVC -Name *joe*
$vms = Get-VM -Server non-vxrailVC -Name *joe*
あとは以下のコマンド例でまとめて実施することが可能です。
※単一VM移行の例と異なりVMのvNIC情報の取得がLoopの中に含まれているのでご注意ください
#移行先ESXiの指定
$destination = Get-VMHost -Server vxrailVC -Name *02*
#移行先dvportgroupの指定
Get-VDPortgroup -VDSwitch (Get-VDSwitch -Server vxrailVC)
$destinationPortGroup = Get-VDPortgroup -VDSwitch (Get-VDSwitch -Server vxrailVC) -Name vCenter*
#移行先データストアの指定
Get-Datastore -Server vxrailVC
$destinationDatastore = Get-Datastore -Server vxrailVC -Name MARVIN*
# ループ開始
foreach ( $vm in $vms) {
$networkAdapter = Get-NetworkAdapter -VM $vm
$vm | Move-VM -Destination $destination -NetworkAdapter $networkAdapter -PortGroup $destinationPortGroup -Datastore $destinationDatastore -RunAsync
}
# ループ終了
foreach文は{から}までで一つのセットですが改行を含めていただいて構いません。
以下がforeach文のコマンド実行例のGif動画です。
※下記のGIF動画はobama03さんにご提供いただきました。ありがとうございます。
※動画が再生されない場合はクリックしてみてください。
実行後は以下のようにすべてのタスクがバックグラウンドで並列実行されています。
同時にvMotionできる数には制限があるため、制限を超えた分に関してはQueueに入れられ実行を待ちます。
並列vMotionの制限についての詳細は、以下の資料をご参照ください
・Migrating to vSAN
https://storagehub.vmware.com/export_to_pdf/migrating-to-vsan
今回まで3回にわたって紹介した移行方法は、VxRailだけでなくほかのvSAN環境や非vSAN環境でも使用可能な方法です。
実際の環境で何百台とあるVMを正確に障害なく移行するためにいはPowerCLIにおけるスクリプトの工夫や確認作業が必要となるとは思いますが、移行の基本となる作業を理解いただけたかと思います。
これまでは実施が難しかった独立した新規vSAN環境(VxRail)へのVM移行手法が、簡単かつサポートされた形で提供されているのは非常に便利で安心できることなので、ぜひとも活用いただければと思います。
================ 2018/08/24追記 ===================
続編を書きました。