More Related Content Similar to OpenStack勉強会 (20) OpenStack勉強会2. 目次
1.OpenStack概要
1. OpenStackとは
2. OpenStackの歴史
2.OpenStackの機能説明(デモ)
1. デモ環境の説明
2. 管理画面(Horizon)
3. 認証(Keystone)
4. イメージ管理(Glance)
5. コンピューティング機能(Nova)
6. ボリューム機能(Cinder)
7. ネットワーク機能(Quantum)
3.他サービスとの比較
7. OpenStackとは
XaaSについてのまとめ (Wikipedia[クラウドコンピューティング]より)
SaaS
インターネット経由のソフトウェアパッケージの提供。電子メール、グループウェア、CRMなど。セール
スフォース・ドットコムのSalesforce CRM、マイクロソフトのMicrosoft Online Services、Googleの
Google Appsがある。オープンソースのSaaS構築フレームワークとしてはLiferayがある。
PaaS
インターネット経由のアプリケーション実行用のプラットフォームの提供。仮想化されたアプリケーショ
ンサーバやデータベースなど。ユーザーが自分のアプリケーションを配置して運用できる。セールスフ
ォース・ドットコムのForce.comプラットフォーム、GoogleのGoogle App Engine、AppScale、マイクロ
ソフトのWindows Azure、Amazon.comのAmazon S3やAmazon DynamoDBやAmazon
SimpleDBなど。
HaaSまたはIaaS
インターネット経由のハードウェアやインフラの提供。サーバー仮想化やデスクトップ仮想化や共有デ
ィスクなど。ユーザーが自分でOSなどを含めてシステム導入・構築できる。Amazon.comのAmazon
EC2など。
8. OpenStackの歴史
OpenStackの構成概要図
AWSのS3相当
AWS Management
Consoleに相当
AWSのEC2相当
機能毎にモジュール化されている
AWSのEBS相当 開発言語はpython
引用元:http://ken.pepple.info/
9. OpenStackの歴史
2010年に2つのオープンソースを組み合わせてプロジェクトがスタート
Swift
– Rackspace社が提供している商用クラウドサービス(CloudFiles)をオープンソース化したもの。オブジェクトストレージ機能
を提供する。
Nova
- NASAがクラウド基盤開発のために独自開発したソフトウェア(Nebula)をオープンソース化したもの。クラウド基盤のコンピ
ューティング機能などを提供する。
Swift
Nova
2010
Oct 21 OpenStack first release (Austin)
この時点ではNovaとSwiftをOpenStackとして1つにパッケ
ージングしただけ
引用元:http://ken.pepple.info/
10. OpenStackの歴史
Glance Swift
Nova
2011
Feb 3 OpenStack (Bexar) release
イメージ管理(Glance)が登場することで初めてNovaと
Swiftが連携できるようになる
Apr 15 OpenStack (Cactus) release
Sep 22 OpenStack (Diablo) release
この辺からリリーススケジュールが半年に一回になる
引用元:http://ken.pepple.info/
11. OpenStackの歴史
Horizon
Glance Swift
2012
Nova Apr 5 OpenStack (Essex) release
統合認証(Keystone)と管理画面(Horizon)が登場
Sep 27 OpenStack (folsom) release
Novaからネットワーク機能(Quantum)とボリューム
Keystone 機能(Cinder)が分離
Apr 4 OpenStack (Grizzly) release予定
引用元:http://ken.pepple.info/
12. OpenStackの歴史
Horizon
quantum
Nova Glance Swift
2012
Apr 5 OpenStack (Essex) release
統合認証(Keystone)と管理画面(Horizon)が登場
cinder
Sep 27 OpenStack (folsom) release
Novaからネットワーク機能(Quantum)とボリューム
Keystone 機能(Cinder)が分離
Apr 4 OpenStack (Grizzly) release予定
引用元:http://ken.pepple.info/
14. 環境
本日使用するデモ環境
ハードウェア
項目 値
CPU Xeon(R) E5405 (2GHz/12MB) x 1 (4 core)
メモリ 4GB
NIC 8port
ディスク 73GB x 2 (RAID1) (実効73GB)
外部ディスク 147GB x 5 (RAID5) (実効550GB)
ホストOS: Ubuntu 12.04 LTS
OpenStack導入方式: devstack
【注意点】
OpenStack All-in-one環境を構築する場合のサーバ推奨スペック
vCPU:1個以上
メモリ:2GB以上(OpenStack起動、インスタンス未起動状態で1GB超消費します)
ディスク:20GB以上(OS最小インストール+OpenStackコンポーネントで10GB程度消費します)
NIC:1個以上
15. devstackとは
devstackとは
• OpenStackのインストール用スクリプト。
• OpenStack自体の導入を簡略化するためにOpenStackの開発者が開発している。
devstackの使い方
4ステップでOpenStack環境のできあがり!
1. # git clone http://github.com/openstack-dev/devstack.git
2. # cd devstack
3. 環境にあわせてlocalrcを作成する githubから最新の
devstackをとってくる
4. # ./stack.sh
devstack実行スクリプ
トをたたく
stack.sh初回実行時はOpenStack関連パッケージをネットワーク経由でダウンロー
ドしてくるため構築完了に30分~1時間程度かかる。(ネットワーク転送速度次第で
すが)
2回目以降は5~10分程度で完了。
16. devstackとは
devstackの主要なファイル
stack.sh
devstackの構築用スクリプト本体。
既に構築済みの環境で実行すると全設定を削除して再構築される。
unstack.sh
devstackを停止する場合に実行する。
rejoin-stack.sh
devstack構築済みの環境で停止しているdevstackを再実行する場合に実行する。
localrc
devstackの最初に読み込まれる。デフォルトの環境変数を変更したい場合にはこれに
記載する。
local.sh
stack.shの一番最後に呼び出されるスクリプト。自前で実行したいコマンドがある場合
はこれに記載する。
openrc
OpenStack操作時の環境変数をセットするための定義ファイル
# source openrc [username] [tenantname]
17. システム構成
devstack導入後のシステム構成
複数台構成する場合は時
刻同期必須。
ホスト
Dashboard
(Horizon)
Apache NTP
OpenStack各コンポーネン
トが情報置き場として利用
するデータベース。
Identity Image
(Keystone) (Glance) MySQL
AMQPのOSS実装。
Compute Block
Network ソフトウェア間の処理のや
(Nova) Storage RabbitMQ
(quantum) りとり(メッセージング)を仲
(Cinder)
介するものと思ってくださ
い。
QEMU Open vSwitch LVM
HW
18. システム構成
devstack導入後のシステム構成
ホスト
Dashboard
(Horizon)
Apache NTP
Identity Image
(Keystone) (Glance) MySQL
コントローラ機能
Compute Block
Network
(Nova) Storage RabbitMQ
(quantum)
(Cinder)
下の機能のみ切り出して
構成したホストはコンピュ
QEMU Open vSwitch LVM ーティングノードと呼ばれ
たりする
HW
19. システム構成
devstack導入後のシステム構成
ホスト
Dashboard
(Horizon) こんな風にノードの追加が
NTP 可能。
Apache (ネットワーク、ボリューム
機能も同様)
Identity Image
(Keystone) (Glance) MySQL
追加ホスト
Compute Block (コンピューティングノード)
Network
(Nova) Storage RabbitMQ
(quantum)
(Cinder) Compute
(Nova)
・・・
QEMU Open vSwitch LVM QEMU
HW HW
20. 管理画面
ホスト
Dashboard
(Horizon)
Apache NTP
Identity Image
(Keystone) (Glance) MySQL
Compute Block
Network
(Nova) Storage RabbitMQ
(quantum)
(Cinder)
QEMU Open vSwitch LVM
HW
21. 管理画面
Dashboard (Horizon) : 管理画面の提供
【役割】
• 管理者、一般ユーザが利用する管理画面
の提供
【機能】
• GUIによる各種操作
• コンポーネントへのAPIアクセス
HTTP(S)
horizon
nova-api glance-api keystone-api cinder-api quantum-api
22. 管理画面
horizon-demo 1) 管理画面の裏側
HorizonはDjango(pythonで記述された
Webアプリケーションフレームワーク)で
作成されていて、apache上で動作してい
ます。
サーバ:80にきたアクセス
を全てdjango.wsgiに飛ば
している
Horizon用apache設定ファイル(/etc/apache2/sites-available/horizon)
<VirtualHost *:80>
WSGIScriptAlias / /opt/stack/horizon/openstack_dashboard/wsgi/django.wsgi
・
・
・
23. 認証
ホスト
Dashboard
(Horizon)
Apache NTP
Identity Image
(Keystone) (Glance) MySQL
Compute Block
Network
(Nova) Storage RabbitMQ
(quantum)
(Cinder)
QEMU Open vSwitch LVM
HW
24. 認証
Identity Service (Keystone) : 統合認証基盤
【役割】 認証処理フロー
• OpenStack各コンポーネントが利用する
統合認証機能の提供
client keystone-all
【機能】
• 認証および認可
1) 認証要求
• ユーザID/パスワードで認証を行い
トークンを発行する。 2) トークンの発行
• ユーザはトークンを利用して
3) テナント情報の要求
OpenStack各サービスにアクセスす
ることができる。 4) テナントリスト
OpenStack Identity API 5) エンドポイント情報の要求
(Horizon,コマンド等) ホスト上で起動する
デーモン。keystone 6) エンドポイントリスト
本体。
keystone-all
対応しているバック クライアントは指定されたエンドポイントにトー
エンド(プラグイン形 クンを指定してアクセスすることで各
式で選択可能) OpenStackの操作をすることができるようにな
Backend KVS, SQL, PAM, る。
LDAPなど
参考:http://www.slideshare.net/h-saito/openstack-study9-josug
26. 認証
keystone-demo 1.a) 認証処理の裏側 - トークンの発行 -
client keystone-all クライアントからkeystoneに対してユーザ
ID・パスワードで認証する。
1) 認証要求 認証が通るとトークンが発行される。
2) トークンの発行
トークン:keystoneに認証されたユーザに発行され
る許可証
コマンドでトークンを発行する
$ curl ¥
-X 'POST' ¥
-d '{"auth":{"passwordCredentials":{"username": "demo", "password":"password"}}}' ¥
-H 'Content-type: application/json' ¥
http://localhost:5000/v2.0/tokens
ユーザ名、パスワードをセットしてkeystone
のAPIに投げる
結果
{"access": {"token": {"expires": "2012-12-22T05:55:05Z", "id":
"a62be0784aee470d883ede36abcbd509"}, "serviceCatalog": {}, "user": {"username": "demo",
"roles_links": [], "id": "fc6e7accbdde47a8931d0ba772e1001d", "roles": [], "name":
"demo"}}}
発行されたトークン
27. 認証
keystone-demo 1.b) 認証処理の裏側 - テナントの取得 -
client keystone-all 取得したトークンを使ってテナント情報を
要求する。
3) テナント情報の要求
テナント(=プロジェクト):ユーザが所属するグループ
4) テナントリスト
devstackにより作成されるユーザとテナント
tenant: admin
tenant: demo
user: admin user: demo
tenant:
invisible_to_ad
min
28. 認証
keystone-demo 1.b) 認証処理の裏側 - テナントの取得 -
client keystone-all 取得したトークンを使ってテナント情報を
要求する。
3) テナント情報の要求
テナント(=プロジェクト):ユーザが所属するグループ
4) テナントリスト
コマンドでテナントリストを取得する 先ほど取得したトークンIDセッ
トしてリクエストを投げる
$ curl ¥
-H "X-Auth-Token: a62be0784aee470d883ede36abcbd509" ¥
http://localhost:5000/v2.0/tenants
結果
{ "tenants": [ { "description": null, "enabled": true, "id":
"596b667667d44abc8c834561eb9d3af5", "name": "demo" }, { "description": null, "enabled":
true, "id": "8664a5810ba540508c304dc5b9b6e133", "name": "invisible_to_admin" } ],
"tenants_links": [] }
所属しているテナントIDとテナント名
(demoユーザは、demoとinvisible_to_adminというテナントに所属
している)
29. 認証
keystone-demo 1.c) 認証処理の裏側 - エンドポイントの取得 -
client keystone-all 取得したトークンを使ってテナント情報を
要求する。
5) エンドポイント情報の要求
エンドポイント:OpenStackの各コンポーネントにアク
6) エンドポイントリスト セスするAPIのURL情報
horizon ここのURL
nova-api glance-api keystone-api cinder-api quantum-api
30. 認証
keystone-demo 1.c) 認証処理の裏側 - エンドポイントの取得 -
client keystone-all 取得したトークンを使ってテナント情報を
要求する。
5) エンドポイント情報の要求
エンドポイント:OpenStackの各コンポーネントにアク
6) エンドポイントリスト セスするAPIのURL情報
トークンIDとテナントセットし
てリクエストを投げる
コマンドでエンドポイントリストを取得する
$ curl -X 'POST' ¥
-d '{"auth":{"token":{"id": "a62be0784aee470d883ede36abcbd509"}, "tenantId":
"596b667667d44abc8c834561eb9d3af5"}}' ¥
-H "X-Auth-Token: a62be0784aee470d883ede36abcbd509" ¥
-H 'Content-type: application/json' ¥
http://localhost:5000/v2.0/tokens
結果
エンドポイントのリストとそこにアクセスする
{"access": {"token": {"expires": "2013-01-12T08:15:30Z", "id": ためのトークンが取得できる。
"8778b2cbc63640e9b7a181f194fcfeac",
(省略)
{"endpoints": [{"adminURL": "http://192.168.56.101:9696/", "region": "RegionOne",
(省略)
32. イメージ管理
ホスト
Dashboard
(Horizon)
Apache NTP
Identity Image
(Keystone) (Glance) MySQL
Compute Block
Network
(Nova) Storage RabbitMQ
(quantum)
(Cinder)
QEMU Open vSwitch LVM
HW
33. イメージ管理
Image Service (Glance) : インスタンスイメージの管理
【役割】
対応しているイメージ形式
• インスタンスイメージの管理
種類 説明
【機能】 raw RAWイメージ
• イメージの追加・削除 iso ISOイメージ
vhd
各種仮想環境の仮想ディスクイメー
vmdk
OpenStack Image API ジ(Hyper-V、VMware、VirtualBox)
(Horizon,コマンド等) APIアクセスの待 vdi
受け
QEMUによってサポートされている
qcow2
イメージ形式
aki
keystone glance-api
ari Amazonのイメージ形式
イメージメタデー ami
タの管理
DB glance-registory 対応しているコンテナ形式
種類 説明
ovf OVF形式
対応しているイメージストア
aki
Store (格納場所はプラグイン形式
で選択可能) ari Amazon形式
ファイルシステム, Swift, ami
RADOS block devices, コンテナやメタデータがない場
Amazon S3, HTTP bare
合
35. イメージ管理
glance-demo 1) イメージリストの取得
登録されているイメージリストの取得
$ glance image-list 今管理画面に表示され
+--------------------------------------+---------------------------------+-------------+------------------+-----
ているのはこれ。
-------+--------+
| ID | Name | Disk Format | Container Format | Size
| Status |
+--------------------------------------+---------------------------------+-------------+------------------+-----
-------+--------+
| cf055b1d-a7f7-4a92-b2b8-df53f7bb06a3 | cirros-0.3.0-x86_64-uec | ami | ami |
25165824 | active |
| 87f37a8d-f121-4411-9e54-e9804e16a254 | cirros-0.3.0-x86_64-uec-kernel | aki | aki |
4731440 | active |
| 5c1bbfad-2d53-4e6f-adb8-5d2c48b7aed6 | cirros-0.3.0-x86_64-uec-ramdisk | ari | ari |
2254249 | active |
+--------------------------------------+---------------------------------+-------------+------------------+-----
-------+--------+
イメージ保存先(ファイルシステム)
$ ls -l /opt/stack/data/glance/images/
-rw-r----- 1 user user 2254249 12月 6 16:10 5c1bbfad-2d53-4e6f-adb8-5d2c48b7aed6
-rw-r----- 1 user user 4731440 12月 6 16:10 87f37a8d-f121-4411-9e54-e9804e16a254
-rw-r----- 1 user user 25165824 12月 6 16:11 cf055b1d-a7f7-4a92-b2b8-df53f7bb06a3
IDと同名でファイルが作
成されている。
36. イメージ管理
glance-demo 2) イメージの追加
イメージの追加
$ glance image-create --name="ubuntu" --disk-format=vdi --container-format=bare --is-public=true ¥
< ubuntu.vdi
$ glance image-list
+--------------------------------------+---------------------------------+-------------+------------------+-
-----------+--------+
| ID | Name | Disk Format | Container Format |
Size | Status |
+--------------------------------------+---------------------------------+-------------+------------------+-
-----------+--------+
| cf055b1d-a7f7-4a92-b2b8-df53f7bb06a3 | cirros-0.3.0-x86_64-uec | ami | ami |
25165824 | active |
| 87f37a8d-f121-4411-9e54-e9804e16a254 | cirros-0.3.0-x86_64-uec-kernel | aki | aki |
4731440 | active |
| 5c1bbfad-2d53-4e6f-adb8-5d2c48b7aed6 | cirros-0.3.0-x86_64-uec-ramdisk | ari | ari |
2254249 | active |
| 99abc396-6962-4ae0-909a-cbccdd9c57ea | ubuntu | vdi | bare |
2702217216 | active |
+--------------------------------------+---------------------------------+-------------+------------------+-
-----------+--------+
追加されたイメージ。管
理画面にも反映される。
38. コンピューティング機能
ホスト
Dashboard
(Horizon)
Apache NTP
Identity Image
(Keystone) (Glance) MySQL
Compute Block
Network
(Nova) Storage RabbitMQ
(quantum)
(Cinder)
QEMU Open vSwitch LVM
HW
39. コンピューティング機能
Compute (Nova) : コンピューティング機能
【役割】
• コンピューティングリソースの提供・管理
【機能】
• インスタンスの作成・削除、起動・停止
OpenStack Compute API
(Horizon,コマンド等)
APIアクセスの待
受け keystone
nova-api
DB
AMQP
インスタンス作成
ノードの管理
glance
nova- nova-
scheduler compute
quantum
Hypervisor
インスタンス作
成・起動・停止
この他にも nova-cert, nova-consoleauth といったデーモンが起動する。
41. コンピューティング機能
nova-demo 1) インスタンスの作成の裏側
インスタンス作成フロー
OpenStack Compute API
(Horizon,コマンド等)
1. API経由でリクエストを受け取る
2. インスタンスの作成&起動命令をAMQPに投入 1
3. nova-schedulerがメッセージを受け取る nova-api
4. インスタンスの起動ホストを決定してAMQPに投入
2
5. nova-computeがメッセージを受け取る
6. quamtum経由でdhcpの設定(dnsmasq) AMQP
7. glance経由でイメージコピー 5
3 4 6
8. Hypervisorからインスタンス起動 quantum
nova- nova-
scheduler compute
glance
8 7
Hypervisor
42. コンピューティング機能
nova-demo 1) インスタンスの作成の裏側
novaから見えるインスタンス
$ nova list
+--------------------------------------+--------+--------+------------------+
| ID | Name | Status | Networks |
+--------------------------------------+--------+--------+------------------+
| 24207deb-8907-4eaa-bade-4b2782d1b7c0 | testvm | ACTIVE | net1=192.168.0.2 |
+--------------------------------------+--------+--------+------------------+
libvirtから見える仮想マシンイメージ
novaのインスタンスIDと
$ virsh list libvirtから見えるuuidは同じ
libvirtから見えるIDは同じ
Id Name State
----------------------------------
4 instance-00000001 running
$ virsh dumpxml instance-00000001
<domain type='qemu' id='1'>
<name>instance-00000001</name>
<uuid>24207deb-8907-4eaa-bade-4b2782d1b7c0</uuid>
43. コンピューティング機能
nova-demo 1) インスタンスの作成の裏側
インスタンス作成フロー
OpenStack Compute API
(Horizon,コマンド等)
1. API経由でリクエストを受け取る
2. インスタンスの作成&起動命令をAMQPに投入 1
3. nova-schedulerがメッセージを受け取る nova-api
4. インスタンスの起動ホストを決定してAMQPに投入
2
5. nova-computeがメッセージを受け取る
6. quamtum経由でdhcpの設定(dnsmasq) AMQP
7. glance経由でイメージコピー 5
3 4 6
8. Hypervisorからインスタンス起動 quantum
nova- nova-
scheduler compute
glance
8 7
ここをもうちょっと
Hypervisor
詳しく。
44. コンピューティング機能
nova-demo 2) インスタンスのディスク構成
VMware ESX/ESXi
VM1 VM2
vm1.vmdk vm2.vmdk OS毎にディスク用のフ
ァイルが独立している
OpenStack
イメージファイルは共通
instance-00000001 instance-00000002 利用。更新データは各イ
ンスタンスのファイルに
更新用ファイル 更新用ファイル 記録される。
(qemuのbacking fileと
いう機能を使っている。)
glanceからコピーしてきたイメージファイル
45. コンピューティング機能
nova-demo 2) インスタンスのディスク構成
glanceの保存イメージ
$ ls -l /opt/stack/data/glance/images/
total 31404
-rw-r----- 1 user user 2254249 12月 11 16:01 675b1da1-de4b-474e-91d4-2c1502895ec4
-rw-r----- 1 user user 25165824 12月 11 16:01 733979b4-78d5-4290-804d-48fd99a6b3a2
-rw-r----- 1 user user 4731440 12月 11 16:01 d59796ea-10ef-4ec8-8b3f-9b03a29198af
novaインスタンス用イメージ
$ ls -lR /opt/stack/data/nova/instances/
/opt/stack/data/nova/instances/: glance経由でコピーしてきた
total 8 イメージ
drwxrwxr-x 2 user libvirtd 4096 12月 11 16:53 _base
drwxrwxr-x 2 user libvirtd 4096 12月 11 16:53 instance-00000001
/opt/stack/data/nova/instances/_base:
total 31408
-rw-rw-r-- 1 user libvirtd 2254249 12月 11 16:53 675b1da1-de4b-474e-91d4-2c1502895ec4
-rw-rw-r-- 1 user libvirtd 4731440 12月 11 16:53 d59796ea-10ef-4ec8-8b3f-9b03a29198af
-rw-rw-r-- 1 libvirt-qemu kvm 25165824 12月 11 16:53 ff4afd2435d4ab51a6e62fe12d18ec7a89b32264
/opt/stack/data/nova/instances/instance-00000001:
total 13584
-rw-rw---- 1 libvirt-qemu kvm 16389 12月 11 16:53 console.log
-rw-r--r-- 1 libvirt-qemu kvm 7012352 12月 11 16:54 disk _baseとinstance-????????
-rw-rw-r-- 1 libvirt-qemu kvm 4731440 12月 11 16:53 kernel のセットで1つのインスタンス
-rw-rw-r-- 1 user libvirtd 1510 12月 11 16:53 libvirt.xml
-rw-rw-r-- 1 libvirt-qemu kvm 2254249 12月 11 16:53 ramdisk
48. コンピューティング機能
nova-demo 3) インスタンスへのアクセスの裏側
セキュリティ設定はホスト上
のiptablesで実現されている。
ホスト上のiptablesの設定
$ sudo iptables -L nova-compute-inst-1
Chain nova-compute-inst-14 (1 references)
target prot opt source destination
DROP all -- anywhere anywhere state INVALID
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
nova-compute-provider all -- anywhere anywhere
ACCEPT udp -- 192.168.0.1 anywhere udp spt:bootps dpt:bootpc
ACCEPT all -- 192.168.0.0/24 anywhere
ACCEPT icmp -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
nova-compute-sg-fallback all -- anywhere anywhere
50. コンピューティング機能
nova-demo 3) スナップショット作成の裏側
OpenStack Compute API
(Horizon,コマンド等)
スナップショット作成フロー
1. API経由でリクエストを受け取りスナップショットの
nova-api
作成命令をAMQPに投入
1
2. nova-computeがインスタンスのスナップショット
を作成&インスタンスイメージのコピー
AMQP
3. 1で作成したスナップショットの削除
3
4. 2でコピーしたイメージをglanceに登録
glance
nova- nova-
scheduler 2 compute
quantum
Hypervisor
4
qemuのイメージコピー機能を使ってい
る。
(イメージファイルをフルコピーしている。
VMwareで想像するスナップショットと
は違う)
53. ボリューム機能
ホスト
Dashboard
(Horizon)
Apache NTP
Identity Image
(Keystone) (Glance) MySQL
Compute Block
Network
(Nova) Storage RabbitMQ
(quantum)
(Cinder)
QEMU Open vSwitch LVM
HW
54. ボリューム機能
Storage (Cinder) : ブロックストレージ機能
【役割】
• ブロックストレージの提供・管理
【機能】 OpenStack Storage API
• ボリュームの作成・削除 (Horizon,コマンド等)
• ボリュームスナップショットの作成・削除
cinder-api keystone
APIアクセスの待
受け
AMQP
ボリュームを払い ストレージに対する各
cinder- cinder- 種操作
出すホストの決
定、管理 scheduler volume 対応しているストレー
ジはLVM, NFS等
DB storage
55. ボリューム機能
cinder-demo 1) devstack構築後のボリュームの状態
ボリューム提供用ファイルを作成
devstackではデフォルトでLVMの機能を利用してボリュームを提供する。
(stack-volume-backing-file)し、ブ
$ ls -l /opt/stack/data/ ロックデバイス(/dev/loop0)として利
total 5242916 用する。
drwxrwxr-x 3 user user 4096 12月 13 13:49 cinder
drwxr-xr-x 4 user user 4096 12月 13 14:06 dhcp
drwxrwxr-x 4 user user 4096 12月 13 14:05 glance
drwxrwxr-x 6 user user 4096 12月 13 14:05 nova
-rw-rw-r-- 1 user user 5379194880 12月 13 14:22 stack-volumes-backing-file
環境構築後のLVMの状態(VG)
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree cinderの作成したボリュ
localvol 1 2 0 wz--n- 67.74g 0 ームグループ
stack-volumes 1 0 0 wz--n- 5.01g 5.01g
環境構築後のLVMの状態(LV)
$ sudo lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
root localvol -wi-ao 65.88g
swap localvol -wi-ao 1.86g
57. ボリューム機能
cinder-demo 1) ボリュームの作成の裏側
VG
払い出した容量の分だけ
$ sudo vgs
Free領域が減っている。
VG #PV #LV #SN Attr VSize VFree
localvol 1 2 0 wz--n- 67.74g 0
stack-volumes 1 1 0 wz--n- 5.01g 4.01g
LV
新しくLVが増えている。
$ sudo lvs これがcinderが払い出
LV VG Attr LSize した領域。
Origin Snap% Move Log Copy% Convert
root localvol -wi-ao 65.88g
swap localvol -wi-ao 1.86g
volume-d47c3ee2-7d44-4b44-bdf7-109c705f5bd5 stack-volumes -wi-ao 1.00g
ちなみにcinderの管理しているIDはこちら。
LVM領域の名前は volume-<ID>となっていることがわ
かる。(命名規則はcinderの設定で変更可能)
$ cinder list
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| d47c3ee2-7d44-4b44-bdf7-109c705f5bd5 | available | testvol | 1 | None | | |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
59. ボリューム機能
cinder-demo 2) ボリュームの接続の裏側
Hypervisorの機能を使
ハイパバイザーからみたボリュームの状態(# virsh edit instance-????????) ってデバイスを接続し
<domain type='qemu'> ている。
.
.(略)
.
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source dev='/dev/disk/by-path/ip-192.168.56.101:3260-iscsi-iqn.2010-10.org.openstack:volume-
d47c3ee2-7d44-4b44-bdf7-109c705f5bd5-lun-1'/>
<target dev='vdb' bus='virtio'/>
<serial>d47c3ee2-7d44-4b44-bdf7-109c705f5bd5</serial>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
.
.(略)
.
61. ボリューム機能
cinder-demo 3) スナップショットの作成の裏側
LVの状態
$ sudo lvs
LV VG Attr LSize Origin
Snap% Move Log Copy% Convert
root localvol -wi-ao 65.88g
swap localvol -wi-ao 1.86g
_snapshot-839208c8-7e2c-46c4-abf7-d19c35319a1a stack-volumes swi-a- 1.00g volume-d47c3ee2-7d44-
4b44-bdf7-109c705f5bd5 0.00
volume-d47c3ee2-7d44-4b44-bdf7-109c705f5bd5 stack-volumes owi-ao 1.00g
LVMのsnapshot機能でス
ナップショットを作成してい
る。
62. ボリューム機能
cinderまとめ
ブロックストレージの作成、削除、スナップショットの作成を担当して
いる。
指定したデバイスから領域を切り出してインスタンスに接続する。
その他まめ知識
cinderはnovaのソースコードを丸々コピーして、ボリューム関連以外のコードを削
除して作った。
LVM,NFSどの種類のデバイスを利用してもインスタンスからはローカルディスク
として見える。
ボリュームをcreateするときにホスト&ボリュームを紐付けて管理しているため、
cinder-volumeが稼働しているサーバが障害でダウン → そのサーバで作成さ
れていたボリュームの消失 となる。
63. ネットワーク機能
ホスト
Dashboard
(Horizon)
Apache NTP
Identity Image
(Keystone) (Glance) MySQL
Compute Block
Network
(Nova) Storage RabbitMQ
(quantum)
(Cinder)
QEMU Open vSwitch LVM
HW
64. ネットワーク機能
Quantum: ネットワーク機能
【役割】
• ネットワークリソースの提供・管理
【機能】
• 仮想ネットワークの追加・削除
OpenStack Network API
• インスタンスのIPアドレスの払い出し (Horizon,コマンド等)
APIアクセスの待
受け quantum-
keystone
server
ネットワークプラグインの操
インスタンスIPアド AMQP 作。
レス払い出しとルー
対応しているプラグインは
ティング設定など
Open vSwitch, Linux
Bridge, OpenFlow 等。
quantum- quantum-l3- quantum-
dhcp-agent agent (plugin)-
agent
DB
68. ネットワーク機能
quantum-demo 2) ネットワークの作成
eth0
新規にネットワーク
が作成される
ext_net
net1 testnet
192.168.0.2 この状態で作成したtestnet内でのインスタ
ンス間の通信はできる状態になるが、外部
testvm との通信はできない。
外部への通信を実現するには次ページの
作業が必要。
69. ネットワーク機能
quantum-demo 2) ネットワークの作成
quantum上のルータのリスト
$ quantum router-list
+--------------------------------------+---------+--------------------------------------------------------+
| id | name | external_gateway_info |
+--------------------------------------+---------+--------------------------------------------------------+
| 5de02c83-4756-4241-a6c9-bfafa2c3dad7 | router1 | {"network_id": "126468b5-1850-45f9-853c-cb832c4fa183"} |
+--------------------------------------+---------+--------------------------------------------------------+
quantum上のサブネットのリスト
$ quantum subnet-list
+--------------------------------------+------------+----------------+---------------------------------------
-----------+
| id | name | cidr | allocation_pools
|
+--------------------------------------+------------+----------------+---------------------------------------
-----------+
| 292e57b4-2f0b-4fa0-9047-49cb4b7e3517 | testsubnet | 192.168.1.0/24 | {"start": "192.168.1.1", "end":
"192.168.1.253"} |
| 52d6960f-8e21-4aa9-941e-4bdbee1c0529 | | 10.103.2.0/24 | {"start": “10.103.2.1", "end":
"10.103.2.253"} |
| 916cb1dc-6244-4ba5-be88-e19e24643d09 | | 192.168.0.0/24 | {"start": "192.168.0.1", "end":
"192.168.0.253"} |
+--------------------------------------+------------+----------------+---------------------------------------
-----------+
quantumのルータに
testsubnet(testnetに作っ
$ quantum router-interface-add router1 testsubnet たセグメント)を接続
Added interface to router router1
71. ネットワーク機能
quantum-demo 3) floating ip の払い出し
floating ip (public ip)
• パブリックIPアドレス(AWSの
eth0 Elastic IP)
• インスタンスに関連付けることで
OpenStack外部からインスタンス
10.103.2.2
へのアクセスが可能になる
ext_net
net1 testnet
fixed ip (private ip)
192.168.0.2 • インスタンス作成時に割り当て
testvm られるプライベートIPアドレス
• OpenStack外部から疎通でき
ない
72. ネットワーク機能
quantum-demo 3) floating ip の払い出し
floating ip の払い出し
$ quantum floatingip-create ext_net
Created a new floatingip:
接続するfloating ipと
fixed ipのuuidを確認
する。
fixed ip の確認
$ quantum port-list
+--------------------------------------+------+-------------------+----------------------------------------
----------------------------------------------+
| id | name | mac_address | fixed_ips
|
+--------------------------------------+------+-------------------+----------------------------------------
----------------------------------------------+
| 005f1846-bccc-4a16-a8e7-72214397fafe | | fa:16:3e:08:c7:dc | {"subnet_id": "52d6960f-8e21-4aa9-941e-
4bdbee1c0529", "ip_address": “10.103.2.2"} |
| 398855fd-d2c5-47a8-8f4e-b7dc38736470 | | fa:16:3e:f4:93:2c | {"subnet_id": "916cb1dc-6244-4ba5-be88-
e19e24643d09", "ip_address": "192.168.0.2"} |
(中略)
floating ip と fixed ip の紐付け
$ quantum floatingip-associate 005f1846-bccc-4a16-a8e7-72214397fafe 398855fd-d2c5-47a8-8f4e-b7dc38736470
Associated floatingip 005f1846-bccc-4a16-a8e7-72214397fafe
73. ネットワーク機能
quantum-demo 3) floating ip の払い出し
eth0
10.103.2.2
ext_net
net1 testnet
floatingip-associateで内部の
fixedipと紐付けを行なっている。
192.168.0.2
testvm どういう技術でこれを実現している
が、どういう技術でこれを実現して
のかまで追っかけられていません。
いるのかまで追っかけられていま
(誰か分かった人は教えてくださ
せん。(誰か知っている人は教えて
い。)
ください。)
76. IaaS基盤比較
ここに使う場合に、
パブリック どれを使えばい
い?
クラウド
プライベート
クラウド
大手企業がIaaS基盤をつかって
サービスプロバイダとして構築
HP, Dell(OpenStack)
IDCフロンティア、NTTコミュニケ
ーションズ(CloudStack)
78. IaaS基盤比較
(http://incubator.apache.org/cloudstack/)
• Cloud.com社が開発したクラウド基盤をCitrixが買収しOSS化してApacheに寄贈
したもの。
• CitrixはCloudPlatformとしてサポートを提供。
OpenStackと比較したCloudStackの強み・弱み
• (本勉強会でお見せしたOpenStackの管理画面とは比べ物にならない)充実した
Webインターフェースを実装しており、操作が楽。
• 商用サービスを提供するための機能が充実しており、LB、HAの機能を搭載して
いる。オブジェクトストレージ(S3)に相当する機能はない。
• 独自APIだがAWS互換APIも利用可能。(CloudBridge)
• 商用導入実績多数。
79. IaaS基盤比較
(http://www.eucalyptus.com/)
• Eucalyptus Systems, Inc.が開発。OSS版と商用版あり。
• Amazon EC2/S3とのAPI互換のプライベートクラウドを簡単に構築できるように
するのが目標。
OpenStackと比較したEucalyptusの強み・弱み
• 開発当初からEC2/S3互換APIを実装している。Amazonとも提携しAPI対応の拡
充を表明しており、AWSとの親和性が高い。(EC2,S3,EBS,IAM等の互換APIを
提供)
• クラウド構築基盤としては古参であり、プライベートクラウドとしての導入実績多数。
• 機能的にできることはOpenStackと大差ない。
• OpenStack、CloudStackの話題に隠れてしまい、いまいち盛り上がっている感じ
がしない。
81. IaaS基盤比較
2つのOSSクラウド基盤と比較した時のOpenStackの優位性は?
コミュニティが活発である
機能的な面ではCloudStackの方が優位、AWS互換という点では
Eucalyptusの方が優位。。。ユーザとしての利用を考えるとまだ発展
途中のOpenStackを選択する強い理由は今のところ見当たらないとい
うのがホンネ。
参加企業が多く開発コミュニティが活発なので、今後化ける可能性は
大いにあると思います。
83. IaaS基盤比較
パブリック
クラウド
全部パブリック使え
ばいいじゃない?
87. IaaS基盤比較
クラウド環境を自社内に構築した
いという企業にとってはOSSの
IaaS基盤は有力な選択肢になる
パブリック
クラウド
89. IaaS基盤比較
クラウドだらけ。。。
クラウド間の互換性
はどうなる?
90. IaaS基盤比較
異種クラウド間アプ
リケーションの移行
ができる
異種クラウド間を統一
管理できる(マルチクラ
ウド運用管理ソフト)
91. IaaS基盤比較
複数のクラウドのAPIを抽象化
して共通APIで操作できるよう
にする
Redhat: DeltaCloud
Citrix: OpenCloud
クラウド共通APIを作
る
95. ネットワーク機能(補足)
ホスト
Dashboard
(Horizon)
Apache NTP
Identity Image
(Keystone) (Glance) MySQL
Compute Block
Network
(Nova) Storage RabbitMQ
(quantum)
(Cinder)
QEMU Open vSwitch LVM
HW
96. ネットワーク機能(補足)
quantum-demo 0) 操作をする前に用語説明
Network Namaspace
• 仮想ネットワーク機能。1つのホスト内に独立したネットワーク空間を構築できる。
• Ubunbu12.04、Fedora16以降で利用可能。RHEL6.4以降で対応予定?
利用方法
# ip netns
Open vSwitch
• 仮想スイッチ機能
• Ubuntu12.04は利用可能。RHEL6.3未対応
管理系コマンド
# ovs-vsctl
99. ネットワーク機能(補足)
quantum-demo 1) devstack構築後のネットワーク状態
net1
qdhcp-X
ext_net
192.168.0.1
qrouter-X tapX
192.168.0.254
qg-X qr-X
10.103.2.1
eth0 br-ex br-int
ネットワークネームスペースの機能で
qrouter-x(ext_net)とqdhcp-X(net1)の仮
想ネットワーク空間が作られる。
ext_netはルータとしての役割をもつ。
net1は192.168.0.1のセグメント。
102. ネットワーク機能(補足)
quantum-demo 2) ネットワークの作成
net1
qdhcp-X
ext_net
192.168.0.1
qrouter-X tapX
192.168.0.254
qg-X qr-X qvoX VM1
192.168.0.2
10.103.2.1
eth0 br-ex br-int
新規にqdhcp-Y(testnet) 192.168.1.1
というネットワーク空間が tapX
作成される。
この状態で作成したtestnet内でのインスタ
ンス間の通信はできる状態になるが、外部
との通信はできない。 qdhcp-Y
外部への通信を実現するには次ページの
作業が必要。 testnet
103. ネットワーク機能(補足)
quantum-demo 2) ネットワークの作成
quantum上のルータのリスト
$ quantum router-list
+--------------------------------------+---------+--------------------------------------------------------+
| id | name | external_gateway_info |
+--------------------------------------+---------+--------------------------------------------------------+
| 5de02c83-4756-4241-a6c9-bfafa2c3dad7 | router1 | {"network_id": "126468b5-1850-45f9-853c-cb832c4fa183"} |
+--------------------------------------+---------+--------------------------------------------------------+
quantum上のサブネットのリスト
$ quantum subnet-list
+--------------------------------------+------------+----------------+---------------------------------------
-----------+
| id | name | cidr | allocation_pools
|
+--------------------------------------+------------+----------------+---------------------------------------
-----------+
| 292e57b4-2f0b-4fa0-9047-49cb4b7e3517 | testsubnet | 192.168.1.0/24 | {"start": "192.168.1.1", "end":
"192.168.1.253"} |
| 52d6960f-8e21-4aa9-941e-4bdbee1c0529 | | 10.103.2.0/24 | {"start": "10.103.2.1", "end":
"10.103.2.253"} |
| 916cb1dc-6244-4ba5-be88-e19e24643d09 | | 192.168.0.0/24 | {"start": "192.168.0.1", "end":
"192.168.0.253"} |
+--------------------------------------+------------+----------------+---------------------------------------
-----------+
quantumのルータに
$ quantum router-interface-add router1 testsubnet testnetを接続
Added interface to router router1
104. ネットワーク機能(補足)
quantum-demo 2) ネットワークの作成
net1
qdhcp-X
ext_net
192.168.0.1
qrouter-X tapX
192.168.0.254
qg-X qr-X qvoX VM1
192.168.0.2
10.103.2.1
eth0 br-ex br-int
192.168.1.254 192.168.1.1
qr-X tapX
testnet通信用のポート作
成&ルーティングが設定
qdhcp-Y
される。
testnet
105. ネットワーク機能(補足)
quantum-demo 3) floating ip の払い出し
floating ip の払い出し
$ quantum floatingip-create ext_net
Created a new floatingip:
接続するfloating ipと
fixed ipのuuidを確認
する。
fixed ip の確認
$ quantum port-list
+--------------------------------------+------+-------------------+----------------------------------------
----------------------------------------------+
| id | name | mac_address | fixed_ips
|
+--------------------------------------+------+-------------------+----------------------------------------
----------------------------------------------+
| 005f1846-bccc-4a16-a8e7-72214397fafe | | fa:16:3e:08:c7:dc | {"subnet_id": "52d6960f-8e21-4aa9-941e-
4bdbee1c0529", "ip_address": “10.103.2.2"} |
| 398855fd-d2c5-47a8-8f4e-b7dc38736470 | | fa:16:3e:f4:93:2c | {"subnet_id": "916cb1dc-6244-4ba5-be88-
e19e24643d09", "ip_address": "192.168.0.2"} |
(中略)
floating ip と fixed ip の紐付け
$ quantum floatingip-associate 005f1846-bccc-4a16-a8e7-72214397fafe 398855fd-d2c5-47a8-8f4e-b7dc38736470
Associated floatingip 005f1846-bccc-4a16-a8e7-72214397fafe
106. ネットワーク機能(補足)
quantum-demo 3) floating ip の払い出し
net1
qdhcp-X
ext_net
192.168.0.1
qrouter-X tapX
192.168.0.254
qg-X qr-X qvoX VM1
192.168.0.2
10.103.2.1
eth0 br-ex 10.103.2.2 br-int
192.168.100.254 192.168.100.1
qr-X tapX
floatingip-createでqg-Xに新規にVIPが
作成される。(10.103.2.2)
floatingip-associateで内部のfixedipと紐
付けを行なっている。
が、どういう技術でこれを実現しているの
qdhcp-Y
かまで追っかけられていません。(誰か
知っている人は教えてください。)
わかった人は教えてください。)
testnet