Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Windows仮想マシンをソフトウェアで制御する
~その実践と対策~

14-D-2
#devsumiD
株式会社インターネットイニシアティブ
プラットフォーム本部プラットフォームサービス部
プラットフォーム開発課
山内 徹

1
本日のアジェンダ

• 本セッションの骨子
• 自己紹介
• Windowsで構築する仮想環境
• IIJ GIOのハイパーバイザーとしてWin2008R2を導入する
• IIJ GIOのハイパーバイザーを2008R2から2012へ移行する
•...
本セッションの骨子

弊社がWindowsベースの仮想環境の管理システム
を開発する中で、仮想マシンを制御する過程で発生し
た問題と解決策について解説するものです

3
自己紹介

プロフィール
• 1997年日本電気ソフトウェア(現NECソフト)入社
• 開発やったりSIやったり色々
• 2002年以降、.NET関連の仕事が主業務になる
• 2007年アイアイジェイテクノロジ-(現IIJ)入社
• やはり.N...
Windowsを使った標準的な仮想環境

5
Windowsを使った標準的な仮想環境

クラスター
VM VM VM VM

VM VM VM VM

VM VM VM VM

Hyper-V

Hyper-V

Hyper-V

Windows Server

Windows Serve...
IIJ GIOのハイパーバイザーとして
Win2008R2を導入する

7
DDTKを使う

2010年5月、弊社のIIJ GIOでWindowsOSの
ベースサーバを提供するにあたり、そのハイ
パ ー バ イ ザ ー と し て Windows Server
2008R2を採用した
短期間で高品質な管理システムを開発...
DDTKの構成

クラスター
VM VM VM VM

VM VM VM VM

VM VM VM VM

Hyper-V

Hyper-V

Hyper-V

Windows Server

Windows Server

Windows S...
DDTKを使う

DDTK
(Dynamic Datacenter Toolkit for Hosters)とは
Hyper-VやSystem Centerを制御し、仮想環境を構築するた
めのベースとなるサンプルコード
C#ベースのソースコード...
Windowsを使った標準的な仮想環境

クラスター
VM VM VM VM

VM VM VM VM

VM VM VM VM

Hyper-V

Hyper-V

Hyper-V

Windows Server

Windows Serve...
DDTKの構成

クラスター
VM VM VM VM

VM VM VM VM

VM VM VM VM

Hyper-V

Hyper-V

Hyper-V

Windows Server

Windows Server

Windows S...
WCFとは
• Windows Communication Foundationの略
• .NETの通信テクノロジーの一つ
• 構成ファイル(*.config)を使ってプロトコルや細かいパラメータ
等を定義できる
• DDTKのインタフェースの...
DDTKの構成

クラスター
VM VM VM VM

VM VM VM VM

VM VM VM VM

Hyper-V

Hyper-V

Hyper-V

Windows Server

Windows Server

Windows S...
WMIとは
• Windows Management Instrumentationの略でWindowsをプロ
グラムコードで管理する機能
• 本セッションではHyper-Vをプログラムから制御するのに使用

VM VM VM VM

Hype...
WMIのサンプルコード
• コンポーネントごとに分類された名前空間の中にいくつかのク
ラスが定義されており、そのクラスのインスタンスに対してプロ
パティを読み取ったり、メソッドを実行したりして制御する
• インスタンスの検索にSQLに似た言語が...
WMIの名前空間
• WMIの名前空間は、WMIクラスのフォルダのようなもので、
管理対象のコンポーネントごとに分かれている

例
名前空間:CIMV2
CIM_Action
MSFT_WmiEssEvent
Win32_DiskPartiti...
DDTKの構成

クラスター
VM VM VM VM

VM VM VM VM

VM VM VM VM

Hyper-V

Hyper-V

Hyper-V

Windows Server

Windows Server

Windows S...
DDTKの調査
DDTKのマニュアルには、前提とするシステム構成と

インストール方法しか書かれていない
DDTKのソースコードにはほとんどコメントがない
何ができて何ができないのか調査を実施
結果、以下のことが判明

多くの機能が不足している...
不足機能を作りこみ
DDTKに不足している機能を作りこまなければならない
不足機能の作りこみで以下のポリシーとした

どちらでも実装可能な機能は
「VMM制御用」のDDTKに実装する

VMM

Hyper
V

Power
Shell

WM...
DDTKの構成

クラスター
VM VM VM VM

VM VM VM VM

VM VM VM VM

Hyper-V

Hyper-V

Hyper-V

Windows Server

Windows Server

Windows S...
VMMの更新遅延

原因
Hyper-Vの情報がVMMへ反映するのにかなり(数分~数十分)の
タイムラグがある
大きなタイムラグがあると、例えば、VMが停止している前提の操作を起動
中に行ってしまうことなどの問題が発生する
Refresh-VM...
Hyper-V制御用での実装の問題

Hyper-V制御用での実装で以下の問題が発生
VMが壊れたとVMMに誤認識されることがある
強制的に更新することで解消することもあるが、Hyper-Vのジョブが実行
中の場合、VMが本当に壊れることがある...
DDTKの構成

クラスター
VM VM VM VM

VM VM VM VM

VM VM VM VM

Hyper-V

Hyper-V

Hyper-V

Windows Server

Windows Server

Windows S...
その他の注意点

①英語版のサンプルコードの利用の
注意点
②VMMから取れる情報の注意点

25
その他の注意点

①英語版のサンプルコードの利用の
注意点
②VMMから取れる情報の注意点

26
①英語版のサンプルコードの利用の注意点
• DDTK自身を始め、サンプルコードを検索すると、海外製で
あることが多いが、動かしても日本語環境では動かな
いことがある
• WMIやPowerShellなどで取れる キーワードが日本語
化されている...
その他の注意点

①英語版のサンプルコードの利用の
注意点
②VMMから取れる情報の注意点

28
②VMMから取れる情報の注意点
• VMMからは欲しいタイミングで欲しい情報が取得できない
ことがある
• 一見、欲しい情報が取得できたかに見えても、古い情報
だったり、期待したものと異なる場合がある

• 基本的にはHyper-Vから情報を取...
IIJ GIOのハイパーバイザーを
2008R2から2012へ移行する

30
DDTKからSPFへ移行
2014年1月、パフォーマンスの向上や最大メモリサイズの増
加といった新機能を利用すべく、IIJ GIOのWindowsのハイ
パ ー バ イ ザ ー を Windows Server 2008R2 か ら Windo...
SPFの構成

クラスター
VM VM VM VM

VM VM VM VM

VM VM VM VM

Hyper-V

Hyper-V

Hyper-V

Windows Server

Windows Server

Windows Se...
DDTKからSPFへ移行

SPF(Service Provider Foundation)とは
System Centerを制御し、仮想環境を構築するためのアプリ
ケーションでDDTKの後継とされる(が、サンプルコードでは
なく、実行可能なア...
ODataとは
• Open Data Protocol の 略 で 、 マ イ ク ロ ソ フ ト が 提 唱 す る
HTTP/RESTベースのプロトコル
• データの取得/更新などの操作を行うことができる
• デ ー タ の 操 作 に ...
SPFの構成

クラスター
VM VM VM VM

VM VM VM VM

VM VM VM VM

Hyper-V

Hyper-V

Hyper-V

Windows Server

Windows Server

Windows Se...
SPFを使ったVM操作サンプル( VMのプロパティを更新)
1:Uri uri = new
Uri("http://server:8091/SC2012/VMM/microsoft.management.odat
a.svc/");
2:VMM...
SPFの大きな問題

①実装済みの機能が不足している

②Hyper-Vを直接制御できない

③fabricが管理する情報が取得できない

37
SPFの大きな問題

①実装済みの機能が不足している
エンドユーザ向けポータルの開発を主眼にした機能体系
クラウド管理者向けの機能がかなり不足している
(VMをキーにしたリソース検索など)

②Hyper-Vを直接制御できない

③fabric...
実装済みの機能が不足している問題

不足した機能はPowerShellのスクリプトを
改修/追加することで実装
既存の機能を改修する場合はSPFを構成するPowerShellスクリプトを
ここでは
改修
オブジェクトクラスのこと

パラメータの...
実装済みの機能が不足している問題

エンティティの定義

Subsystem.mof

エンティティの振る舞いの定義

Subsystem.xml

具体的な処理

SPFを構成
するファイル

PowerShellスクリプト
40
エンティティの定義(Subsystem.mof)(抜粋)
以下のようにエンティティを定義する
新しいエンティティやプロパティを追加する場合、変更する
class VMM_VirtualHardDisk
{
String Accessibilit...
実装済みの機能が少ない問題に対して

エンティティの定義

Subsystem.mof

エンティティの振る舞いの定義

Subsystem.xml

具体的な処理

SPFを構成
するファイル

PowerShellスクリプト
42
エンティティの振る舞いの定義(Subsystem.xml)(抜粋)
以下のようにXML形式でエンティティごとに呼び出す
PowerShellスクリプトとパラメータを定義
仮想ハードディスクのリソースのエンティティの振る舞いの定義
定義するエンテ...
SPFの大きな問題

①実装済みの機能が少ない

②Hyper-Vを直接制御できない
VMMからでは制御できない機能もある

③fabricが管理する情報が取得できない

44
Hyper-Vを直接制御できない問題に対して

PowerShellはWMIが使えるので
(作りこめば)これを使うことで制御可能
VM VM VM VM

VM VM VM VM

VM VM VM VM

Hyper-V

Hyper-V

...
SPFの大きな問題

①実装済みの機能が少ない

②Hyper-Vを直接制御できない

③fabricが管理する情報が取得できない
fabricはSystem Center 2012で初めて導入された概念で、VMMの仮想環境を
構成するリソース...
fabric関連の情報が取得できない問題に対して

C#/VB.NETのDLLをPowerShellから
呼び出すことで、情報が取得できる
VM VM VM VM

VM VM VM VM

VM VM VM VM

Hyper-V

Hype...
その他の問題点

①エンティティに定義されている
プロパティが取れない
②WCF(Webサービス)と
OData(REST)の差異
③WMIの名前空間が変更されている

48
その他の問題点

①エンティティに定義されている
プロパティが取れない
②WCF(Webサービス)と
OData(REST)の差異
③WMIの名前空間が変更されている

49
①エンティティに定義されているプロパティが取れない
• エンティティのプロパティの定義はあるのに、取得すると
値が空になっていることがある
• 大抵の場合はPowerShellのスクリプトを修正すれば取れ
るようになるが、fabric系の値のよ...
その他の問題点

①エンティティに定義されている
プロパティが取れない
②WCF(Webサービス)と
OData(REST)の差異
③WMIの名前空間が変更されている

51
②WCF(Webサービス)とOData(REST)の差異
• WCF Webサービスでは、パラメータ付きでAPIを呼び出す
だけの単純なモデルであったが、ODataではエンティティに
対して4つの操作を行うモデルであるため、アクセス方法

が完...
その他の問題点

①エンティティに定義されている
プロパティが取れない
②WCF(Webサービス)と
OData(REST)の差異
③WMIの名前空間が変更されている

53
③WMIの名前空間が変更されている
• WMIを呼び出す際、Windows2008と2012とでは、 名前
空 間 が 異 な り ( virtualization¥v2 ) 、 既 存 の 名 前 空 間
(virtualization)の使...
WMIのサンプルコード

Windows2012では
virtualization¥v2名前空間
を使用

1:ManagementScope ms = new
2:
ManagementScope(@"server¥root¥virtuali...
まとめ ~ Windows仮想マシンをソフトウェアで制御するための注意点
① VMMの制御はHyper-Vとのタイムラグに
注意する
② Hyper-Vの制御を安全に行うにはジョブを
確認する
③ SPFではfabricの値が取得できないので、...
参考
Hyper-V WMI Classes
http://msdn.microsoft.com/en-us/library/cc136986(v=vs.85).aspx

Dynamic Datacenter toolkit for Host...
ご清聴ありがとうございました
お問い合わせ先 IIJインフォメーションセンター
TEL:03-5205-4466 (9:30~17:30 土/日/祝日除く)
info@iij.ad.jp
http://www.iij.ad.jp/

58
Upcoming SlideShare
Loading in …5
×

Windows仮想マシンをソフトウェアで制御する~その実践と対策~

1,353 views

Published on

Published in: Technology
  • Be the first to comment

Windows仮想マシンをソフトウェアで制御する~その実践と対策~

  1. 1. Windows仮想マシンをソフトウェアで制御する ~その実践と対策~ 14-D-2 #devsumiD 株式会社インターネットイニシアティブ プラットフォーム本部プラットフォームサービス部 プラットフォーム開発課 山内 徹 1
  2. 2. 本日のアジェンダ • 本セッションの骨子 • 自己紹介 • Windowsで構築する仮想環境 • IIJ GIOのハイパーバイザーとしてWin2008R2を導入する • IIJ GIOのハイパーバイザーを2008R2から2012へ移行する • まとめ • 参考 2
  3. 3. 本セッションの骨子 弊社がWindowsベースの仮想環境の管理システム を開発する中で、仮想マシンを制御する過程で発生し た問題と解決策について解説するものです 3
  4. 4. 自己紹介 プロフィール • 1997年日本電気ソフトウェア(現NECソフト)入社 • 開発やったりSIやったり色々 • 2002年以降、.NET関連の仕事が主業務になる • 2007年アイアイジェイテクノロジ-(現IIJ)入社 • やはり.NETに関係する仕事が多い • 2009年以降、IIJが提供するクラウドサービス“IIJ GIO”の立ち上げ にあたり、“IIJ GIOコンポーネントサービスVシリーズ(Windows)”の 開発等に従事 テクノロジーフィールド • サーバ/クライアントなど.NET Frameworkによる開発全般 • OS/ミドルウェアのコントロール 4
  5. 5. Windowsを使った標準的な仮想環境 5
  6. 6. Windowsを使った標準的な仮想環境 クラスター VM VM VM VM VM VM VM VM VM VM VM VM Hyper-V Hyper-V Hyper-V Windows Server Windows Server Windows Server VMM Windows Server • Windows Server上で仮想マシン(VM)を実行するハイパーバ イザーが“Hyper-V” • 複数のHyper-Vを集中管理する管理ツールが “System Center Virtual Machine Manager”(以後、VMM) 6
  7. 7. IIJ GIOのハイパーバイザーとして Win2008R2を導入する 7
  8. 8. DDTKを使う 2010年5月、弊社のIIJ GIOでWindowsOSの ベースサーバを提供するにあたり、そのハイ パ ー バ イ ザ ー と し て Windows Server 2008R2を採用した 短期間で高品質な管理システムを開発するに あたり、DDTKを使うことで実現できると期待 された 8
  9. 9. DDTKの構成 クラスター VM VM VM VM VM VM VM VM VM VM VM VM Hyper-V Hyper-V Hyper-V Windows Server Windows Server Windows Server PowerShellで コントロール WMI WMI VMM WMI VMM HyperV 制御用 制御用 WCF IIS Windows Server DDTK (Dynamic Datacenter Toolkit for Hosters) クライアント 9
  10. 10. DDTKを使う DDTK (Dynamic Datacenter Toolkit for Hosters)とは Hyper-VやSystem Centerを制御し、仮想環境を構築するた めのベースとなるサンプルコード C#ベースのソースコードが提供されており、 自由に改変可能 Webサービス(WCFで実装)で外部とのやり取りを行う 弊社の利用開始時点では Hyper-V制御用とVMM制御用で分かれていた 10
  11. 11. Windowsを使った標準的な仮想環境 クラスター VM VM VM VM VM VM VM VM VM VM VM VM Hyper-V Hyper-V Hyper-V Windows Server Windows Server Windows Server VMM Windows Server 11
  12. 12. DDTKの構成 クラスター VM VM VM VM VM VM VM VM VM VM VM VM Hyper-V Hyper-V Hyper-V Windows Server Windows Server Windows Server PowerShellで コントロール VMM WMI WMI WMI VMM HyperV 制御用 制御用 WCF IIS Windows Server DDTK クライアント 12
  13. 13. WCFとは • Windows Communication Foundationの略 • .NETの通信テクノロジーの一つ • 構成ファイル(*.config)を使ってプロトコルや細かいパラメータ 等を定義できる • DDTKのインタフェースの実装に使用されている DDTKは WCFに対応した サーバアプリケーション として実装されている WCF アプリケーション WCF IIS WCFクライアント プログラムコード .NET Windows Server 13
  14. 14. DDTKの構成 クラスター VM VM VM VM VM VM VM VM VM VM VM VM Hyper-V Hyper-V Hyper-V Windows Server Windows Server Windows Server PowerShellで コントロール VMM WMI WMI WMI VMM HyperV 制御用 制御用 WCF IIS Windows Server DDTK クライアント 14
  15. 15. WMIとは • Windows Management Instrumentationの略でWindowsをプロ グラムコードで管理する機能 • 本セッションではHyper-Vをプログラムから制御するのに使用 VM VM VM VM Hyper-V Windows Server WMI プログラムコード .NET,VBScript, PowerShell 15
  16. 16. WMIのサンプルコード • コンポーネントごとに分類された名前空間の中にいくつかのク ラスが定義されており、そのクラスのインスタンスに対してプロ パティを読み取ったり、メソッドを実行したりして制御する • インスタンスの検索にSQLに似た言語が使える virtualization名前空間 を使用 1:ManagementScope ms = new ManagementScope(@"server¥root¥virtualization", co); 2:ManagementObjectSearcher mos = new ManagementObjectSearcher(ms, 3: new ObjectQuery( 4: "select * from Msvm_ComputerSystem where "+ 5: "Caption='仮想マシン' and ElementName='VM'")); 6:ManagementObjectCollection moc = mos.Get(); vitualization名前空間の Msvm_ComputerSystem クラスからインスタンスを検索 16
  17. 17. WMIの名前空間 • WMIの名前空間は、WMIクラスのフォルダのようなもので、 管理対象のコンポーネントごとに分かれている 例 名前空間:CIMV2 CIM_Action MSFT_WmiEssEvent Win32_DiskPartition ・ ・ ・ WindowsOSを管理 名前空間:virtualization 名前空間:MSCluster Msvm_ComputerSystem Msvm_ConcreteJob Msvm_StorageJob ・ ・ ・ Hyper-V (Windows2008R2以前)を管理 MSCluster_Cluster MSCluster_AvailableDisk MSCluster_Event ・ ・ ・ Failover Clusterを管理 17
  18. 18. DDTKの構成 クラスター VM VM VM VM VM VM VM VM VM VM VM VM Hyper-V Hyper-V Hyper-V Windows Server Windows Server Windows Server PowerShellで コントロール WMI WMI WMI VMM VMM HyperV 制御用 制御用 WCF IIS Windows Server DDTK クライアント 18
  19. 19. DDTKの調査 DDTKのマニュアルには、前提とするシステム構成と インストール方法しか書かれていない DDTKのソースコードにはほとんどコメントがない 何ができて何ができないのか調査を実施 結果、以下のことが判明 多くの機能が不足している ISOファイルのDVDマウント VMからVHDファイルへのマウント VMMの強制更新 など 19
  20. 20. 不足機能を作りこみ DDTKに不足している機能を作りこまなければならない 不足機能の作りこみで以下のポリシーとした どちらでも実装可能な機能は 「VMM制御用」のDDTKに実装する VMM Hyper V Power Shell WMI VMM 制御用 PowerShellの方が WMIに比べて 実装しやすいため HyperV 制御用 動作が安定しない DDTK こちらを採用したら 不安定 20
  21. 21. DDTKの構成 クラスター VM VM VM VM VM VM VM VM VM VM VM VM Hyper-V Hyper-V Hyper-V Windows Server Windows Server Windows Server PowerShellで コントロール VMM WMI WMI WMI VMM HyperV 制御用 制御用 WCF IIS Windows Server こちらを使用したら不安定 クライアント 21
  22. 22. VMMの更新遅延 原因 Hyper-Vの情報がVMMへ反映するのにかなり(数分~数十分)の タイムラグがある 大きなタイムラグがあると、例えば、VMが停止している前提の操作を起動 中に行ってしまうことなどの問題が発生する Refresh-VMという強制的に更新するコマンドで更新することは可 能だが、無闇に使うとVMが壊れることがある VMM Hyper V Power Shell WMI VMM 制御用 HyperV 制御用 DDTK どちらでも実装可能な機能は Hyper-V対応に実装する こちらに 実装 に方針を変更 22
  23. 23. Hyper-V制御用での実装の問題 Hyper-V制御用での実装で以下の問題が発生 VMが壊れたとVMMに誤認識されることがある 強制的に更新することで解消することもあるが、Hyper-Vのジョブが実行 中の場合、VMが本当に壊れることがある 処理が非同期の場合がある Hyper-Vの 処理の単位 前の処理が完了しないうちに次の処理のリクエストを受け付け、前の処理 を中断して後の処理を実行することがある VMM Hyper-Vのジョブの 状態を確認しながら VMを制御する 壊れたと 判断される Hyper V Power Shell WMI VMM 制御用 HyperV 制御用 非同期で 処理される DDTK 23
  24. 24. DDTKの構成 クラスター VM VM VM VM VM VM VM VM VM VM VM VM Hyper-V Hyper-V Hyper-V Windows Server Windows Server Windows Server PowerShellで コントロール VMM WMI WMI WMI VMM HyperV 制御用 制御用 WCF IIS Windows Server こちらを使用する クライアント ただし、ジョブの状態は確認 24
  25. 25. その他の注意点 ①英語版のサンプルコードの利用の 注意点 ②VMMから取れる情報の注意点 25
  26. 26. その他の注意点 ①英語版のサンプルコードの利用の 注意点 ②VMMから取れる情報の注意点 26
  27. 27. ①英語版のサンプルコードの利用の注意点 • DDTK自身を始め、サンプルコードを検索すると、海外製で あることが多いが、動かしても日本語環境では動かな いことがある • WMIやPowerShellなどで取れる キーワードが日本語 化されている(“VirtualMachine”→“仮想マシン”など)こと があり、これキーワードとして検索しているコードは検索に 引っかからずに正常に処理されないことがある • サンプルコードが動かない場合、まずは中で検索している キーワードが日本語化されていないかを確認し、必要に応 じて置換する ソースコードで キーワードを検索している 箇所に注意! 27
  28. 28. その他の注意点 ①英語版のサンプルコードの利用の 注意点 ②VMMから取れる情報の注意点 28
  29. 29. ②VMMから取れる情報の注意点 • VMMからは欲しいタイミングで欲しい情報が取得できない ことがある • 一見、欲しい情報が取得できたかに見えても、古い情報 だったり、期待したものと異なる場合がある • 基本的にはHyper-Vから情報を取得 するようにし、 VMMから情報を取得する際にはVMM独自の情報に 限るなど、十分注意して使用するようにする 数分~数十分に (特に順番系は注意!) NICのアタッチの 順番など DDTK 古い情報 順番が異なる 一回更新 VMM Hyper-V データベースに 情報を保持 29
  30. 30. IIJ GIOのハイパーバイザーを 2008R2から2012へ移行する 30
  31. 31. DDTKからSPFへ移行 2014年1月、パフォーマンスの向上や最大メモリサイズの増 加といった新機能を利用すべく、IIJ GIOのWindowsのハイ パ ー バ イ ザ ー を Windows Server 2008R2 か ら Windows Server 2012ベースへ移行した 最新の機能を取り入れ、且つ、短期間で高品質なシステムを 開発するため、SPFを使うことにした Hyper-V 2.0 Hyper-V 3.0 WS2008R2 WS2012 VMM 2008R2 2012 VMM WS2008R2 WS2012 31
  32. 32. SPFの構成 クラスター VM VM VM VM VM VM VM VM VM VM VM VM Hyper-V Hyper-V Hyper-V Windows Server Windows Server Windows Server System Center VirtualMachineManager PowerShell スクリプト SPF OData IIS Windows Server Windows Server DDTKと異なり 独立したサーバ クライアント 32
  33. 33. DDTKからSPFへ移行 SPF(Service Provider Foundation)とは System Centerを制御し、仮想環境を構築するためのアプリ ケーションでDDTKの後継とされる(が、サンプルコードでは なく、実行可能なアプリケーション) インタフェースはOData(Open Data Protocol)を使用 処理がPowerShellで記述されており、追加/変更が可能 33
  34. 34. ODataとは • Open Data Protocol の 略 で 、 マ イ ク ロ ソ フ ト が 提 唱 す る HTTP/RESTベースのプロトコル • データの取得/更新などの操作を行うことができる • デ ー タ の 操 作 に は Get ( 値 の 取 得 ) ,Post ( リ ソ ー ス の 作 成),Put(値の更新),Delete(リソースの削除)の4つのHTTPメ ソッドを実行することにより制御 OData(SPF)でVMを操作する例 Getメソッド Postメソッド VM VM VMの情報 VMを作成 Deleteメソッド Putメソッド VM VMの設定を変更 VM VMを削除 34
  35. 35. SPFの構成 クラスター VM VM VM VM VM VM VM VM VM VM VM VM Hyper-V Hyper-V Hyper-V Windows Server Windows Server Windows Server System Center VirtualMachineManager PowerShell スクリプト SPF OData IIS Windows Server Windows Server クライアント 35
  36. 36. SPFを使ったVM操作サンプル( VMのプロパティを更新) 1:Uri uri = new Uri("http://server:8091/SC2012/VMM/microsoft.management.odat a.svc/"); 2:VMM vmm = new SPF.VMM(uri); 3: 4:// 対象のVMを取得する 5:var vm = (from v in vmm.VirtualMachines where v.ID == vmId && v.StampId == stampId select v).Single(); 6: 7:// 値を更新する 8:vm.Description = "This is test VM."; 9:vmm.UpdateObject(vm); 10:vmm.SaveChanges(); 36
  37. 37. SPFの大きな問題 ①実装済みの機能が不足している ②Hyper-Vを直接制御できない ③fabricが管理する情報が取得できない 37
  38. 38. SPFの大きな問題 ①実装済みの機能が不足している エンドユーザ向けポータルの開発を主眼にした機能体系 クラウド管理者向けの機能がかなり不足している (VMをキーにしたリソース検索など) ②Hyper-Vを直接制御できない ③fabricが管理する情報が取得できない 38
  39. 39. 実装済みの機能が不足している問題 不足した機能はPowerShellのスクリプトを 改修/追加することで実装 既存の機能を改修する場合はSPFを構成するPowerShellスクリプトを ここでは 改修 オブジェクトクラスのこと パラメータの追加や、新しいエンティティを定義する場合にはODataの仕 様に従って2つのファイルSubsystem.mofおよびSubsystem.xmlを修 正 エンティティの定義 Subsystem.mof エンティティの振る舞いの定義 Subsystem.xml 具体的な処理 SPFを構成 するファイル PowerShellスクリプト 39
  40. 40. 実装済みの機能が不足している問題 エンティティの定義 Subsystem.mof エンティティの振る舞いの定義 Subsystem.xml 具体的な処理 SPFを構成 するファイル PowerShellスクリプト 40
  41. 41. エンティティの定義(Subsystem.mof)(抜粋) 以下のようにエンティティを定義する 新しいエンティティやプロパティを追加する場合、変更する class VMM_VirtualHardDisk { String Accessibility; DateTime AddedTime; String Description; String Directory; Boolean Enabled; [Key, Required, EmbeddedInstance("EDM_GUID")] string ID; [EmbeddedInstance("EDM_GUID")] string JobGroupId; SInt64 MaximumSize; DateTime ModifiedTime; String Name; [EmbeddedInstance("VMM_UserAndRole")] String Owner; String OwnerSid; [EmbeddedInstance("EDM_GUID")] string ParentDiskId; 41
  42. 42. 実装済みの機能が少ない問題に対して エンティティの定義 Subsystem.mof エンティティの振る舞いの定義 Subsystem.xml 具体的な処理 SPFを構成 するファイル PowerShellスクリプト 42
  43. 43. エンティティの振る舞いの定義(Subsystem.xml)(抜粋) 以下のようにXML形式でエンティティごとに呼び出す PowerShellスクリプトとパラメータを定義 仮想ハードディスクのリソースのエンティティの振る舞いの定義 定義するエンティティ <Class> <Name>VMM_VirtualHardDisk</Name> <CmdletImplementation> Getを定義する <Query> ことを宣言 <Cmdlet>Get-GIOVirtualHardDisk2</Cmdlet> <FieldParameterMap> <Field> 呼び出すPowerShell <FieldName>ID</FieldName> スクリプト <ParameterName>ID</ParameterName> この例ではVirtualHardDisk </Field> に対して <Field> Getを実行した際に呼ばれる <FieldName>VMId</FieldName> スクリプト <ParameterName>VMId</ParameterName> </Field> 43
  44. 44. SPFの大きな問題 ①実装済みの機能が少ない ②Hyper-Vを直接制御できない VMMからでは制御できない機能もある ③fabricが管理する情報が取得できない 44
  45. 45. Hyper-Vを直接制御できない問題に対して PowerShellはWMIが使えるので (作りこめば)これを使うことで制御可能 VM VM VM VM VM VM VM VM VM VM VM VM Hyper-V Hyper-V Hyper-V Windows Server Windows Server Windows Server WMI WMI WMI PowerShell スクリプト VMM SPF IIS Windows Server Windows Server 45
  46. 46. SPFの大きな問題 ①実装済みの機能が少ない ②Hyper-Vを直接制御できない ③fabricが管理する情報が取得できない fabricはSystem Center 2012で初めて導入された概念で、VMMの仮想環境を 構成するリソースを一括管理する機能 仮想ネットワークアダプタのMACアドレスは fabricのMACアドレスプールから割り当てられているので MACアドレスも取得できない 46
  47. 47. fabric関連の情報が取得できない問題に対して C#/VB.NETのDLLをPowerShellから 呼び出すことで、情報が取得できる VM VM VM VM VM VM VM VM VM VM VM VM Hyper-V Hyper-V Hyper-V Windows Server Windows Server Windows Server WMI WMI WMI fabric VMM DLL PowerShell スクリプト SPF IIS Windows Server Windows Server 47
  48. 48. その他の問題点 ①エンティティに定義されている プロパティが取れない ②WCF(Webサービス)と OData(REST)の差異 ③WMIの名前空間が変更されている 48
  49. 49. その他の問題点 ①エンティティに定義されている プロパティが取れない ②WCF(Webサービス)と OData(REST)の差異 ③WMIの名前空間が変更されている 49
  50. 50. ①エンティティに定義されているプロパティが取れない • エンティティのプロパティの定義はあるのに、取得すると 値が空になっていることがある • 大抵の場合はPowerShellのスクリプトを修正すれば取れ るようになるが、fabric系の値のように、単純には 取得で きない場合がある • 設計の際には、クラスの仕様からだけでなく、実際に値が 取得できるか、事前に確認する エンティティ:VirtualNetworkAdapter ID VirtualNetwork MACAddress XXXX-XXX・・・ ・・・・・・・ null Get SPF 値が取れて いない 50
  51. 51. その他の問題点 ①エンティティに定義されている プロパティが取れない ②WCF(Webサービス)と OData(REST)の差異 ③WMIの名前空間が変更されている 51
  52. 52. ②WCF(Webサービス)とOData(REST)の差異 • WCF Webサービスでは、パラメータ付きでAPIを呼び出す だけの単純なモデルであったが、ODataではエンティティに 対して4つの操作を行うモデルであるため、アクセス方法 が完全に異なる • 2008から2012へ移行する場合、まじめに設計すると 、 インタフェース部分の改修にかなりの手間がかかること を覚悟する DDTKの場合 接続オブジェクト インスタンス生成 API呼び出し 接続を閉じる SPFの場合(更新) 接続オブジェクト 操作対象の インスタンス生成 エンティティを取得 エンティティの プロパティ変更 更新の指示 コミット 52
  53. 53. その他の問題点 ①エンティティに定義されている プロパティが取れない ②WCF(Webサービス)と OData(REST)の差異 ③WMIの名前空間が変更されている 53
  54. 54. ③WMIの名前空間が変更されている • WMIを呼び出す際、Windows2008と2012とでは、 名前 空 間 が 異 な り ( virtualization¥v2 ) 、 既 存 の 名 前 空 間 (virtualization)の使用は推奨されなくなった • 新規でWindows2012用に開発する場合は問題ないが、 2008から移行する場合、virtualization名前空間で(大体は 動くが)動かない場合もあるので、注意が必要 virtualization 名前空間 virtualization 名前空間 推奨されない Hyper-V 3.0 (WS2012) Hyper-V 2.0 (WS2008R2) プログラムコード virtualization¥v2 名前空間 プログラムコード 54
  55. 55. WMIのサンプルコード Windows2012では virtualization¥v2名前空間 を使用 1:ManagementScope ms = new 2: ManagementScope(@"server¥root¥virtualization¥v2", co); 3:ManagementObjectSearcher mos = new 4:ManagementObjectSearcher(ms, 5: new ObjectQuery( 6: "select * from Msvm_ComputerSystem where "+ 7: "Caption='仮想マシン' and ElementName='VM'")); 8:ManagementObjectCollection moc = mos.Get(); 55
  56. 56. まとめ ~ Windows仮想マシンをソフトウェアで制御するための注意点 ① VMMの制御はHyper-Vとのタイムラグに 注意する ② Hyper-Vの制御を安全に行うにはジョブを 確認する ③ SPFではfabricの値が取得できないので、 C#などで書いたDLLをPowerShellから呼 び出して取得する 56
  57. 57. 参考 Hyper-V WMI Classes http://msdn.microsoft.com/en-us/library/cc136986(v=vs.85).aspx Dynamic Datacenter toolkit for Hosters DDTK for Hostersホームページ http://archive.msdn.microsoft.com/ddc DDTK for Hostersサンプルコードのダウンロード http://code.msdn.microsoft.com/DDTKH-Sample-Code-d0cb4152 SPF Service Provider Foundationのアーキテクチャの概要 http://technet.microsoft.com/ja-jp/library/jj642897.aspx VMMコレクションズリファレンス http://msdn.microsoft.com/ja-JP/library/jj906381.aspx Virtual PC guy http://blogs.msdn.com/b/virtual_pc_guy/ 57
  58. 58. ご清聴ありがとうございました お問い合わせ先 IIJインフォメーションセンター TEL:03-5205-4466 (9:30~17:30 土/日/祝日除く) info@iij.ad.jp http://www.iij.ad.jp/ 58

×