Upload
kazuhisa-hara
View
3.276
Download
1
Embed Size (px)
DESCRIPTION
09/06/20 OSC2009-Hokkaidoにて発表したプレゼン資料です。
Citation preview
1
仮想マシンの動的プロビジョニング&複雑なネットワーク構築
Kazuhisa Hara
2
Agenda
アジェンダ
1. 仮想マシン提供自動化/管理するシステムを組むには?
1. 複雑なネットワークを構築する
3
Virtualization…?
おさらい– そもそもサーバ仮想化とは?
• 1台のサーバコンピュータを、あたかも複数台のコンピュータであるかのように論理的に分割し、それぞれに別のOSやアプリケーションソフトを動作させる事
Windows
Solaris
Linux
Windows
仮想化
4
Virtualization Products
主なサーバ仮想化製品– VMWare
• 市場を牽引• vSphere(ESX)
– Hyper-V• Microsoft Windows2008• Windows 2008R2(Windows7相当)で Hyper-V2.0が搭載予定
– Xen• Citrix XenServer• Oracle VM• Sun xVM• OSS Xen.org
– KVM• RedHat
– Other• Solalis LDoms• openVZ etc…
5
Main
今回のメインはXenです。
6
Story
Story
7
Delusion
仮想化を使ってプライベートクラウドな環境を構築したいね– もっと言ってしまえば、AmazonEC2みたいなの
8
For example
Why ?–例えば…
•社内で新しいプロジェクトが走り出した!•検証/開発用にサーバが必要•物理的にサーバを発注したら最低数日、決済とか色々考えると最悪数週間掛かることも…
9
Model answers
仮想サーバのプールがあれば、数分~数時間で簡単に提供できるよ
コスト下がるよ!
仮想化いいよ!仮想化しよう!!
仮想化かわいいよ仮想化
10
It tend to do…
ここまでありがちな話
11
Problem
課題– もちろん簡単に仮想マシンを払いだす仕組みが必要
• 1個ずつ作成するのは非効率– 例え作れても管理が大変
» 自動化できるものは自動化しよう
管理•特にOSS仮想化ソリューションはここが弱い
– ロール管理– 統合的な管理– 容易なアクセス– ユーザアクション直結のソリューション– その他その他…
12
Necessary
課題をクリアする為には?
– 仮想マシン提供自動化/管理するシステムがまず必要• 使えるものは使う• ないなら作る
– ある程度狭い範囲とはいえ、アクセス権を配慮したネットワーク構築が不可欠• 『ネットワークの仮想化』とかどうなのよ• 仮想マシンのネットワークは、どうなっているのか?
13
Will
自動化できるポータルが欲しいポータル
WebServer
利用期間
2009 ▼ 05 ▼年 月 20 ▼ 日 - 2009 ▼ 05 ▼年 月 30 ▼
日
必要リソース
CentOS5.3 ▼
▼
OS 台数 メモリ ディスク 利用テンプレート
2 台 1000 M 10 G 選択
台 1000 M 10 G
リソース確認
申請
▼ 台 1000 M 10 G 選択
利用者
▼所属 利用者メールアドレス
※プロビジョニング完了後に利用者/管理者にメール通知 (利用期間、アカウント名、中間サーバIPアドレス、ゲストOSのIPアドレス等)
選択
14
Topic:1
今日のお話しその1
15
Means
何を使えば作れる?– Xen、KVMのツールはコマンドラインでも叩ける– xmlでゲストマシンの情報を定義
• Webサーバの裏でShellexecさせる?– それなら言語は特に問わない。Perl, PHP, Ruby ,Java…– でもShellexecは正直美しくない– 何よりホストマシンとWebサーバの切り分けが出来ない
実は標準ライブラリがある!– libvirt
• これを使って自動プロビジョニング/管理ツールを作る
16
libvirt
libvirt–平たく言うと、仮想化ホスト(≒ハイパーバイザ)とやり取りが出来るAPIライブラリ
–沢山の仮想マシンに対応• Xen, QEMU, KVM, openVZ, VirtualBox etc…
–言語バインディング• C, C#, Python, Java, Perl, Ruby etc…•標準APIはCとPython
–セキュリティ認証• SSH, TSL & X.509, SASL & kerberos
17
Range
libvirtで出来る範囲–ホスト(Dom-0)の情報取得–ゲスト一覧–ゲストの操作
•作る、消す、編集する、などなど–ネットワークの操作–ストレージの操作
– virt-managerはこのライブラリを使っている– virshコマンドもこのライブラリを使っている
18
virt-manager
virt-manager– 確かに便利だけど、かゆいところに手が届かない– VirtualCenterほどの機能はまだない
19
libvirt’s Version
バージョンによってできる事がすごく左右される– リモートホストを管理をするなら、0.4.x以上が必須
• 最新は現在0.6.4• RHEL5.3は0.3.3, SLES11は0.4.6
– ローカルマシンの管理だけなら0.4以下でも何とかなる• 接続の問題• リモートの場合、SSHやTSL等で認証(ここの実装具合)
20
libvirt xen driver(local)
libvirt xenドライバ(ローカル)
libvirt
xend xenstored hypervisor
C, C#, Python, Java, Perl, Ruby etc…
21
libvirt xen driver(remote)
libvirt xenドライバ(リモート)
libvirt
xend xenstored hypervisor
C, C#, Python, Java, Perl, Ruby etc…
SSH, SASL…
libvirt
22
Sample
libvirt Python API Bindings
import libvirt
conn = libvirt.open(‘xen+ssh://[email protected]/’)
dom0 = conn.lookupByName("Domain-0")
print dom0.info()
23
Future
このlibvirtを使って開発していけば俺々仮想マシン管理ツールが作れます
– ポイント• ゲストOSのテンプレートを用意する
– 1らかインストールするのは面倒– 出来合いのものを用意してコピーするのが王道
» (ライセンスには注意)
• 出来れば共有ストレージは欲しい– マイグレーションやネットワーク構成を考えると必要になってくる– 最悪普通のサーバをiSCSI専用サーバに仕立て上げても良い
• ある程度以上の規模(ゲスト10台以上、とか)を想定するならVLANを切れるSWが欲しいところ
24
Existing product
機能面で参考になるプロダクト
– Karesansui•日本製のWebベース仮想マシン管理ツール
– CentOS5.3に対応– 自動プロビジョニングまではできない– libvirt使ってます
» 独自に0.4系をパッケージングしている
– Enomaly•同じくWebベースの管理ツール
– 対応ホストのバージョンが若干古い» Ubuntu8.0.4, CentOS5.2
– libvirt0.4系を自前で入れる必要あり
25
etc…
他には
– Oracle VM (ちょっと毛色が違うけど)
• Webベースの管理マネージャが秀逸•テンプレート管理/ストレージ/ネットワークの設定•システムとしては理想に近い• Oracle Enterprise Linuxが無償で使える
– RHEL,CentOSも使える– 別にOracleDBを使わなくても、純粋に仮想化ソリューションとして使える
– Eucalyptus•まさにEC2を自前でもてるソリューション
– ただし、まだ複数クラスタを持てないなど制約がある
26
Topic:2
今日のお話しその2
27
MultiNetwork
Xenで複雑なネットワークを構築してみる– Bonding
•「チーミング」とも言う•複数のNICを1つのNICで束ねる•主に信頼性の確保
– TagVLAN• IEEE 802.1Qで標準規格化されている• LANのMACフレームにVLAN番号(タグを挿入)し、論理的にネットワークの切り離し/接続を行える
•複数のSWをまたがったVLANを設定できる•物理的なポートの節約も出来る
28
MultiNetwork
参考–検証環境
• CentOS5.3 x86-64• Xen 3.1.2-128.1.10.el5
– Xen 3.2/3.3系ではネットワークの設定が若干異なる– 最新は3.4.x– 正直古い
– SLES11だと Xen3.3系が使える» 設定方法が異なる» YaSTでごにょごにょ出来るので多少楽が出来る
29
Bonding(Normal)
Bonding(普通の考え方)
Applic ation
マシン - 物理的な配線- 論理的な配線
30
Bonding(Xen)
Bonding(Xenで使う場合)
Domain -U
xenbr0
Domain-0
pbond0
bond0
Xen環境ではbond0 にあたるインタフェースは pbond0 に変更される
31
Merit
仮想化でBondingを使うメリット– 考え方は物理マシンで組むときと基本同じ– 冗長/信頼性– 勿論Domain-U内でBondingすることも出来る
– xenbrの前でbondingを組むと…• Domain-Uは、自分のNICがbondingの線であることを知らない
– つまり、極端な話modprobeする必要がない– 特殊なカーネルモジュールや設定が不要
Domain-U
なんか良く知らないけど、ネットワークが冗長構成らしいです
32
TagVLAN(Normal)
TagVLAN(普通の考え方)
VLAN10
20
20
30VLAN10
VLAN10, VLAN20
33
TagVLAN(Xen)
TagVLAN(Xenで繋ぐ場合)
Domain-Uはタグをまったく
意識しないで繋げる
でも物理NICから出るパケットにはタグがついている
34
TagVLAN(Xen)
TagVLAN(Xenで使う場合)
Domain -U
xenbr0
Domain-0
xenbr1xenbr3
eth0.10
eth0.20
eth0.30
eth0
仮想的に作り出したVLANにブリッジを割り振ってやる
35
Merit
仮想化でTagVLANを使うメリット– 考え方は物理マシンで組むときと基本同じ– 柔軟なネットワーク体系の構築– 使用者にVLANを意識させなくとも制御できる– 独立したネットワークを任意に増やすことが出来る
– xenbrの前でTagVLANを組むと…• Dom-Uは、自分のNICがVLANの線であることを知らない
– つまり、極端な話modprobeする必要がない– 特殊なカーネルモジュールや設定が不要
Domain-U
なんか良く知らないけど、ネットワークがVLANになってるらしい
です
36
Demon's gate
課題–管理/自動プロビジョニング環境開発で、一番の鬼門はネットワーク• DHCPで適当に払いだせる環境なら、まぁなんとか
– ゲストOSのIP/ホスト名は、ゲストOSが立ち上がった後でしか編集できない
•ゲストOSは雨の後のタケノコのように増えて行く…•そのうち追いきれなくなる
•やっぱ管理が重要– ネットワーク体系を色々切り離そうとすると、物理NICが足りなくなってくる
37
How should I do?
解決策の例– 決め打ちで凌ぐ
• ゲストマシンを作り出すタイミングで、ゲストのMACアドを控えておく• 控えた値をDHCPサーバに送り、MAC縛りでDHCPを払い出す
– ここまで頑張って自動化する
– VLANを使って良しなに振り分ける• ただしVLANのトランクポート追加や変更はネットワークの再起動が必要なので、設計段階から気をつける
• Domain-UレベルでのVLANはなるべくしない– 管理が更に煩雑になる
– プラスアルファ:信頼性を求められるケースはBondingを使う• ただしBondingもDomain-Uレベルではしない
– 問題があったときの切り分けが難しい
38
brings it together.
まとめ
• 自動化を効率よく実現するために– libvirtを巧く使う
• 段々成熟してきた• バージョンには十分注意
– 何が出来る/出来ないかを理解する– もしくは既にあるものを流用する/hackする
• 動的プロビジョニングをするだけじゃ意味がない– 管理超重要
• 自分が楽をするためにがんばる– ネットワーク
• 悩みどころ• ポリシー次第
39
Thanks!!
ご静聴ありがとうございました。
質問等あれば是非どうぞ!