h26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:openstack入門
DESCRIPTION
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナーで使用した資料です。 http://www.e-side.co.jp/openlab/wg/140729.htmlTRANSCRIPT
ver1.0 2014/7/26Etsuji Nakai
(Twitter @enakai00)
openstackOpen source software to build public and private clouds.
OpenStack入門
2
目次
■ OpenStackのこれまで
■ OpenStackの機能概要
■ セキュリティ機能とストレージ機能
■ プロジェクト管理機能
■ OpenStackの特徴と主要コンポーネント
■ コンポーネントのAPI操作
注意:本テキストで扱うOpenStackは、RDO(Havana)がベースとなります。
3
OpenStackのこれまで
4
OpenStackとは?
■ OpenStackは、Amazon EC2/S3相当のクラウドインフラを構築するためのオープンソースソフトウェアです。
- マルチテナント型のIaaS (Infrastructure as a Service) 環境を提供します。
- 類似のオープンソースには、CloudStack、Eucalyptusなどがあります。
■ 2010年末に「米RackSpace社」と「NASA」が共同で、OpenStackプロジェクトを立ちあげて、開発をスタートしました。
- RackSpaceが自社開発で利用していた「Swift」(S3相当の機能を提供)とNASAが作りかけていた「Nova」(EC2相当の機能を提供)をオープンソース化して提供して、それらをベースにコミュニティモデルでの開発を開始しました。
単なる仮想化管理ツールではなく、「パブリッククラウドと同等の機能」を
実現することがOpenStackの目的
5
これまでの開発状況■ これまで、年に2〜3回程度のメジャーバージョンアップが行われています。
■ 当初は、RackSpace社が開発を主導していましたが、2012年にOpenStackの開発を支える公式の非営利団体である「OpenStack Foudation」が設立されました。
2011 2012 2013 2014
Austin2010/10/21
Bexar2011/02/03
Cactus2011/04/15
Diablo2011/09/22
Essex2012/04/05
Folsom2012/09/27
Grizzly2013/04/04
Havana2013/10/17
「最低限動くもの」を目指して地道に開発
EC2/S3相当機能がほぼ完成
OpenStack Foudation設立
Icehouse2014/04/17
6
(参考) OpenStack Foundationの設立
http://sourceforge.jp/magazine/12/04/13/0359223
7
OpenStack Foundation Platinum Members
https://www.openstack.org/join(2014/01の情報)
8
OpenStack開発への貢献企業
http://activity.openstack.org/dash/releases/index.html?data_dir=data/havana
開発者の所属企業別のOpenStack Havana変更数
開発者の所属企業別のOpenStack Havana問題解決数
9
OpenStackディストリビューション
■ コミュニティで開発されたOpenStackのソースコードを元にして、独自のインストーラを組み合わせて簡単にインストールできるようにパッケージ化された「OpenStackディストリビューション」があります。
- 複数の企業/団体から、いくつかのディストリビューションが提供されています。
■ 開発者向けのOpenStackディストリビューション
- DevStack : 最新のソースコードをダウンロードしてOpenStack環境を構成するシェルスクリプト群が提供されています。
■ その他の無償で利用できるOpenStackディストリビューション
- Debian Linux、openSUSE、Ubuntu Linux : OpenStackパッケージを標準で同梱
- RDO : Red Hatが提供するRHEL / Fedoraで利用可能なディストリビューション
10
RDOの特徴
OpenStack Foundation
■ 主な活動内容
- RHEL/Fedora用のRPMパッケージを提供● http://repos.fedorapeople.org/repos/openstack/
- Puppetベースのインストーラ「Packstack」を提供
- QAフォーラムを運営(Red Hatの開発者が回答してくれることもあります。)
OpenStackを創る人々のコミュニティ RHEL/FedoraでOpenStackを
使う人々のコミュニティ
http://openstack.redhat.com
11
OpenStackの機能概要
12
OpenStackが提供する環境■ OpenStackのユーザは、WebコンソールやREST APIを用いて、次のようなコンピューティングリソースを利用します。
- 仮想ネットワーク
- 仮想マシンインスタンス
- ブロックボリューム
■ 各ユーザは特定の「プロジェクト」に所属します。
- プロジェクト内でリソースを共有します。
- プロジェクト全体でのリソース使用量の上限設定、リソース使用状況のレポーティングなどが可能です。
データ領域 ブロックボリューム
仮想ルータ
仮想スイッチ
外部ネットワーク
プロジェクト環境
OpenStackユーザ
OS領域 仮想マシンインスタンス
13
OpenStackの仮想ネットワークモデル■ プロジェクトごとに仮想ルータを用いて、プライベートなネットワークを構成します。
- 仮想ルータの背後に任意の数の仮想スイッチを作成して、接続します。
- それぞれの仮想スイッチは、プライベートIPの独立したサブネットを持ちます。
■ 仮想マシンインスタンス起動時に、接続する仮想スイッチを選択します。
- DHCPでプライベートIPアドレスが割り当てられます。
- 同じプロジェクトの仮想マシンインスタンス間は、プライベートIPで通信できます。
仮想スイッチ192.168.101.0/24
プロジェクトA仮想ルータ
外部ネットワーク
プロジェクトB仮想ルータ
仮想スイッチ192.168.102.0/24
14
プライベートIPとフローティングIP■ 外部ネットワークと通信する際は、仮想マシンインスタンスに「フローティングIP」を割り当てます。
- 外部ネットワークのサブネット上で、フローティングIPとして利用可能なIPアドレスをプールしておきます。
- 仮想ルータ上で、フローティングIPとプライベートIPのNATが行われます。
- フローティングIPを割り当てない場合でも、仮想マシンインスタンスから外部ネットワークへの接続は可能です。(仮想ルータのIPアドレスを代表IPとして、マスカレード接続します。)
Webサーバー DBサーバー
プライベートIP プライベートIP
フローティングIP
外部ネットワークからはフローティングIPで接続
インスタンス同士はプライベートIPで接続
15
仮想マシンインスタンスの起動■ 仮想マシンインスタンスを起動する際は、次の項目を指定します。
- インスタンスタイプ
- テンプレートイメージ (*)
- 接続する仮想ネットワーク
- セキュリティグループ
- キーペア
外部ネットワーク
OS領域テンプレート
イメージ
複製
複数ネットワーク接続も可能
セキュリティグループ
形式 説明
raw フラットなイメージファイル
AMI/AKI/ARI Amazon EC2が利用する形式
qcow2 Linux KVMが利用する形式
VDI VirtualBoxが利用する形式
VMDK VMwareが利用する形式
VHD Hyper-Vが利用する形式
テンプレートとしてインポート可能なイメージ形式
16
テンプレートイメージの準備方法 (1)■ Oz(仮想マシンイメージの作成に特化したOSインストールツール)で作成する
- OpenStack用イメージ作成のデファクトツール
- https://github.com/clalancette/oz/wiki
■ ディストリビューション標準のテンプレートイメージを利用
- FedoraのOpenStack対応イメージ
- http://fedoraproject.org/en/get-fedora-options#clouds
17
テンプレートイメージの準備方法 (2)■ Red Hat Enterprise Linux (RHEL)では、RHEL6.4より、OpenStackで利用可能なテン
プレートイメージが提供されています。
- これをダウンロードして、OpenStackに登録することで、すぐにRHELの仮想マシンを起動することができます。
18
セキュリティ機能とストレージ機能
19
セキュリティグループ■ 仮想マシンインスタンスの受信パケットを「セキュリティグループ」でフィルタリング
します。
- セキュリティグループを作成して、「プロトコル、宛先ポート、送信元IP」などの条件で受信を許可するパケットを指定します。
HTTPの受信許可
Pingの受信許可
セキュリティグループ「default」の仮想マシンからは任意の受信許可
- 仮想マシンインスタンス起動時に適用するセキュリティグループを指定します。
SSHの受信許可
送信は自由に可能
20
キーペアによるSSHログイン認証■ 事前に公開鍵を登録しておき、仮想マシンインスタンス起動時にゲストOSに埋め込み
ます。
- 公開鍵の登録は、ユーザ個別に行います。複数ユーザでキーペアを共有する形にはなりません。
ユーザ情報データベース
仮想マシンインスタンス
②公開鍵をゲストOSに埋め込み
秘密鍵
公開鍵
①公開鍵を事前に登録
③秘密鍵で認証
21
インスタンスタイプとディスク領域の関係■ デフォルトで用意されるインスタンスタイプは次のようになります。
- ルートディスクは、テンプレートイメージを複製した後に指定のサイズまで拡張されます。
■ 管理者ユーザは任意のインスタンスタイプを定義することができます。
- 一時ディスクとスワップディスクを与えると、ゲストOSからは下図のように認識されます。
- これらのディスク領域は、仮想マシンインスタンスを停止するとすべて破棄されます。(永続保存が必要なユーザデータは、ブロックボリュームに保存します。)
インスタンスタイプ 仮想CPU メモリルート
ディスク一時
ディスクスワップディスク
m1.tiny 1 512MB 1GB 0 0
m1.small 1 2GB 20GB 0 0
m1.medium 2 4GB 40GB 0 0
m1.large 4 4GB 80GB 0 0
m1.xlarge 8 8GB 160GB 0 0
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTvda 252:0 0 20G 0 disk └─vda1 252:1 0 20G 0 part /vdb 252:16 0 5G 0 disk /mntvdc 252:32 0 1G 0 disk [SWAP] スワップディスク
ルートディスク一時ディスク
22
仮想マシンインスタンスのスナップショット■ 仮想マシンインスタンスの「スナップショット」により、ルートディスクを複製して保存することができます。
OS領域
テンプレートイメージ
テンプレートイメージから仮想マシンインスタンス起動
インスタンスのスナップショット
OS領域
ルートディスクを複製してスナップショットを作成
スナップショットから仮想マシンインスタンス起動
23
ブロックボリュームの使い方■ ブロックボリュームは、仮想マシンインスタンスを停止してもそのまま残るので、永続
的なデータ保存領域として使います。
データ領域
③スナップショット作成
④スナップショットを複製して新たなブロックボリュームを作成
②仮想マシンインスタンスに接続してデータ領域として使用
データ領域
他の仮想マシンインスタンスに再接続可能(同時接続は不可)
①新規ブロックボリュームを作成
OS領域 OS領域
24
ブロックボリュームの使い方
OS領域
仮想マシンインスタンスに接続してゲストOS起動
テンプレートイメージを複製してブロックボリュームを作成
OS領域テンプレート
イメージ
OS領域
スナップショット作成
OS領域
複製
■ ブロックボリュームにゲストOSをインストールして、ブロックボリュームから仮想マシンインスタンスを起動することも可能です。
- 仮想マシンインスタンスを停止しても、OS領域への変更が破棄されずに残ります。
- スナップショットを作成しておき、仮想マシンインスタンスを起動するタイミングで、スナップショットから新しいブロックボリュームを用意することも可能です。
25
新規プロジェクト / ユーザの作成
26
プロジェクト単位のリソース使用レポート
現在の使用量 指定期間の累計
27
プロジェクトのリソース使用量の上限
28
OpenStackの特徴と主要コンポーネント
29
OpenStackの主要コンポーネント■ OpenStackでは、機能別にソフトウェアをモジュール化して開発が進められています。
- Swift : オブジェクトストレージ
● ファイル単位で出し入れするだけの単純なファイルストア
- Nova : 仮想マシンの配置決定と起動・停止処理
- Glance : 仮想マシンイメージの管理
● バックエンドにSwift、その他のストレージを使用
- Cinder : ブロックボリュームの提供
● サンプル実装では、Linux LVM + iSCSIソフトウェアターゲットを使用● 外部のストレージ装置をバックエンドにすることも可能
- Keystone : 統合認証機能
- Neutron : 仮想ネットワーク管理機能(Quantumから改名)
● 仮想ネットワークの作成を外部のプラグインモジュール(SDN製品)に移譲● 標準提供のプラグインでは、Linux bridge、もしくは、Open vSwitchを使用
- Horizon : GUIコンソールのサンプル実装
30
コンポーネント間の連携処理■ Webコンソールで操作をすると、REST API経由で各モジュールに指示が飛びます。ま
た、クライアントは、各モジュールのREST APIを直接操作することも可能です。
- これにより、プログラムコードからの呼び出しによる環境操作の自動化が可能になります。
仮想マシンイメージ
NovaCompute
NovaCompute
Glance Horizon Neutron
管理ネットワーク
LUN
仮想ネットワーク作成
仮想マシン起動
ブロックボリューム提供(iSCSI)
認証サーバ
テンプレートイメージ保存
MySQL
NetworkNode
NovaCompute
Cinder
Keystone
Swift
メッセージキュー
パブリックネットワーク
クライアントPC
Webコンソールアクセステンプレートイメージ検索
テンプレートダウンロード
QPID
データベース
LUNLUN
Nova
31
OpenStackの特徴
■ APIで操作する「Programmable Infrastructure」の提供
- 既存のGUI・ワークフローに縛られたくないユーザ層の獲得
- プログラムによるインフラ環境の自動構築・変更に対応
■ スケーラビリティを意識した疎結合アーキテクチャ
- コンピューティングノードの追加が容易/コントローラの負荷分散が可能
- システム設計、運用・管理にはこれまでとは違うノウハウが必要
■ Driver/Pluginによる外部コンポーネントとの連携
- 既存インフラと連携・統合するための作りこみが可能
- サードパーティ製品連携のエコシステム
ここがポイント
32
http://www.slideshare.net/gmccance/cern-data-centre-evolution
システムアーキテクチャのパラダイムシフト
33
コンポーネントのAPI操作
34
コンポーネントのAPI操作のパターン■ コンポーネントのAPIを操作する際は、2種類のパターンがあります。
- ユーザがダッシュボード経由で各コンポーネントのAPIを操作、もしくは、直接にAPIを操作
- あるコンポーネントが他のコンポーネントに処理を依頼するためにAPIを操作
データベースMySQL
メッセージングQPID
共有データ保存
エージェント通信のメッセージ中継
Horizon(ダッシュボード)
Keystone(ユーザ認証)
Neutron(仮想ネットワーク)
Cinder(ブロックボリューム)
Nova(仮想マシン)
Glance(テンプレート)
テンプレートイメージのダウンロード
ブロックボリュームの接続
仮想ネットワークへの接続
APIアクセス Webブラウザアクセス
35
API操作のユーザ認証■ コンポーネントのAPIを操作する際は、ユーザ認証が必要となります。
- ユーザ、もしくは、コンポーネントは、KeystoneからAPI操作を許可する「トークン」を取得した後に、操作対象コンポーネントのAPIにリクエストを送信します。(各コンポーネントは、自分自身を表す「ユーザ」がKeystoneに事前に登録されています。)
- Keystoneからトークンを取得する際に、操作対象コンポーネントのAPIのURLを併せて取得します。したがって、ユーザは、KeystoneのAPIのURLだけを知っている必要があります。
Horizon(ダッシュボード)
Keystone(ユーザ認証)
Neutron(仮想ネットワーク)
Cinder(ブロックボリューム)
Nova(仮想マシン)
Glance(テンプレート)
36
Keystoneのコマンド操作例 (1)■ OpenStack標準のコマンドラインツールは、環境変数でユーザ/パスワード/操作対象テ
ナント/Keystone APIのベースURLを指定します。
- Keystone APIは、管理ユーザ用と一般ユーザ用でURL(ポート番号)が異なります。
- 引数でユーザ等を指定した場合は、そちらが優先されます。
- 次はデフォルトの管理ユーザ「admin」でKeystoneを操作する例です。
# cat keystonerc_admin export OS_USERNAME=adminexport OS_TENANT_NAME=adminexport OS_PASSWORD=714f1ab569a64a3bexport OS_AUTH_URL=http://172.16.1.11:35357/v2.0/export PS1='[\u@\h \W(keystone_admin)]\$ '
# . keystonerc_admin# keystone user-list+----------------------------------+------------+---------+-------------------+| id | name | enabled | email |+----------------------------------+------------+---------+-------------------+| 589a800d70534655bfade5504958afd6 | admin | True | [email protected] || 3c45a1f5a88d4c1d8fb07b51ed72cd55 | cinder | True | cinder@localhost || f23d88041e5245ee8cc8b0a5c3ec3f6c | demo_admin | True | || 44be5165fdf64bd5907d07aa1aaa5dab | demo_user | True | || cd75770810634ed3a09d92b61aacf0a7 | glance | True | glance@localhost || a38561ed906e48468cf1759918735c53 | nova | True | nova@localhost || 157c8846521846e0abdd16895dc8f024 | neutron | True | neutron@localhost |+----------------------------------+------------+---------+-------------------+
管理ユーザの場合はポート番号35357
37
Keystoneのコマンド操作例 (3)■ 各コマンドラインツールは、「helpサブコマンド」でサブコマンドの一覧や各サブコマ
ンドの詳細が確認できます。
# keystone help ← サブコマンドの一覧# keystone help user-list ← サブコマンド「user-list」の詳細説明
38
仮想マシンインスタンスの起動■ NovaのAPIに仮想マシンインスタンスの起動を指示すると、Glance / Netronと連携し
て、インスタンスの起動と仮想ネットワーク接続の処理が行われます。
- Novaは、Glance APIを通じて、テンプレートイメージをコンピュートノードにコピーします。
- 同じく、Neutron APIを通じて、仮想マシンインスタンスを仮想ネットワークに接続します。
Horizon(ダッシュボード)
Keystone(ユーザ認証)
Neutron(仮想ネットワーク)
Cinder(ブロックボリューム)
Nova(仮想マシン)
Glance(テンプレート)
テンプレートイメージのダウンロード
仮想ネットワークへの接続
39
仮想マシンインスタンスの起動 (1)■ 次は、novaコマンドで仮想マシンインスタンスの起動に必要な情報を確認しています。
# . keystonerc_demo_user# nova flavor-list+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+-------------+| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public | extra_specs |+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+-------------+| 1 | m1.tiny | 512 | 0 | 0 | | 1 | 1.0 | True | {} || 2 | m1.small | 2048 | 20 | 0 | | 1 | 1.0 | True | {} || 3 | m1.medium | 4096 | 40 | 0 | | 2 | 1.0 | True | {} || 4 | m1.large | 8192 | 80 | 0 | | 4 | 1.0 | True | {} || 5 | m1.xlarge | 16384 | 160 | 0 | | 8 | 1.0 | True | {} |+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+-------------+
# nova keypair-list+-------+-------------------------------------------------+| Name | Fingerprint |+-------+-------------------------------------------------+| mykey | 31:8c:0e:43:67:40:f6:17:a3:f8:3f:d5:73:8e:d0:30 |+-------+-------------------------------------------------+
# nova image-list+--------------------------------------+----------+--------+--------+| ID | Name | Status | Server |+--------------------------------------+----------+--------+--------+| 702d0c4e-b06c-4c15-85e5-9bb612eb6414 | Fedora19 | ACTIVE | |+--------------------------------------+----------+--------+--------+
# nova secgroup-list+---------+-------------+| Name | Description |+---------+-------------+| default | default |+---------+-------------+
# nova net-list+--------------------------------------+-------------+------+| ID | Label | CIDR |+--------------------------------------+-------------+------+| 843a1586-6082-4e9f-950f-d44daa83358c | private01 | None || d3c763f0-ebf0-4717-b3fc-cda69bcd1957 | private02 | None || d8040897-44b0-46eb-9c51-149dfe351bbe | ext-network | None |+--------------------------------------+-------------+------+
NovaからGlance APIを呼び出して情報を取得しています。
NovaからNeutron APIを呼び出して情報を取得しています。
40
仮想マシンインスタンスの起動 (2)■ 次は、確認した情報を元に、仮想マシンインスタンスを起動しています。
# nova boot --flavor m1.small --image Fedora19 --key-name mykey \ --security-groups default --nic net-id=843a1586-6082-4e9f-950f-d44daa83358c vm01+-----------------------------+--------------------------------------+| Property | Value |+-----------------------------+--------------------------------------+| status | BUILD || updated | 2013-11-22T06:22:52Z || OS-EXT-STS:task_state | scheduling || key_name | mykey || image | Fedora19 || hostId | || OS-EXT-STS:vm_state | building || flavor | m1.small || id | f40c9b76-3891-4a5f-a62c-87021ba277ce || security_groups | [{u'name': u'default'}] || user_id | 2e57cd295e3f4659b151dd80f3a73468 || name | vm01 || adminPass | 5sUFyKhgovV6 || tenant_id | 555b49dc8b6e4d92aa74103bfb656e70 || created | 2013-11-22T06:22:51Z || OS-DCF:diskConfig | MANUAL || metadata | {} |(中略)+-----------------------------+--------------------------------------+
# nova list+--------------------------------------+------+--------+-------------------------+| ID | Name | Status | Networks |+--------------------------------------+------+--------+-------------------------+| f40c9b76-3891-4a5f-a62c-87021ba277ce | vm01 | ACTIVE | private01=192.168.101.3 |+--------------------------------------+------+--------+-------------------------+
41
仮想マシンインスタンスの起動 (3)■ 「カスタマイズスクリプト」を使用する際は、スクリプトを記載したファイルを用意し
て、「--user-data」オプションで指定します。
- 次の例では、カスタマイズスクリプトを指定して仮想マシンインスタンスを起動した後、フローティングIPを割り当てて、実際にログインしています。
# cat hello.txt #!/bin/shecho 'Hello, World!' > /etc/motd
# nova boot --flavor m1.small --image Fedora19 --key-name mykey \ --security-groups default --nic net-id=843a1586-6082-4e9f-950f-d44daa83358c \ --user-data hello.txt vm01
# nova floating-ip-list+--------------+-------------+----------+-------------+| Ip | Instance Id | Fixed Ip | Pool |+--------------+-------------+----------+-------------+| 172.16.1.101 | None | None | ext-network || 172.16.1.102 | None | None | ext-network || 172.16.1.103 | None | None | ext-network || 172.16.1.104 | None | None | ext-network || 172.16.1.105 | None | None | ext-network |+--------------+-------------+----------+-------------+
# nova add-floating-ip vm01 172.16.1.101
# ssh -i ~/mykey.pem [email protected] authenticity of host '172.16.1.101 (172.16.1.101)' can't be established.RSA key fingerprint is b7:24:54:63:1f:02:33:4f:81:a7:47:90:c1:1b:78:5a.Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.16.1.101' (RSA) to the list of known hosts.Hello, World![fedora@vm01 ~]$
42
ブロックボリュームの作成と接続■ CinderのAPIを通して、ブロックボリュームの作成・削除・スナップショット作成など
が可能です。
- 仮想マシンインスタンスにブロックボリュームを接続する際は、NovaのAPIに指示を出すと、 NovaがCinderのAPIを経由して連携処理を行います。
Horizon(ダッシュボード)
Keystone(ユーザ認証)
Neutron(仮想ネットワーク)
Cinder(ブロックボリューム)
Nova(仮想マシン)
Glance(テンプレート)
ブロックボリュームの接続
43
ブロックボリュームの作成と接続■ 次は5GBのボリュームを作成して、仮想マシンインスタンスに接続/取り外しを行う例で
す。
# cinder create --display-name volume01 5
# cinder list+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+| ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+| 78b4d23b-3b57-4a38-9f6e-10e5048170ef | available | volume01 | 5 | None | false | |+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
# nova volume-attach vm01 78b4d23b-3b57-4a38-9f6e-10e5048170ef+----------+--------------------------------------+| Property | Value |+----------+--------------------------------------+| device | /dev/vdb || serverId | f40c9b76-3891-4a5f-a62c-87021ba277ce || id | 78b4d23b-3b57-4a38-9f6e-10e5048170ef || volumeId | 78b4d23b-3b57-4a38-9f6e-10e5048170ef |+----------+--------------------------------------+
# nova volume-detach vm01 78b4d23b-3b57-4a38-9f6e-10e5048170ef
openstackOpen source software to build public and private clouds.