Contenu connexe Similaire à エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造 Similaire à エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造 (20) Plus de Etsuji Nakai (20) エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造1. エンジニア向け夏期特別講座
〜 Red Hat OpenStack徹底解説!
第ニ部 OpenStackの内部構造
レッドハット株式会社
中井悦司 / Etsuji Nakai
Senior Solution Architect
and Cloud Evangelist
v1.1 2013/07/29
2. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
自己紹介
中井悦司(なかいえつじ)
– Twitter @enakai00
日々の仕事
– Senior Solution Architect and
Cloud Evangelist at Red Hat K.K.
企業システムでオープンソースの活用を希望される
お客様を全力でご支援させていただきます。
昔とった杵柄
– 素粒子論の研究(超弦理論とか)
– 予備校講師(物理担当)
– インフラエンジニア(Unix/Linux専門)
2
好評発売中!
3. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
目次
OpenStackの主要コンポーネント
Novaを構成するサービス群
Cinderを構成するサービス群とドライバの実装例
Neutronの仮想ネットワークとOVS Pluginの実装例
問題判別のヒント
参考資料
(*) 本資料は2013年7月時点のRDO(Grizzly)、および、Red Hat OpenStack v3.0に基づく情報を提供しています。
3
5. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
OpenStackの主要コンポーネント
機能別にソフトウェアをモジュール化して開発が進められています。
– Swift : オブジェクトストレージ
• Amazon S3相当
– Nova : 仮想マシンの配置決定と起動・停止処理
– Glance : 仮想マシンイメージの管理
• バックエンドにSwiftを使用、その他のストレージにも対応
– Cinder : ブロックボリュームの提供
• 標準(サンプル)実装では、Linux LVM + iSCSIソフトウェアターゲットを使用
• 外部のiSCSIストレージ装置をバックエンドにすることも可能
– Keystone : 統合認証機能
– Netutron : 仮想ネットワーク管理機能(Quantumから改名)
• 仮想ネットワークの作成を外部のPluginモジュールに移譲
• 標準(サンプル)実装では、Linux brdige、もしくは、Open vSwitchを使用
– Horizon : GUIコンソールのサンプル実装
上記のコアコンポーネント以外のサブプロジェクトもあります。
– Heat : 仮想マシンインスタンスのオーケストレーション
• Amazon CloudFormation互換
– Ceilometer : 課金情報収集
5
6. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
OpenStackのアーキテクチャ
各モジュールは、REST APIによりクライアントからの指示を受け付けます
– プログラムコードからの呼び出しによる環境操作の自動化への対応が前提
– Horizon(標準のGUIコンソール)を使用せずに、独自のGUIと連携させることも可能
クライアントPC
パブリックネットワーク
テンプレート
イメージ保存
Webコンソールアクセス
テンプレート
イメージ検索
Network
Node
仮想ネットワーク作成
Swift
Glance
Horizon
Nova
Neutron
Nova
Nova
Nova
Compute
Compute
Compute
管理ネットワーク
仮想マシン
イメージ
テンプレート
ダウンロード
Keystone
6
認証サーバ
QPID
仮想マシン起動
MySQL
メッセージキュー データベース
ブロックボリューム提供
(iSCSI)
Cinder
LUN
LUN
LUN
7. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
シンプルな物理ノード構成例
Open vSwitch
Public Network
Private Network
eth0
IP
管理接続用IP
eth1
eth2
br-ex
br-priv
br-int
NAT
Controller/Networkノード
Nova Compute以外の
すべてのコンポーネントを導入
7
eth0
IP
eth1
br-priv
eth0
IP
eth1
br-priv
br-int
br-int
VM
VM
Computeノード
Nova Computeと
Neutron L2-pluginを導入
・・・
9. Red Hat Enterprise Linux OpenStack Platform
Novaを構成するサービス群
Nova Schedulerから呼び出す「Compute Driver」によって、複数ハイパーバイザに対応します。
Controllerノード上のサービスは並列稼働(ロードバランス)によるスケールアウト/冗長化が可能です。
Controllerノード
REST APIを提供
Computeノード
特定のハイパーバイザに
対応するためのドライバ
Nova Compute
Nova API
インスタンスを起動
するノードを決定
Compute Driver
Libvirt
インスタンス
起動指示
Nova Scheduler
起動
仮想マシン
インスタンス
qcow2
オーバーレイファイル
リソース情報確認
仮想マシン
インスタンス
qcow2
オーバーレイファイル
リソース情報更新
Nova Conductor
DBアクセスの
Proxyサービス
Database
Glance
9
/var/lib/nova/instances/<ID>
オーバーレイ
テンプレートイメージ
ダウンロード
メッセージキュー経由の通信
ダウンロードしたイメージは
キャッシュして再利用
qcow2
ベースイメージ
/var/lib/nova/instances/_base
10. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
公開鍵の埋め込み処理
Nova Computeは仮想マシンインスタンスを起動する前に、ローカルにあるディスクイメージ
内の「 /root/.ssh/authorized_keys」に指定された公開鍵を書き込みます。
公開鍵の情報はメタデータからも参照できるので、Cloud-Initによって公開鍵認証の設定を
行うことも可能です(*)。
– 典型的には、rootによる直ログインを禁止した上で、ログイン用のユーザを作成して、そ
のユーザに対して公開鍵認証を設定します。
メタデータから公開鍵を参照する例
$ curl http://169.254.169.254/2009-04-04/meta-data/public-keys/0/openssh-key
Ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA5W2IynhVezp+DpN11xdsY/8NOqeF8r7eYqVteeWZSBfnYhKn
8D85JmByBQnJ7HrJIrdMvfTYwWxi+swfFlryG3A+oSll0tT71FLAWnAYz26ML3HccyJ7E2bD66BSditbDITK
H3V66oN9c3rIEXZYQ3A+GEiA1cFD++R0FNKxyBOkjduycvksB5Nl9xb3k6z4uoZ7JQD5J14qnooM55Blmn2C
C2/2KlapxMi0tgSdkdfnSSxbYvlBztGiF3M4ey7kyuWwhE2iPBwkV/OhANl3nwHidcNdBrAGC3u78aTtUEwZ
tNUqrevVKM/yUfRRyPRNivuGOkvjTDUL/9BGquBX9Q== enakai@kakinoha
(*) ブロックボリュームから起動する場合は、Nova Computeによる公開鍵の書き込みに失敗するので、Cloud-Initに
よる公開鍵設定が必須となります。
10
12. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
ブロックボリュームの使い方と対応するAPI
OS領域
データ領域
OS領域
他の仮想マシンインスタンスに
再接続可能(同時接続は不可)
データ領域
②仮想マシンインスタンスに
接続してデータ領域として使用
④スナップショットを複製して
新たなブロックボリュームを作成
①新規ブロックボリュームを作成
③スナップショット作成
テンプレート
イメージ
OS領域
テンプレートイメージを複製して
ブロックボリュームを作成
12
OS領域
Cinder API
– Volume create/delete/list/show
(Create from snapshot, image)
– Snapshot create/delete/list/show
Nova API
– Volume attach/detach
13. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
Nova/Cinder連携の全体像
ブロックストレージは、典型的には、iSCSIストレージ装置のLUNとして用意されます。
Cinderは外部のiSCSIストレージ装置をコントロールする役割を持ちます。
Nova Compute
VMインスタンス
Cinder
LUNの作成・公開を指示
ストレージ装置
/dev/vdb
仮想ディスク
Linux KVM
iSCSI Target
/dev/sdX
iSCSI LUN
iSCSI SW
Initiator
13
14. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
Cinderを構成するサービス群
ストレージ装置ごとに対応するVolume DriverがLUNの構成を実施します。
Nova Computeは、ホストLinuxに接続したLUNを仮想ディスクとしてVMにアタッチします。
Cinderを構成するサービスは並列稼働(ロードバランス)によるスケールアウト/冗長化が可能です。
REST APIを提供
Controllerノード
Cinder API
特定のストレージ装置に
対応するためのドライバ
ドライバの指示に従って
LUNを用意して公開
Cinder-Volume
ストレージ装置
Volume Driver
ボリュームの
情報を共有
Cinder Scheduler
ボリュームの特性に
応じたドライバの選択
Database
メッセージキュー経由の通信
iSCSI接続
iSCSIでホストLinuxに
接続したLUNを仮想ディスク
としてVMにアタッチ
Nova Compute
REST APIを提供
14
LUN
Nova API
Volume attach/detach
15. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
LVM/tgtdによるサンプル実装
Cinderが標準提供するLVMドライバでは、LVMで作成した論理ボリュームをtgtdでiSCSI LUNとして公開
します。スナップショットの作成には、LVMのスナップショットを利用します(差分領域のサイズは、元
のLVと同じサイズ)。
Nova Compute
Cinder
論理ボリュームを作成して、
iSCSI LUNとして公開
VMインスタンス
VG: cinder-volumes
/dev/vdb
仮想ディスク
LV
Linux KVM
/dev/sdX
iSCSI LUN
iSCSI SW
Initiator
15
iSCSI SW
Target (tgtd)
16. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
NFSドライバの利用
Cinderが標準提供するNFSドライバでは、NFSサーバ上にディスクイメージファイルを作成
して、ComputeノードからNFSマウントして利用します。
Nova Compute
Cinder
ディスクイメージ
ファイル作成
VMインスタンス
NFSサーバ
/dev/vdb
仮想ディスク
・・・
Linux KVM
・・・
NFSマウント
16
18. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
Neutronの仮想ネットワーク
Neutronは次のような「論理コンポーネント」を定義するAPIを提供します。
– パブリックネットワーク:外部通信用のネットワーク・セグメント
– プライベートネットワーク:プライベートネットワーク用の仮想的なL2スイッチ
– サブネット:上記のL2スイッチに割り当てるサブネット(IPアドレスの範囲)
– 仮想ルータ:上記のネットワーク間を相互接続する仮想的なルータ
利用者が上記のAPIを通じて仮想ネットワークを定義していくと、対応する仮想ネットワー
クの実体がPlugin形式の外部Agentによって構成されていきます。
外部ネットワーク
プロジェクトA
専用ルータ
仮想スイッチ
192.168.101.0/24
18
プロジェクトB
専用ルータ
仮想スイッチ
192.168.102.0/24
19. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
NeutronのPlugin構造
Quantum Serverからの論理的な指示を受けたAgent群が具体的な構成を行う(実装はAgentに依存)
Quantum Serverは並列稼働(ロードバランス)によるスケールアウト/冗長化が可能
Network Controller側のスケールアウト/冗長化はAgentに依存
Network Controller
Controllerノード
REST APIを提供
仮想ルータ作成
L2 Agent
Quantum Server
L3 Agent
仮想スイッチ作成
DHCP Agent
Nova API
インスタンス
メタデータ取得
Metadata Agent
プライベートIP割り当て
メタデータアクセスProxy
「169.254.169.254:80」への
アクセスを横取りして処理
Computeノード
L2 Agent
19
メッセージキュー経由の通信
仮想スイッチ作成
20. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
Open vSwitch Agentによる実装例
仮想スイッチを作成するとL2 Agentは、「br-int」のポートとVLANをマッピング。DHCP Agentは、
dnsmasqを起動して対応するVLANのポートをListenさせる。
仮想ルータを作成して外部ネットワークに接続すると、L3 Agentは、「br-ex」にPublic側のGW IPを持
つポートを作成。
仮想スイッチを仮想ルータに接続すると、L3 Agentは、「br-int」にPrivate側のGW IPを持つポートを
作成して、Pirvate-Pubilc間でのNAT接続を開始。
Public Network
Open vSwitch
Networkノード
仮想スイッチごとにこのセットを作成
(Network Namespaceが分かれる)
eth1
br-ex
dnsmasq
仮想ルータのPublic側GW IP
dnsmasq
Computeノード
VM1
VM2
iptablesで
NAT接続
br-int
br-priv
仮想スイッチ毎に
VLANをマッピング
(Open Flowで制御)
20
eth2
br-int
仮想ルータの
Private側GW IP
VLAN Trunk
br-priv
eth1
接続仮想スイッチ毎に
VLANをマッピング
(Open Flowで制御)
21. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
Metadata Agentの動作
Networkノード上のiptablesにより、「169.254.169.254:80」宛のパケットを同ノード上
のMetadata Proxyに転送して処理します。
# ip netns list
qrouter-b35f6433-c3e7-489a-b505-c3be5606a643
qdhcp-1a4f4b41-3fbb-48a6-bb12-9621077a4f92
qrouter-86654720-d4ff-41eb-89db-aaabd4b13a35
qdhcp-f8422fc9-dbf8-4606-b798-af10bb389708
仮想ルータを含む
Network Namespace
# ip netns exec qrouter-b35f6433-c3e7-489a-b505-c3be5606a643 iptables -t nat -L
...
Chain quantum-l3-agent-PREROUTING (1 references)
target
prot opt source
destination
REDIRECT
tcp -- anywhere
169.254.169.254
tcp dpt:http redir ports 9697
...
# ps -ef | grep 9697
root
63055
1 0 7月09 ?
00:00:00 python /bin/quantum-ns-metadata-proxy
--pid_file=/var/lib/quantum/external/pids/b35f6433-c3e7-489a-b505-c3be5606a643.pid
--router_id=b35f6433-c3e7-489a-b505-c3be5606a643 --state_path=/var/lib/quantum
--metadata_port=9697 --verbose --log-file=quantum-ns-metadata-proxyb35f6433-c3e7-489a-b505c3be5606a643.log --log-dir=/var/log/quantum
ゲストOSの「/etc/sysconfig/network」に「NOZEROCONF=yes」の指定が必要です。
– これが無いとAPIPAの仕様により、「169.254.0.0/16」宛のパケットが外部にルーティ
ングされないためにメタデータの取得に失敗します。
21
23. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
ログファイルと設定ファイル/ソースコード
ログファイル
– /var/log/(nova|quantum|cinder|glance|horizon)
• 各コンポーネントのログ
– /var/log/messages
• dnsmasqのログなどは、ここから確認
– /var/log/secure
• 内部的にsudoを多様しているので、sudoに起因する問題をsudoログから確認
設定ファイル
– /etc/nova/nova.conf
: Nova
– /etc/quantum/quantum.conf
: Quantum
– /etc/quantum/l3_agent.ini
– /etc/quantum/dhcp_agent.ini
: L3 Agent
– /etc/quantum/plugin.ini
: L2 Agent
– /etc/cinder/cinder.conf
– /etc/cinder/volumes/*
: Cinder
: DHCP Agent
: 公開中のiSCSI Target
ソースコード
– /usr/lib/python2.*/site-packages/(nova|quantum|cinder|glance|horizon)
– /usr/share/openstack-dashboard
23
24. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
確認コマンド
サービス一覧
– systemctl list-unit-files | grep -E “(openstack|quantum)”
: OpenStack関連サービス一覧(Fedora18)
– chkconfig --list | grep -E “(openstack|quantum)” : OpenStack関連サービス一覧(RHEL6)
OVS関連コマンド
– ovs-vsctl : Open vSwitchの構成確認
– ovs-ofctl : Open vSwitchに定義されたOpen Flowエントリの確認
– brctr show : インスタンスとbr-intはLinux bridgeを挟んで接続している(iptablesによるセキュリ
ティグループのフィルタリングポイントを提供するため)
Network Namespace関連コマンド
– ip netns list : 定義済みnetnsの確認
– ip netns exec <netns id> bash : 指定のNamespaceに入って構成確認
– ip addr show : Namespace内部のIP割り当て状態確認
libvirt関連コマンド
– virsh : 稼働中の仮想マシンインスタンスの状態・構成確認
LVMとiSCSI関連コマンド
– pvs/vgs/lvs : LVMの構成確認
24
– tgt-admin -s : iSCSI Targetの構成確認
26. Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
参考資料
OpenStack Official Documents
– http://docs.openstack.org/
OpenStack Cinder Deep Dive Grizzly Release
– https://wiki.openstack.org/w/images/3/3b/Cinder-grizzly-deep-dive-pub.pdf
How Quantum configures Virtual Networks under the Hood?
– http://www.slideshare.net/enakai/how-quantum-configures-virtual-networks-under-thehood
※ OpenStackの動作原理を理解する上では、Linuxの基礎知識が必須となります。
26