27
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! レッドハット株式会社 中井悦司 / Etsuji Nakai Senior Solution Architect and Cloud Evangelist v1.1 2013/07/29 第ニ部 OpenStackの内部構造

エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

エンジニア向け夏期特別講座

〜 Red Hat OpenStack徹底解説!

レッドハット株式会社中井悦司 / Etsuji NakaiSenior Solution Architectand Cloud Evangelistv1.1 2013/07/29

第ニ部 OpenStackの内部構造

Page 2: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

2

Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造

自己紹介

好評発売中!

中井悦司(なかいえつじ)– Twitter @enakai00

日々の仕事– Senior Solution Architect and

Cloud Evangelist at Red Hat K.K.企業システムでオープンソースの活用を希望されるお客様を全力でご支援させていただきます。

昔とった杵柄– 素粒子論の研究(超弦理論とか)– 予備校講師(物理担当)– インフラエンジニア(Unix/Linux専門)

Page 3: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

3

Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造

目次

OpenStackの主要コンポーネント Novaを構成するサービス群 Cinderを構成するサービス群とドライバの実装例 Neutronの仮想ネットワークとOVS Pluginの実装例 問題判別のヒント 参考資料

(*) 本資料は2013年7月時点のRDO(Grizzly)、および、Red Hat OpenStack v3.0に基づく情報を提供しています。

Page 4: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

4

Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造

OpenStackの主要コンポーネント

Page 5: エンジニア向け夏期特別講座 〜 Red Hat 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 : 課金情報収集

Page 6: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

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

Page 7: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

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以外のすべてのコンポーネントを導入

Page 8: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

8

Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造

Novaを構成するサービス群

Page 9: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

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

Page 10: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

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

メタデータから公開鍵を参照する例

Page 11: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

11

Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造

Cinderを構成するサービス群とドライバの実装例

Page 12: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

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

Page 13: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

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ストレージ装置をコントロールする役割を持ちます。

Page 14: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

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

ボリュームの情報を共有

Page 15: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

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として公開

Page 16: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

16

Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造

NFSドライバの利用

Nova Compute Cinder

VMインスタンス

/dev/vdb 仮想ディスク

Linux KVM

NFSサーバ

ディスクイメージファイル作成

Cinderが標準提供するNFSドライバでは、NFSサーバ上にディスクイメージファイルを作成して、ComputeノードからNFSマウントして利用します。

・・・

NFSマウント

・・・

Page 17: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

17

Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造

NeutronのPlugin構造とOVS Plugin の実装例

Page 18: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

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

Page 19: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

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に依存

メッセージキュー経由の通信

Page 20: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

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

Page 21: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

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

Page 22: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

22

Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造

問題判別のヒント

Page 23: エンジニア向け夏期特別講座 〜 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

Page 24: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

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の構成確認

Page 25: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

25

Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造

参考資料

Page 26: エンジニア向け夏期特別講座 〜 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の基礎知識が必須となります。

Page 27: エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造

Thank you