Upload
etsuji-nakai
View
3.986
Download
1
Embed Size (px)
DESCRIPTION
Citation preview
エンジニア向け夏期特別講座
〜 Red Hat OpenStack徹底解説!
レッドハット株式会社中井悦司 / Etsuji NakaiSenior Solution Architectand Cloud Evangelistv1.1 2013/07/29
第ニ部 OpenStackの内部構造
2
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
自己紹介
好評発売中!
中井悦司(なかいえつじ)– Twitter @enakai00
日々の仕事– Senior Solution Architect and
Cloud Evangelist at Red Hat K.K.企業システムでオープンソースの活用を希望されるお客様を全力でご支援させていただきます。
昔とった杵柄– 素粒子論の研究(超弦理論とか)– 予備校講師(物理担当)– インフラエンジニア(Unix/Linux専門)
3
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
目次
OpenStackの主要コンポーネント Novaを構成するサービス群 Cinderを構成するサービス群とドライバの実装例 Neutronの仮想ネットワークとOVS Pluginの実装例 問題判別のヒント 参考資料
(*) 本資料は2013年7月時点のRDO(Grizzly)、および、Red Hat OpenStack v3.0に基づく情報を提供しています。
4
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
OpenStackの主要コンポーネント
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 : 課金情報収集
–
6
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
OpenStackのアーキテクチャ
各モジュールは、REST APIによりクライアントからの指示を受け付けます– プログラムコードからの呼び出しによる環境操作の自動化への対応が前提– Horizon(標準のGUIコンソール)を使用せずに、独自のGUIと連携させることも可能
仮想マシンイメージ
NovaCompute
NovaCompute
Glance Horizon Neutron
管理ネットワーク
LUN
仮想ネットワーク作成
仮想マシン起動
ブロックボリューム提供(iSCSI)
認証サーバ
テンプレートイメージ保存
MySQL
NetworkNode
NovaCompute
Cinder
Keystone
Swift
メッセージキュー
パブリックネットワーク
クライアントPC
Webコンソールアクセステンプレートイメージ検索
テンプレートダウンロード
QPID
データベース
LUNLUN
Nova
7
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
・・・
Private Network
eth0 eth1 eth2
Public Network
VMNAT
br-int
br-ex
Controller/Networkノード
br-priv
シンプルな物理ノード構成例
eth0 eth1
br-int
br-priv
VM
eth0 eth1
br-int
br-priv
Computeノード
Open vSwitch
IP IP IP
管理接続用IP
Nova ComputeとNeutron L2-pluginを導入
Nova Compute以外のすべてのコンポーネントを導入
8
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
Novaを構成するサービス群
9
Red Hat Enterprise Linux OpenStack Platform
Novaを構成するサービス群 Nova Schedulerから呼び出す「Compute Driver」によって、複数ハイパーバイザに対応します。 Controllerノード上のサービスは並列稼働(ロードバランス)によるスケールアウト/冗長化が可能です。
/var/lib/nova/instances/_base
qcow2ベースイメージ
qcow2オーバーレイファイル
qcow2オーバーレイファイル
仮想マシンインスタンス
/var/lib/nova/instances/<ID>
オーバーレイ
仮想マシンインスタンス
テンプレートイメージダウンロード
Glance
起動
Computeノード
Nova API
インスタンス起動指示
Compute Driverインスタンスを起動するノードを決定
Nova Conductor
リソース情報確認
Nova Compute
特定のハイパーバイザに対応するためのドライバ
Database
DBアクセスのProxyサービス
リソース情報更新
Controllerノード REST APIを提供
ダウンロードしたイメージはキャッシュして再利用
Nova Scheduler
メッセージキュー経由の通信
Libvirt
10
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
公開鍵の埋め込み処理
Nova Computeは仮想マシンインスタンスを起動する前に、ローカルにあるディスクイメージ内の「 /root/.ssh/authorized_keys」に指定された公開鍵を書き込みます。
公開鍵の情報はメタデータからも参照できるので、Cloud-Initによって公開鍵認証の設定を行うことも可能です(*)。
–典型的には、rootによる直ログインを禁止した上で、ログイン用のユーザを作成して、そのユーザに対して公開鍵認証を設定します。
(*) ブロックボリュームから起動する場合は、Nova Computeによる公開鍵の書き込みに失敗するので、Cloud-Initに よる公開鍵設定が必須となります。
$ curl http://169.254.169.254/2009-04-04/meta-data/public-keys/0/openssh-keySsh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA5W2IynhVezp+DpN11xdsY/8NOqeF8r7eYqVteeWZSBfnYhKn8D85JmByBQnJ7HrJIrdMvfTYwWxi+swfFlryG3A+oSll0tT71FLAWnAYz26ML3HccyJ7E2bD66BSditbDITKH3V66oN9c3rIEXZYQ3A+GEiA1cFD++R0FNKxyBOkjduycvksB5Nl9xb3k6z4uoZ7JQD5J14qnooM55Blmn2CC2/2KlapxMi0tgSdkdfnSSxbYvlBztGiF3M4ey7kyuWwhE2iPBwkV/OhANl3nwHidcNdBrAGC3u78aTtUEwZtNUqrevVKM/yUfRRyPRNivuGOkvjTDUL/9BGquBX9Q== enakai@kakinoha
メタデータから公開鍵を参照する例
11
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
Cinderを構成するサービス群とドライバの実装例
12
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
ブロックボリュームの使い方と対応するAPI
データ領域
③スナップショット作成
④スナップショットを複製して新たなブロックボリュームを作成
②仮想マシンインスタンスに接続してデータ領域として使用
データ領域
他の仮想マシンインスタンスに再接続可能(同時接続は不可)
①新規ブロックボリュームを作成
OS領域 OS領域
OS領域
テンプレートイメージを複製してブロックボリュームを作成
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連携の全体像
Nova Compute Cinder
VMインスタンス
/dev/vdb 仮想ディスク
Linux KVM
/dev/sdX iSCSI LUN
ストレージ装置
LUNの作成・公開を指示
iSCSI SWInitiator
iSCSI Target
ブロックストレージは、典型的には、iSCSIストレージ装置のLUNとして用意されます。 Cinderは外部のiSCSIストレージ装置をコントロールする役割を持ちます。
14
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
Cinderを構成するサービス群
Cinder API
Controllerノード REST APIを提供
Cinder-Volume
Cinder Scheduler
ストレージ装置ごとに対応するVolume DriverがLUNの構成を実施します。 Nova Computeは、ホストLinuxに接続したLUNを仮想ディスクとしてVMにアタッチします。 Cinderを構成するサービスは並列稼働(ロードバランス)によるスケールアウト/冗長化が可能です。
メッセージキュー経由の通信
Volume Driver
特定のストレージ装置に対応するためのドライバ
ボリュームの特性に応じたドライバの選択
ストレージ装置
LUN
iSCSI接続
Nova Compute
iSCSIでホストLinuxに接続したLUNを仮想ディスク
としてVMにアタッチ
ドライバの指示に従ってLUNを用意して公開
Nova API Volume attach/detachREST APIを提供
Database
ボリュームの情報を共有
15
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
LVM/tgtdによるサンプル実装
Nova Compute Cinder
VMインスタンス
/dev/vdb 仮想ディスク
Linux KVM
/dev/sdX iSCSI LUN
iSCSI SWInitiator
iSCSI SWTarget (tgtd)
Cinderが標準提供するLVMドライバでは、LVMで作成した論理ボリュームをtgtdでiSCSI LUNとして公開します。スナップショットの作成には、LVMのスナップショットを利用します(差分領域のサイズは、元のLVと同じサイズ)。
VG: cinder-volumes
LV
論理ボリュームを作成して、iSCSI LUNとして公開
16
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
NFSドライバの利用
Nova Compute Cinder
VMインスタンス
/dev/vdb 仮想ディスク
Linux KVM
NFSサーバ
ディスクイメージファイル作成
Cinderが標準提供するNFSドライバでは、NFSサーバ上にディスクイメージファイルを作成して、ComputeノードからNFSマウントして利用します。
・・・
NFSマウント
・・・
17
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
NeutronのPlugin構造とOVS Plugin の実装例
18
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
Neutronの仮想ネットワーク
Neutronは次のような「論理コンポーネント」を定義するAPIを提供します。– パブリックネットワーク:外部通信用のネットワーク・セグメント– プライベートネットワーク:プライベートネットワーク用の仮想的なL2スイッチ– サブネット:上記のL2スイッチに割り当てるサブネット(IPアドレスの範囲)– 仮想ルータ:上記のネットワーク間を相互接続する仮想的なルータ
利用者が上記のAPIを通じて仮想ネットワークを定義していくと、対応する仮想ネットワークの実体がPlugin形式の外部Agentによって構成されていきます。
仮想スイッチ192.168.101.0/24
プロジェクトA専用ルータ
外部ネットワーク
プロジェクトB専用ルータ
仮想スイッチ192.168.102.0/24
19
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
NeutronのPlugin構造
Computeノード
Quantum Server
L2 Agent
Controllerノード REST APIを提供
Network Controller
L3 Agent
DHCP Agent
Metadata AgentNova API
L2 Agent
仮想ルータ作成
仮想スイッチ作成
プライベートIP割り当て
メタデータアクセスProxy
仮想スイッチ作成
インスタンスメタデータ取得
「169.254.169.254:80」へのアクセスを横取りして処理
Quantum Serverからの論理的な指示を受けたAgent群が具体的な構成を行う(実装はAgentに依存) Quantum Serverは並列稼働(ロードバランス)によるスケールアウト/冗長化が可能 Network Controller側のスケールアウト/冗長化はAgentに依存
メッセージキュー経由の通信
20
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
Open vSwitch Agentによる実装例
仮想ルータのPublic側GW IP
仮想スイッチを作成すると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接続を開始。
eth2
br-ex
eth1
iptablesでNAT接続
仮想ルータのPrivate側GW IP
Open vSwitch
仮想スイッチごとにこのセットを作成(Network Namespaceが分かれる)
eth1
VM1 VM2
br-int br-int
接続仮想スイッチ毎にVLANをマッピング
(Open Flowで制御)VLAN Trunk
仮想スイッチ毎にVLANをマッピング
(Open Flowで制御)
Computeノード
Networkノード
dnsmasq dnsmasq
br-priv
Public Network
br-priv
21
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
Metadata Agentの動作
Networkノード上のiptablesにより、「169.254.169.254:80」宛のパケットを同ノード上のMetadata Proxyに転送して処理します。
ゲストOSの「/etc/sysconfig/network」に「NOZEROCONF=yes」の指定が必要です。–これが無いとAPIPAの仕様により、「169.254.0.0/16」宛のパケットが外部にルーティ
ングされないためにメタデータの取得に失敗します。
# ip netns listqrouter-b35f6433-c3e7-489a-b505-c3be5606a643qdhcp-1a4f4b41-3fbb-48a6-bb12-9621077a4f92qrouter-86654720-d4ff-41eb-89db-aaabd4b13a35qdhcp-f8422fc9-dbf8-4606-b798-af10bb389708
# 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 9697root 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-b505-c3be5606a643.log --log-dir=/var/log/quantum
仮想ルータを含むNetwork Namespace
22
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
問題判別のヒント
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 : L3 Agent– /etc/quantum/dhcp_agent.ini : DHCP Agent– /etc/quantum/plugin.ini : L2 Agent– /etc/cinder/cinder.conf : Cinder– /etc/cinder/volumes/* : 公開中のiSCSI Target
ソースコード– /usr/lib/python2.*/site-packages/(nova|quantum|cinder|glance|horizon)– /usr/share/openstack-dashboard
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の構成確認– tgt-admin -s : iSCSI Targetの構成確認
25
Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造
参考資料
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-the-
hood
※ OpenStackの動作原理を理解する上では、Linuxの基礎知識が必須となります。
Thank you