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

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

on

  • 3,704 views

 

Statistics

Views

Total Views
3,704
Views on SlideShare
3,693
Embed Views
11

Actions

Likes
13
Downloads
122
Comments
0

1 Embed 11

https://twitter.com 11

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第ニ部 OpenStackの内部構造 レッドハット株式会社 中井悦司 / Etsuji Nakai Senior Solution Architect and Cloud Evangelist v1.1 2013/07/29
    • Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造 自己紹介  中井悦司(なかいえつじ) – Twitter @enakai00  日々の仕事 – Senior Solution Architect and Cloud Evangelist at Red Hat K.K. 企業システムでオープンソースの活用を希望される お客様を全力でご支援させていただきます。  昔とった杵柄 – 素粒子論の研究(超弦理論とか) – 予備校講師(物理担当) – インフラエンジニア(Unix/Linux専門) 2 好評発売中!
    • Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造 目次       OpenStackの主要コンポーネント Novaを構成するサービス群 Cinderを構成するサービス群とドライバの実装例 Neutronの仮想ネットワークとOVS Pluginの実装例 問題判別のヒント 参考資料 (*) 本資料は2013年7月時点のRDO(Grizzly)、および、Red Hat OpenStack v3.0に基づく情報を提供しています。 3
    • Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造 OpenStackの主要コンポーネント 4
    • 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
    • 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
    • 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を導入 ・・・
    • Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造 Novaを構成するサービス群 8
    • 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
    • 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
    • Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造 Cinderを構成するサービス群と ドライバの実装例 11
    • 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
    • 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
    • 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
    • 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)
    • Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造 NFSドライバの利用  Cinderが標準提供するNFSドライバでは、NFSサーバ上にディスクイメージファイルを作成 して、ComputeノードからNFSマウントして利用します。 Nova Compute Cinder ディスクイメージ ファイル作成 VMインスタンス NFSサーバ /dev/vdb 仮想ディスク ・・・ Linux KVM ・・・ NFSマウント 16
    • Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造 NeutronのPlugin構造と OVS Plugin の実装例 17
    • 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
    • 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 メッセージキュー経由の通信 仮想スイッチ作成
    • 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で制御)
    • 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
    • Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造 問題判別のヒント 22
    • 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
    • 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の構成確認
    • Red Hat OpenStack徹底解説!〜第ニ部 OpenStackの内部構造 参考資料 25
    • 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
    • Thank you