Azure上のVMRoleインスタンスをHPCノードに (1/2)

以前、高添のブログでも紹介がありましたが、イマドキはAzureのVMRoleインスタンスをWindows HPCの計算ノードとして利用することができます。

今日はこれについてベースになるVMを作るところから、VMRole計算ノードを追加するところまでの簡単な手順を説明したいと思うのですが、ちょっと長いので、「地上」でベースVMを作るまでと、「空」に打ち上げる作業で前編/後編に分けますね。この記事は前編です。

で、手順ですが

実はここに全部書いてあります。

Deploying Windows Azure VM Nodes in Windows HPC Server 2008 R2 Step-by-Step Guide

しかしながら、英語である上にずらりと文字ばかりなので、お世辞にもわかりやすいとは言えません。これを元にしながら、もう少しわかりやすく書いてみたいと思います。

大前提

ヘッドノードのHPC Packは、2008 R2 SP2が必要です。SP1ではVMRoleノードは使えません。(Worker Roleノードは使えます)

HPC Pack 2008 R2 Service Pack 2

 

Windows Azure SDKのインストール

後々必要になります。Hyper-Vホストにこれをインストールしておいてください。

最新版はこれ(でたばかりです) Windows Azure SDK (x64) v1.5

この記事を書くために実際に使用したのはこちら(一つ前のバージョン) Windows Azure SDK (x64) v1.4

“Windows Azure Tools for Microsoft Visual Studio"は不要で、素のSDKだけでOKです。HPCクラスターマネージャーからVMRoleのデプロイができてしまうので、Visual Studioに助けてもらう必要が無いのです。

 

ベースVMの作成

まずはHyper-V上で元になるVMを作ります。これは簡単なので詳しい説明は割愛しますが、注意点は二つ

まず、VHDのサイズ。Hyper-Vで新規VMを作成するときは、何も考えずにデフォルト値で作ると127GBのVHDができてしまいますが、これでは大きすぎてAzureに載せられません。次の表のサイズ制限をご確認ください。なお、VHDの種別は「容量可変」でかまいません。

Azure上でのVMサイズ ベースVHDのサイズ上限
XS 15GB
S 35GB
M,L,XL 65Gb

※ この表の原本はこちら→How to Create the Base VHD for a VM Role in Windows Azure

 

あと、もう一つ注意していただきたいことがあります。

Dynamic Memoryを有効にしちゃダメ

良く訓練されたHyper-V使いは、基本的にDynamic Memoryを有効にしてしまうものですが、VMRoleのベースVMを作る時だけは、「メモリの割当量をいちいち考えていたあの頃」にちょっとだけ戻ってみてください。

image

Dynamic Memoryを有効にしてしまうと何がマズイかというと、、、AzureへアップロードしたVHDを元にロールインスタンスをデプロイしようとする段階で、

Could not load and validate VM image. Ensure that the image is valid and has the right Windows Azure components installed and configured

こんなメッセージのまま、さんざん待たされたあげくエラーになります。VHDのアップロードまでは普通にできてしまうので、割と悲しいのです・・・

 

ゲストOSのインストール

Windows Server 2008 R2 (英語版)をインストールします。

<簡単すぎるため手順は割愛>

(まめちしき) 私は、インストールが終わった「バニラ」の状態で一度VMのスナップショットを取っておきます。あとで何か失敗しても、OSの再インストールをせずに済みますので。

 

必要なモジュールのインストール

ゲストOSに三つのモジュールをインストールします。

VMRole統合サービス

まず、VMRole用の統合サービス。これは、Hyper-VホストにAzure SDKをインストールしてあれば、"C:\Program Files\Windows Azure SDK\SDKバージョン\iso\wavmroleic.iso”というのがあるはずです。これをVMにアタッチしてやります。

こんな感じで。

image

そうするとISOの内容がゲストOSのDVDドライブに見えてきますので、

image

この、WaIntegrationComponents-x64.msiというのをインストールしてください。

 

パスワードを聞かれます。

image

これは、あれです。VMRoleをAzure上で展開する場合には、当然Windowsのセットアップを完全自動化する必要があるわけですが、それには応答ファイルに管理者パスワードを定義する必要があります。そうしないと、「ユーザーは最初にログオンする前にパスワードを変更しなければなりません」というあの画面で止まってしまうのです。ここで設定したパスワードが、応答ファイル(unattend.xml)に書き込まれるわけです。(C:\unattend.xmlが作成されます)

 

なお、インストールの途中、こんな画面が二回ほど出てきます。

image

これは、ストレージ用の準仮想化ドライバをインストールするぞ、というお知らせです。"Install"をクリックしてください。

 

この画面が出てくれば、終了です。

image

 

再起動を求められますので、"Yes"をクリックしてください。Windowsが再起動します。

image

 

HPC用Azureモジュール

次に、ゲストOSにWindows HPCのノードとして稼働するために必要なモジュールを導入します。

二つあります。

まず、HPC Pack 2008 R2 for Windows Azure Virtual Machines というもので、ファイル名は"HPCAzureVM.msi"です。

これは、ここ HPC Pack 2008 R2 Service Pack 2 からダウンロードできる "HPC2008R2SP2-Update-x64.zip" というファイルに入っています。

インストール自体は簡単で、特に悩むべき選択肢はありません。次へ次へと進んでください。

この画面が出てきたら完了です。

image

 

HPC用MPIモジュール

次に、MPIのランタイムを導入します。"mpi_x64.msi"というファイル名です。さっきのHPCAzureVM.msiと同じフォルダにも入っていますし、次の場所から単体でもダウンロードできます。

HPC Pack 2008 R2 MS-MPI Redistributable Package with Service Pack 2

これも、特に悩むところはないので、あっさりインストールしてください。

image

この画面が出てきたら完了です。

image

ファイアウォールの設定

MPIの通信が通るように、ファイウォールに穴を開けます。これは、それ用のコマンドが用意されているので簡単です。

ゲストOSのコマンドプロンプトで、次のコマンドを実行してください。

“C:\Program Files\Microsoft HPC Pack 2008 R2\Bin\hpcfwutil” reset

 

以上で、ベースVMの準備はほぼ完了です。あとはsysprepするだけです。

 

sysprep

(まめちしき) 必須ではありませんが、私はsysprepする前にVMのスナップショットを取っておきます。sysprepはある意味「取り返しの付かない操作」なので。

次のコマンドを実行して、sysprep処理を行います。

c:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /shutdown

sysprep処理が完了すると、自動的にシャットダウンしてVMはOFFになります。

OFFになったら、必ずVMのスナップショットを取ってください。理由は次のステップでわかります。

 

VHDの取り出し

さて、sysprepも済んだので、あとはVHDをAzureに乗せるばかりなのですが、ここまでの手順の中で、いくつかVMのスナップショットを取得していることだと思います。こうなると、この仮想マシンを表すVHDは

親VHD+複数の差分VHDに分散している

わけです。いったいどれをAzureにアップロードすれば良いのでしょうか。我々が今アップロードしたいのは、sysrep直後の状態のはずです。何とかして、この"sysprep直後"の状態を詰め込んだ単一のVHDを得なければなりません。

そこで、以前も書いた「スナップショットをエクスポートする」機能を利用します。こんな感じで、「sysprep完了後に作成したスナップショットを右クリックして、"エクスポート"」するだけです。

image

VHDはどこに出力されるのでしょうか。次のように「D:\Hyper-V\HPC\ksasaki\Exported」をエクスポート先に選んだとすると、

image

ここです↓  ("ksasaki-HPC-VMRole-Base-S"ってのは私が作ったVMの名前)

D:\Hyper-V\HPC\ksasaki\Exported\ksasaki-HPC-VMRole-Base-S\Virtual Hard Disks

こんな感じで、

image

さて、これでベースVHDの準備は完璧です。あとはこれを受け入れるAzure側と、Azureへ打ち上げるためのHPC Server側の設定です。

後編へ続く

__END__