SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Azure の Virtual Machines のイメージの管理

leave a comment

Azure の Virtual Machines (VMs) のイメージの管理について軽くまとめてみたいと思います。
詳細については Virtual Machines にまとめられています。

■構成要素


まずはキーワードを整理しながら構成要素を見ていきたいと思います。

  • VM INSTANCES
    これは作成した VMs のインスタンスですね。
    VMs のゲスト OS ひとつが 1 インスタンスになります。
  • IMAGES
    VMs のインスタンスを作成する際に使用する VHD のイメージになります。
    実際には BLOB ストレージに登録した VHD を OS 展開用のイメージとして登録したものになるかと。

    VMs ではデフォルトでいくつかのイメージが提供されていますが、これ以外のイメージを VMs で使用したい場合には CSUpload コマンドや CloudXplorer を使用して BLOB に VHD をアップして IMAGES に登録をする必要があります。

    [VMs で提供されているイメージ]

    • Windows Server 2008 R2 Service Pack 1 + SQL Server 2012 Evaluation Edition
    • Windows Server 2008 R2 Service Pack 1 (5 月までの修正パッチ適用済み)
    • Windows Server 2012 Release Candidate
    • OpenLogic CentOS 6.2
    • SUSE Linux Enterprise Server
    • Ubuntu Server 12.04 LTS
    • openSUSE 12.1
  • DISKS
    VMs のインスタンスで使用しているディスクになります。
    IMAGES にある VHD はイメージを作成するために使用するマスターになるため変更はされませんが、こちらは実際に VMs のインスタンスで使用されているディスクになるため内容が変わっていきます。

    IMAGES から VMs のインスタンスを作成すると、IMAGES に登録されている VHD を元に BLOB ストレージ上に新しく VHD が作成され、それが DISKS として登録されインスタンスで使用されることになります。
    なお、インスタンスに追加で接続をしたデータ用のディスクもこちらに登録がされます。
    OS ディスクとデータディスクの 2 種類の用途があるイメージですね。

    インスタンスで使用されている D ドライブ (Temporary Storage) に関しては DISKS には登録がされていないディスクになりますので非永続化領域として使用する必要があります。

■追加のディスク領域の確保


VMs の初期の状態ですと OS のディスク領域しかありません。
追加で領域を確保したい場合にはインスタンスにディスクの追加を行います。
インスタンスを選択して [ATTACH] からディスクの追加を行うことができます。
image

追加するディスクに関してはゲスト OS の SCSI ディスクとして追加されていますのでオンライン状態で追加、取り外しをすることができます。

インスタンスのサイズによって、追加できるデータディスクの数が変わってきますのでサイズを決める際にはこの辺も注意をしておく必要がありますね。

image

なお、VMs のディスクにはホストキャッシングの設定があります。
ホストキャッシングの設定は以下の Windows Azure Power Shell で確認することができます。

$subid = "<サブスクリプション ID>"
$cert = Get-Item Cert:CurrentUserMy<管理証明書拇印>
Set-AzureSubscription -SubscriptionName "Mysubs" -SubscriptionId $subid -Certificate $cert
Get-AzureVM  -ServiceName <サービス名> -Name <VM 名> | Get-AzureOSDisk
Get-AzureVM -ServiceName <サービス名> -Name <VM 名> | Get-AzureDataDisk

デフォルトでは OS Disk は ReadWrite、Data Disk は None となっているようです。
変更する場合は以下のコマンドを実行します。

なお、OS Disk のキャッシュモードを変更した場合には再起動が発生するようです。

Get-AzureVM -ServiceName <サービス名> -Name <VM 名> | Set-AzureOSDisk -HostCaching ReadOnly | Update-AzureVM
Get-AzureVM -ServiceName <サービス名> -Name <VM 名> | Set-AzureDataDisk -LUN 0 -HostCaching ReadOnly | Update-AzureVM

 

■キャプチャによるディスクの複製


VMs のインスタンスはリモートデスクトップでログインし、直接変更をすることができます。
VHD は BLOB ストレージ上に保存されている永続化領域となります。
この VHD を複製して他のインスタンスで使用できるようにするのがキャプチャになります。

停止している VM のインスタンスであればキャプチャをすることができます。
image

キャプチャする際に、[I have sysprepped the virtual machine] と表示されているのですが、Sysprep 済みのイメージをキャプチャする必要があるようです。
# 実際には Sysprep していなくてもキャプチャできるのですがイメージを展開した後の初回の起動時の STATUS が Running (Provisioning) から変わりませんでした。起動はしているのでリモートデスクトップで接続ができるのであれば Sysprep を実行することでリカバリーはできるかと。
image

Sysprep の実行方法は How to Capture an Image of a Virtual Machine Running
Windows Server 2008 R2 で解説されています。
[C:WindowsPantherUnattend.xml] に [SkipRearm] が有効になっている応答ファイルが設定されていますのでライセンス認証クロックのリセット回数は気にしないでも問題はなさそうですね。

キャプチャを実行するとキャプチャを実行した VM のインスタンスが削除され、IMAGES に登録がされます。
image
image

この際、元となった VMs のインスタンスで使用されていたものとは異なる VHD が作成されイメージに登録がされるようです。
image

そのため、キャプチャ直後はもとになった VHD とキャプチャにより作成された VHD の 2 種類が存在していることになりますので BLOB ストレージの使用量には注意をする必要があるかと。

また、キャプチャで複製されるのは OS Disk の部分のみとなり、Data Disk に関してはキャプチャでは複製されません。
そのため、他のインスタンスでも同じディスクを使用したい場合には BLOB ストレージ上に自分で複製をする必要が出てきます。
CloudXplorer のコピー / 貼り付けを使用することで複製をすることができます。
ただし、CloudXplorer では同じコンテナ内には貼り付けができませんので、一時的にテンポラリ用のコンテナを作成しそこに貼り付け、その後名前を変更して切り取り / 貼り付けで元のコンテナに戻すという対応が必要になってきそうです。

キャプチャしたインスタンスはイメージに登録がされますので次に VMs のインスタンスを作成するときに選択することができます。
# キャプチャの元になったインスタンスの VHD も選択できるようですね。これは OS Disk として認識されているからだと思いますが。
image

キャプチャしたイメージを使用して VMs のインスタンスを作れるようになりますので、同じ設定のインスタンスを複数作ることが可能となります。

作成したインスタンスは OS Disk のみが認識されていますので必要に応じてデータディスクを接続させる必要があります。
キャプチャしたイメージではキャプチャ前に接続していたディスクの情報が残っているので ATTACH をしようとすると前回接続していた Data Disk に接続をするのは簡単にできると思います。
異なるディスクに接続をしたい場合には、Add-AzureDataDisk を使用することで BLOB ストレージに格納している VHD を接続することができます。

Set-AzureSubscription -SubscriptionName "Mysubs" -SubscriptionId $subid -Certificate $cert -CurrentStorageAccount "<VHD を保存しているストレージアカウント>"
Get-AzureVM  -ServiceName vmstest -Name vmtest | Add-AzureDataDisk -ImportFrom -MediaLocation "<VHD の URL>" -DiskLabel "DataDisk" -LUN 0 | Update-AzureVM

■インスタンスの削除と VHD の削除


これは Preview 時点の動作になるかもしれませんが。

インスタンスを削除してもインスタンスで使用していた VHD は DISKS からは削除されません。
インスタンスで使用していた VHD はポータルから明示的に削除をする必要があります。

ポータルから削除すると管理情報は削除されるのですが BLOB ストレージ上から実体は削除されていません。
そのため、Azure Storage Explorer や CloudXplorer や AppController 等のストレージを操作できるソフトを使用して VHD を手動で削除する必要があります。

これは IMAGES から登録を削除した時も同様です。
この場合も管理情報のみの削除であり BLOB ストレージ上からは VHD が削除されませんので不要になったら手動で削除を行う必要があります。

 

VMs のイメージの基本的な管理はこのような形になるでしょうか。
キャプチャ時には一般化した Sysprep を実行する流れになると思いますので、同一の環境を複数準備したい場合 Sysprep 後の初期設定がいろいろと必要になるかもしれないですね。

 

■BLOB ストレージに保存する VHD の注意点


VMs で使用する VHD は BLOB ストレージに保存しますが以下の注意点があります。

  • Page BLOB として保存する 
    image
  • VHD は固定長のものを保存する 
    image

固定長の VHD を使用する必要がありますのでストレージの課金については気を付ける必要がありそうです。
また、アップロード時に Block BLOB でアップロードしてしまうと長い時間かけてアップロードをしても悲しいことになるので注意が必要です。
# 身をもって体験しました…。

 

実際に利用を始めると見えてくるところがまだまだあると思いますので時間がある時にもう少し触っていきたいと思います。

Share

Written by Masayuki.Ozawa

6月 24th, 2012 at 10:37 pm

Posted in Windows Azure

Tagged with

Leave a Reply