More Related Content Similar to OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No1 Similar to OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No1 (20) More from Etsuji Nakai (20) OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No14. 第2日 講義資料 No.1
OpenStackの主要コンポーネント
■
OpenStackでは、機能別にソフトウェアをモジュール化して開発が進められています。
- Swift : オブジェクトストレージ
●
ファイル単位で出し入れするだけの単純なファイルストア
- Nova : 仮想マシンの配置決定と起動・停止処理
- Glance : 仮想マシンイメージの管理
●
バックエンドにSwift、その他のストレージを使用
- Cinder : ブロックボリュームの提供
●
サンプル実装では、Linux LVM + iSCSIソフトウェアターゲットを使用
●
外部のストレージ装置をバックエンドにすることも可能
- Keystone : 統合認証機能
- Neutron : 仮想ネットワーク管理機能(Quantumから改名)
●
仮想ネットワークの作成を外部のプラグインモジュール(SDN製品)に移譲
●
標準提供のプラグインでは、Linux bridge、もしくは、Open vSwitchを使用
- Horizon : GUIコンソールのサンプル実装
4
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
5. 第2日 講義資料 No.1
コンポーネント間の連携処理
■
Webコンソールで操作をすると、REST API経由で各モジュールに指示が飛びます。ま
た、クライアントは、各モジュールのREST APIを直接操作することも可能です。
- これにより、プログラムコードからの呼び出しによる環境操作の自動化が可能になります。
クライアントPC
パブリックネットワーク
テンプレート
イメージ保存
Webコンソールアクセス
テンプレート
イメージ検索
Network
Node
仮想ネットワーク作成
Swift
Glance
Horizon
Neutron
Nova
Nova
Nova
Nova
Compute
Compute
Compute
管理ネットワーク
仮想マシン
イメージ
テンプレート
ダウンロード
仮想マシン起動
Keystone
QPID
MySQL
認証サーバ
メッセージング
データベース
ブロックボリューム提供
(iSCSI)
Cinder
LUN
LUN
LUN
5
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
6. 第2日 講義資料 No.1
コンポーネントのAPI操作のパターン
■
コンポーネントのAPIを操作する際は、2種類のパターンがあります。
- ユーザがダッシュボード経由で各コンポーネントのAPIを操作、もしくは、直接にAPIを操作
- あるコンポーネントが他のコンポーネントに処理を依頼するためにAPIを操作
データベース
MySQL
共有データ保存
メッセージング
QPID
Keystone
(ユーザ認証)
Webブラウザ
アクセス
APIアクセス
エージェント通信の
メッセージ中継
Neutron
(仮想ネットワーク)
Horizon
(ダッシュボード)
Cinder
(ブロックボリューム)
Nova
(仮想マシン)
Glance
(テンプレート)
仮想ネットワークへの接続
ブロックボリューム
の接続
テンプレートイメージ
のダウンロード
6
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
7. 第2日 講義資料 No.1
API操作のユーザ認証
■
コンポーネントのAPIを操作する際は、ユーザ認証が必要となります。
- ユーザ、もしくは、コンポーネントは、KeystoneからAPI操作を許可する「トークン」を取得し
た後に、操作対象コンポーネントのAPIにリクエストを送信します。(各コンポーネントは、自
分自身を表す「ユーザ」がKeystoneに事前に登録されています。)
- Keystoneからトークンを取得する際に、操作対象コンポーネントのAPIのURLを併せて取得しま
す。したがって、ユーザは、KeystoneのAPIのURLだけを知っている必要があります。
Keystone
(ユーザ認証)
Neutron
(仮想ネットワーク)
Horizon
(ダッシュボード)
Cinder
(ブロックボリューム)
Nova
(仮想マシン)
Glance
(テンプレート)
7
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
9. 第2日 講義資料 No.1
Keystoneのコマンド操作例 (1)
■
OpenStack標準のコマンドラインツールは、環境変数でユーザ/パスワード/操作対象テ
ナント/Keystone APIのベースURLを指定します。
- Keystone APIは、管理ユーザ用と一般ユーザ用でURL(ポート番号)が異なります。
- 引数でユーザ等を指定した場合は、そちらが優先されます。
- 次はデフォルトの管理ユーザ「admin」でKeystoneを操作する例です。
Packstackでインストールすると
# cat keystonerc_admin
export OS_USERNAME=admin
/root以下に自動生成されます。
export OS_TENANT_NAME=admin
export OS_PASSWORD=714f1ab569a64a3b
export OS_AUTH_URL=http://172.16.1.11:35357/v2.0/
export PS1='[u@h W(keystone_admin)]$ '
管理ユーザの場合は
ポート番号35357
# . keystonerc_admin
# keystone user-list
+----------------------------------+------------+---------+-------------------+
|
id
|
name
| enabled |
email
|
+----------------------------------+------------+---------+-------------------+
| 589a800d70534655bfade5504958afd6 |
admin
|
True |
test@test.com
|
| 3c45a1f5a88d4c1d8fb07b51ed72cd55 |
cinder
|
True | cinder@localhost |
| f23d88041e5245ee8cc8b0a5c3ec3f6c | demo_admin |
True |
|
| 44be5165fdf64bd5907d07aa1aaa5dab | demo_user |
True |
|
| cd75770810634ed3a09d92b61aacf0a7 |
glance
|
True | glance@localhost |
| a38561ed906e48468cf1759918735c53 |
nova
|
True |
nova@localhost |
| 157c8846521846e0abdd16895dc8f024 | quantum
|
True | quantum@localhost |
+----------------------------------+------------+---------+-------------------+
9
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
10. 第2日 講義資料 No.1
Keystoneのコマンド操作例 (2)
■
次はKeystoneに登録されたサービスと、対応するAPIのURLを表示しています。
- 各コンポーネントのコマンドラインツールは、これでリクエストを送信するAPIを確認します。
# keystone service-list
+----------------------------------+----------+----------+----------------------------+
|
id
|
name
|
type
|
description
|
+----------------------------------+----------+----------+----------------------------+
| 5ea55cbee90546d1abace7f71808ad73 | cinder | volume |
Cinder Service
|
| e92e73a765be4beca9f12f5f5d9943e0 | glance | image
| Openstack Image Service
|
| 3631d835081344eb873f1d0d5057314d | keystone | identity | OpenStack Identity Service |
| 8db624ad713e440492aeccac6ab70a90 |
nova
| compute | Openstack Compute Service |
| e9f02d3803ab44f1a369602010864a34 | nova_ec2 |
ec2
|
EC2 Service
|
| 5889a1e691584e539aa121ab31194cca | quantum | network | Quantum Networking Service |
+----------------------------------+----------+----------+----------------------------+
# keystone endpoint-list
+----------------------------------+-----------+------------------------------------------||-+----------------------------------+
|
id
|
region |
publicurl
|| |
service_id
|
+----------------------------------+-----------+------------------------------------------||-+----------------------------------+
| 0e96a30d9ce742ecb0bf123eebf84ac0 | RegionOne | http://172.16.1.11:8774/v2/%(tenant_id)s || | 8db624ad713e440492aeccac6ab70a90 |
| 928a38f18cc54040a0aa53bd3da99390 | RegionOne |
http://172.16.1.11:9696/
|| | 5889a1e691584e539aa121ab31194cca |
| d46cebe4806b43c4b48499285713ac7a | RegionOne |
http://172.16.1.11:9292
|| | e92e73a765be4beca9f12f5f5d9943e0 |
| ebdd4e61571945b7801554908caf5bae | RegionOne | http://172.16.1.11:8776/v1/%(tenant_id)s || | 5ea55cbee90546d1abace7f71808ad73 |
| ebec661dd65b4d4bb12fe67c25b2c77a | RegionOne |
http://172.16.1.11:5000/v2.0
|| | 3631d835081344eb873f1d0d5057314d |
| f569475b6d364a04837af6d6a577befe | RegionOne | http://172.16.1.11:8773/services/Cloud || | e9f02d3803ab44f1a369602010864a34 |
+----------------------------------+-----------+------------------------------------------||-+----------------------------------+
# keystone endpoint-get --service compute
+-------------------+--------------------------------------------------------------+
|
Property
|
Value
|
+-------------------+--------------------------------------------------------------+
| compute.publicURL | http://172.16.99.11:8774/v2/11f9297918c040eab1f1ec2d50d5564c |
+-------------------+--------------------------------------------------------------+
10
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
11. 第2日 講義資料 No.1
Keystoneのコマンド操作例 (3)
■
各コマンドラインツールは、「helpサブコマンド」でサブコマンドの一覧や各サブコマ
ンドの詳細が確認できます。
# keystone help
# keystone help user-list
← サブコマンドの一覧
← サブコマンド「user-list」の詳細説明
11
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
12. 第2日 講義資料 No.1
Glanceへのテンプレートイメージ登録 (1)
■
起動ディスクのテンプレートイメージをGlanceに登録することで、Novaから利用でき
るようになります。
Keystone
(ユーザ認証)
Neutron
(仮想ネットワーク)
Horizon
(ダッシュボード)
Cinder
(ブロックボリューム)
Nova
(仮想マシン)
Glance
(テンプレート)
12
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
13. 第2日 講義資料 No.1
Glanceへのテンプレートイメージ登録 (2)
■
次は、一般ユーザ「demo_user」で、テンプレートイメージをインターネットからダウ
ンロードして登録する例です。
このファイルは
自分で用意します。
一般ユーザの場合は
ポート番号5000
# cat keystonerc_demo_user
export OS_USERNAME=demo_user
export OS_TENANT_NAME=demo
export OS_PASSWORD=passw0rd
export OS_AUTH_URL=http://172.16.1.11:5000/v2.0/
export PS1='[u@h W(keystone_demouser)]$ '
# . keystonerc_demo_user
# glance image-create --name "Fedora19"
--disk-format qcow2 --container-format bare --is-public true
--copy-from http://cloud.fedoraproject.org/fedora-19.x86_64.qcow2
# glance image-list
+--------------------------------------+----------+-------------+------------------+-----------+--------+
| ID
| Name
| Disk Format | Container Format | Size
| Status |
+--------------------------------------+----------+-------------+------------------+-----------+--------+
| 702d0c4e-b06c-4c15-85e5-9bb612eb6414 | Fedora19 | qcow2
| bare
| 237371392 | active |
+--------------------------------------+----------+-------------+------------------+-----------+--------+
13
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
14. 第2日 講義資料 No.1
Neutronによる仮想ネットワーク作成
■
NeutronのAPIを通して、プロジェクトごとに独立した仮想ネットワークを用意します。
- Neutronのコマンド操作の詳細は、「第2日 講義資料 No.2」で説明します。
Keystone
(ユーザ認証)
Neutron
(仮想ネットワーク)
Horizon
(ダッシュボード)
Cinder
(ブロックボリューム)
Nova
(仮想マシン)
Glance
(テンプレート)
コマンド名は旧名称のquantumです。
Havanaではneutronに変わります。
# . keystonerc_demo_user
# quantum net-list
+--------------------------------------+-------------+-------------------------------------------------------+
| id
| name
| subnets
|
+--------------------------------------+-------------+-------------------------------------------------------+
| 843a1586-6082-4e9f-950f-d44daa83358c | private01
| 9888df89-a17d-4f4c-b427-f28cffe8fed2 192.168.101.0/24 |
| d3c763f0-ebf0-4717-b3fc-cda69bcd1957 | private02
| 23b26d98-2277-4fb5-8895-3f42cde7e1fd 192.168.102.0/24 |
| d8040897-44b0-46eb-9c51-149dfe351bbe | ext-network | 1b8604a4-f39d-49de-a97c-3e40117a7516 192.168.199.0/24 |
+--------------------------------------+-------------+-------------------------------------------------------+
14
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
15. 第2日 講義資料 No.1
Novaによる仮想マシンインスタンス起動
■
NovaのAPIに仮想マシンインスタンスの起動を指示すると、Glance / Netronと連携し
て、インスタンスの起動と仮想ネットワーク接続の処理が行われます。
- Novaは、Glance APIを通じて、テンプレートイメージをコンピュートノードにコピーします。
- 同じく、Neutron APIを通じて、仮想マシンインスタンスを仮想ネットワークに接続します。
Keystone
(ユーザ認証)
Neutron
(仮想ネットワーク)
Horizon
(ダッシュボード)
Cinder
(ブロックボリューム)
Nova
(仮想マシン)
Glance
(テンプレート)
仮想ネットワークへの接続
テンプレートイメージ
のダウンロード
15
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
16. 第2日 講義資料 No.1
コマンドによる仮想マシンインスタンス起動 (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からGlance APIを呼び出して
情報を取得しています。
# nova image-list
+--------------------------------------+----------+--------+--------+
| ID
| Name
| Status | Server |
+--------------------------------------+----------+--------+--------+
| 702d0c4e-b06c-4c15-85e5-9bb612eb6414 | Fedora19 | ACTIVE |
|
+--------------------------------------+----------+--------+--------+
# nova secgroup-list
+---------+-------------+
| Name
| Description |
+---------+-------------+
| default | default
|
+---------+-------------+
NovaからNeutron APIを呼び出して
情報を取得しています。
# 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 |
+--------------------------------------+-------------+------+
16
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
17. 第2日 講義資料 No.1
コマンドによる仮想マシンインスタンス起動 (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 |
+--------------------------------------+------+--------+-------------------------+
17
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
18. 第2日 講義資料 No.1
コマンドによる仮想マシンインスタンス起動 (3)
■
「カスタマイズスクリプト」を使用する際は、スクリプトを記載したファイルを用意し
て、「--user-data」オプションで指定します。
- 次の例では、カスタマイズスクリプトを指定して仮想マシンインスタンスを起動した後、フロー
ティングIPを割り当てて、実際にログインしています。
# cat hello.txt
#!/bin/sh
echo '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 fedora@172.16.1.101
The 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 ~]$
18
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
19. 第2日 講義資料 No.1
Neutron APIによるフローティングIPの割り当て
■
仮想マシンインスタンスが複数の仮想NICを持つ場合、仮想NICを指定してフローティ
ングIPを割り当てるには、Neutron APIを使用する必要があります。
- プライベートIPに対応するポートIDを確認して、ポートIDを指定して割り当てます。
# nova boot --flavor m1.small --image Fedora19 --key-name mykey --security-groups default
--nic net-id=843a1586-6082-4e9f-950f-d44daa83358c
--nic net-id=d3c763f0-ebf0-4717-b3fc-cda69bcd1957
Vm01
# nova list
+--------------------------------------+------+--------+--------------------------------------------------+
| ID
| Name | Status | Networks
|
+--------------------------------------+------+--------+--------------------------------------------------+
| e8d0fa19-130f-4502-acfe-132962134846 | vm01 | ACTIVE | private01=192.168.101.3; private02=192.168.102.3 |
+--------------------------------------+------+--------+--------------------------------------------------+
# quantum port-list
+--------------------------------------+------+-------------------+------------------------------------+
| id
| name | mac_address
| fixed_ips
|
+--------------------------------------+------+-------------------+------------------------------------+
| 10c3cd17-78f5-443f-952e-1e3e427e477f |
| fa:16:3e:37:7b:a6 | ... "ip_address": "192.168.102.3"} |
| d0057651-e1e4-434c-a81d-c950b9c06333 |
| fa:16:3e:e6:d9:4c | ... "ip_address": "192.168.101.3"} |
+--------------------------------------+------+-------------------+------------------------------------+
# quantum floatingip-list
+--------------------------------------+------------------+---------------------+---------+
| id
| fixed_ip_address | floating_ip_address | port_id |
+--------------------------------------+------------------+---------------------+---------+
| 06d24f23-c2cc-471f-a4e6-59cf00578141 |
| 171.16.1.101
|
|
| 89b49a78-8fd7-461b-8fe2-fba4a341c8a2 |
| 172.16.1.102
|
|
+--------------------------------------+------------------+---------------------+---------+
# quantum floatingip-associate 06d24f23-c2cc-471f-a4e6-59cf00578141 d0057651-e1e4-434c-a81d-c950b9c06333
19
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
20. 第2日 講義資料 No.1
キーペアとセキュリティグループの操作
■
キーペアの作成・登録、セキュリティグループの追加など、セキュリティ関連の操作も
novaコマンドで実施できます。
- 次は、キーペア「key01」を作成・登録して、秘密鍵を「~/.ssh/key01.pem」に保存します。
# nova keypair-add key01 > ~/.ssh/key01.pem
# chmod 600 ~/.ssh/key01.pem
- 次は、既存のキーペアについて、公開鍵を「key02」として登録します。
# nova keypair-add --pub-key ~/.ssh/id_rsa.pub key02
- 次は、セキュリティグループ「group01」を作成して、TCP22番ポートへのアクセスを許可しま
す。
# nova secgroup-create group01 "My security group."
# nova secgroup-add-rule group01 tcp 22 22 0.0.0.0/0
■
セキュリティグループについては、今後、novaコマンドでは設定できない機能が追加されていく可
能性があるため、quantum (neutron) コマンドでの設定方法も知っておくとよいでしょう。
# quantum security-group-create group01 --description "My security group."
# quantum security-group-rule-create --protocol tcp
--port-range-min 22 --port-range-max 22
--remote-ip-prefix "0.0.0.0/0" group01
20
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
22. 第2日 講義資料 No.1
Cinderによるブロックボリューム作成
■
次は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 auto
+----------+--------------------------------------+
| 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
22
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
23. 第2日 講義資料 No.1
ブロックボリュームからのインスタンス起動
■
テンプレートイメージを複製してブロックボリュームを作成すると、ブロックボリュー
ムから仮想マシンインスタンスを起動できるようになります。
- 次は、既存のテンプレートイメージからブロックボリュームを作成して、仮想マシンインスタン
スを起動する例です。(起動時の「--image」オプションは意味を持ちませんが、ダミーで指定
する必要があります。)
テンプレートイメージのID
# cinder create --image-id 702d0c4e-b06c-4c15-85e5-9bb612eb6414 --display-name Fedora19-bootvol 5
# cinder list
+--------------------------------------+-----------+------------------+------+-------------+----------+-------------+
|
ID
|
Status |
Display Name
| Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+------------------+------+-------------+----------+-------------+
| 78b4d23b-3b57-4a38-9f6e-10e5048170ef | available |
volume01
| 5
|
None
| false
|
|
| bdde9405-8be7-48d5-a879-35e37c97512f | available | Fedora19-bootvol | 5
|
None
|
true
|
|
+--------------------------------------+-----------+------------------+------+-------------+----------+-------------+
# nova boot --flavor m1.small --image Fedora19 --key-name mykey
--security-groups default --nic net-id=843a1586-6082-4e9f-950f-d44daa83358c
--block_device_mapping vda=bdde9405-8be7-48d5-a879-35e37c97512f:::0 vm02
ブロックボリュームのID
インスタンス停止時にボリュームを
削除するかどうか
# nova volume-list
+----------||-----------+-----------+------------------+------+-------------+--------------------------------------+
| ID
||
| Status
| Display Name
| Size | Volume Type | Attached to
|
+----------||-----------+-----------+------------------+------+-------------+--------------------------------------+
| 78b4d23b-||e5048170ef | available | volume01
| 5
| None
|
|
| bdde9405-||e37c97512f | in-use
| Fedora19-bootvol | 5
| None
| b4cb7edd-317f-44e9-97db-5a04c41a4510 |
+----------||-----------+-----------+------------------+------+-------------+--------------------------------------+
23
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
28. 第2日 講義資料 No.1
Novaを構成するサービス群
コントローラノード
Nova API
REST APIを提供
コンピュートノード
特定のハイパーバイザに
対応するためのドライバ
Nova Compute
インスタンスを起動
するノードを決定
Compute Driver
Libvirt
インスタンス
起動指示
Nova Scheduler
起動
仮想マシン
インスタンス
仮想マシン
インスタンス
qcow2
オーバーレイファイル
リソース情報確認
qcow2
オーバーレイファイル
リソース情報更新
Nova Conductor
DBアクセスの
Proxyサービス
Database
Glance
/var/lib/nova/instances/<ID>
オーバーレイ
テンプレートイメージ
ダウンロード
メッセージングサーバ経由の通信
ダウンロードしたイメージは
キャッシュして再利用
qcow2
ベースイメージ
/var/lib/nova/instances/_base
28
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
29. 第2日 講義資料 No.1
メッセージングサーバについて
■
同じコンポーネントのサービス群は、メッセージングサーバを介して相互通信します。
- 通信用途ごとの「トピック」があり、送信側は、特定のトピックにメッセージを配信します。受
信側は、購読中のトピックに入ったメッセージを定期的に取得します。
- トピックに入れるメッセージは、「購読中の受信者全員が受け取ること」「購読中の受信者のど
れか1つだけが受け取ること」などの受信条件が設定されます。
- 複数のサービスが同じトピックにメッセージを配信することができますので、「N : M」の非同
期通信が実現されます。
- OpenStackでは、メッセージングサーバには、RabbitMQ、もしくは、QPIDを使用します。
メッセージングサーバ
サービス
トピックA
メッセージ受信
サービス
サービス
メッセージ送信
トピックB
サービス
・・・
トピックAを購読中の
サービス群
29
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
31. 第2日 講義資料 No.1
qcow2ディスイメージの操作
■
qcow2ディスクイメージは、qemu-imgコマンドで操作します。
5GBのイメージファイルを作成
# qemu-img create -f qcow2 baseimage.qcow2 5G
Formatting 'baseimage.qcow2', fmt=qcow2 size=5368709120 encryption=off
cluster_size=65536 lazy_refcounts=off
baseimg.qcow2をベースとして
差分イメージを作成
# qemu-img create -f qcow2 -b baseimage.qcow2 layerimage.qcow2
Formatting 'layerimage.qcow2', fmt=qcow2 size=5368709120
backing_file='baseimage.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off
# qemu-img info layerimage.qcow2
image: layerimage.qcow2
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: 196K
cluster_size: 65536
backing file: baseimage.qcow2
スナップショットを作成
# qemu-img snapshot -c snap01 layerimage.qcow2
# qemu-img snapshot -l layerimage.qcow2
Snapshot list:
ID
TAG
VM SIZE
DATE
VM CLOCK
1
snap01
0 2013-11-22 17:08:02
00:00:00.000
スナップショットから
新規イメージを複製
# qemu-img convert -f qcow2 -O qcow2 -s snap01 layerimage.qcow2 copiedimage.qcow2
(参考)
https://access.redhat.com/site/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html-single/
Virtualization_Administration_Guide/index.html#sect-Virtualization-Tips_and_tricks-Using_qemu_img
31
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
32. 第2日 講義資料 No.1
公開鍵の書き込みについて
■
■
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による公開鍵設定が必須となります。
32
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
35. 第2日 講義資料 No.1
Cinderを構成するサービス群
■
ストレージ装置ごとに対応するVolume DriverがLUNの構成を実施します。
- 複数タイプのストレージ装置を利用する場合、Cinder Schedulerが使用するストレージを選択し
ます。
コントローラノード
REST APIを提供
Cinder API
Cinder-Volume
特定のストレージ装置に
対応するためのドライバ
ストレージ装置
Volume Driver
ボリュームの
情報を共有
Cinder Scheduler
ボリュームの特性に
応じたドライバの選択
LUN
iSCSI接続
Database
メッセージングサーバ経由の通信
ドライバの指示に従って
LUNを用意して公開
iSCSIでホストLinuxに
接続したLUNを仮想ディスク
としてVMにアタッチ
Nova Compute
REST APIを提供
Nova API
35
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
41. 第2日 講義資料 No.1
ネットワークノードの分離構成 (1)
■
ネットワークノードを独立させて、ネットワーク処理の性能を確保します。
- ネットワークノード自身をスケールアウトさせる際は、外部のSDNコンポーネントの利用が必要
です。OpenStack標準機能としてのネットワークノードのスケールアウト機能は、現在開発計画
中です。
コントローラノード
●
●
●
●
APIサービス群
Horizonダッシュボード
データベース (MySQL)
メッセージング (QPID)
コンピュートノード
●
●
●
KVMハイパーバイザ
Nova Compute
L2 Agent
ネットワークノード
●
L2/L3/DHCP Agent
コンピュートノード
●
●
●
KVMハイパーバイザ
Nova Compute
L2 Agent
スケールアウト
41
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
42. 第2日 講義資料 No.1
ネットワークノードの分離構成 (2)
■
下図は、ネットワークノードを分離した場合のネットワーク構成例です。
パブリックネットワーク
プライベートネットワーク
eth0
eth0
IP
IP
eth1
eth2
br-ex
br-priv
br-int
NAT
コントローラノード
ネットワークノード
eth0
IP
eth1
br-priv
eth0
IP
eth1
br-priv
br-int
br-int
VM
・・・
VM
コンピュートノード
42
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
44. 第2日 講義資料 No.1
APIサービス / Horizonのスケールアウト
■
APIサービス群とHorizonダッシュボードは、ロードバランサで負荷分散が可能です。
ロードバランサ
ロードバランサ
ロードバランサ
ロードバランサ
ロードバランサ
Keystoneサービス
スケールアウト
Glanceサービス
スケールアウト
Cinderサービス
スケールアウト
Novaサービス
スケールアウト
Horizon
スケールアウト
44
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
48. 第2日 講義資料 No.1
Python用クライアントライブラリ
■
Python用のクライアントライブラリを使用 startvm.py
すると、Pythonスクリプトを用いて、
#!/usr/bin/python
import os
OpenStackのAPIを操作することができま
import novaclient.v1_1.client as nvclient
す。右図は仮想マシンインスタンスを起動す # Network ID to which the instance will attach.
netid='541bb203-f13c-4eb7-ac91-2432b389572f'
る簡単なスクリプトの例です
- 本講座の演習環境では、下記のクライアントラ
イブラリのパッケージが導入されています。
# rpm -qa | grep -E "python-.*client"
python-cinderclient-1.0.4-1.fc19.noarch
python-novaclient-2.13.0-1.fc18.noarch
python-glanceclient-0.9.0-3.fc19.noarch
python-quantumclient-2.2.1-3.fc19.noarch
python-keystoneclient-0.2.3-7.fc19.noarch
python-swiftclient-1.4.0-1.fc19.noarch
実行例
creds = {}
creds['username'] = os.environ['OS_USERNAME']
creds['api_key'] = os.environ['OS_PASSWORD']
creds['auth_url'] = os.environ['OS_AUTH_URL']
creds['project_id'] = os.environ['OS_TENANT_NAME']
nova = nvclient.Client(**creds)
image = nova.images.find(name="Fedora19")
flavor = nova.flavors.find(name="m1.tiny")
instance = nova.servers.create(
name="test", image=image, flavor=flavor,
key_name="mykey", nics=[{'net-id':netid}])
# cat keystonerc_demo_user
export OS_USERNAME=demo_user
export OS_TENANT_NAME=demo
export OS_PASSWORD=passw0rd
export OS_AUTH_URL=http://172.16.1.11:5000/v2.0/
export PS1='[u@h W(keystone_demo_user)]$ '
# . keystonerc_demo_user
# ./startvm.py
# nova list
+--------------------------------------+------+--------+-------------------------+
| ID
| Name | Status | Networks
|
+--------------------------------------+------+--------+-------------------------+
| 3002c2db-b7ea-4e02-8460-ff570a07a215 | test | ACTIVE | private01=192.168.101.3 |
+--------------------------------------+------+--------+-------------------------+
48
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
49. 第2日 講義資料 No.1
クライアントライブラリの使い方 (1)
■
クライアントライブラリを使用する際は、はじめに各モジュール(Keystone, Nova,
Cinder, Glance)のクライアントオブジェクトを取得します。
- 下図は、クライアントオブジェクト(keystone, nova, cinder, glance)を取得するサンプルで
す。コマンドラインツールと同じ環境変数をセットした状態で実行します。
clients.py
#!/usr/bin/python
import os
import keystoneclient.v2_0.client as kclient
import novaclient.v1_1.client as nclient
import glanceclient.v1.client as gclient
import cinderclient.v1.client as cclient
_keystone_creds = {}
_keystone_creds['username'] = os.environ['OS_USERNAME']
_keystone_creds['password'] = os.environ['OS_PASSWORD']
_keystone_creds['auth_url'] = os.environ['OS_AUTH_URL']
_keystone_creds['tenant_name'] = os.environ['OS_TENANT_NAME']
_nova_creds = {}
_nova_creds['username'] = os.environ['OS_USERNAME']
_nova_creds['api_key'] = os.environ['OS_PASSWORD']
_nova_creds['auth_url'] = os.environ['OS_AUTH_URL']
_nova_creds['project_id'] = os.environ['OS_TENANT_NAME']
keystone = kclient.Client(**_keystone_creds)
nova = nclient.Client(**_nova_creds)
cinder = cclient.Client(**_nova_creds)
_glance_ep = keystone.service_catalog.url_for(
service_type='image', endpoint_type='publicURL')
glance = gclient.Client(_glance_ep, token=keystone.auth_token)
49
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
50. 第2日 講義資料 No.1
クライアントライブラリの使い方 (2)
■
先に取得したクライアントオブジェクトは、自身が管理する各種コンポーネントのマ
ネージャオブジェクトをメンバに持ちます。マネージャオブジェクトのメソッドで、
個々のコンポーネントを表すオブジェクトを取得して利用します。Glance, Cinder,
Novaの主要なマネージャオブジェクトは次のとおりです。
- Glance
●
glance.images: Imageマネージャ(imageオブジェクトを扱う)
- Cinder
●
cinder.volumes: Volumeマネージャ(volumeオブジェクトを扱う)
●
cinder.volume_snapshots: Snapshotマネージャ(snapshotオブジェクトを扱う)
- Nova
●
nova.servers: Serverマネージャ(serverオブジェクトを扱う)
●
nova.floating_ips: Floating IPマネージャ(floating_ipオブジェクトを扱う)
●
nova.security_groups: Security Groupマネージャ(security_groupオブジェクトを扱う)
●
nova.security_group_rules: Security Group Rulesマネージャ(security_group_ruleオブジェクトを扱う)
●
nova.flavors: Flavorマネージャ(flavorオブジェクトを取り扱う)
●
nova.keypairs: Keypairマネージャ(keypairオブジェクトを取り扱う)
●
その他に「nova.images」と「nova.networks」のマネージャから、imageオブジェクトとnetworkオブジェ
クトが扱えます。本来は、CinderとNeutronのクライアントを使うべきですが、インスタンス起動時にテンプ
レートやネットワークのIDを検索する際など、簡易的に利用するのに便利です。
50
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
51. 第2日 講義資料 No.1
クライアントライブラリの使い方 (3)
■
次は、仮想マシンインスタンスを起動して、ブロックボリュームを作成・接続した後、
フローティングIPを割り当てるサンプルです。
- 先の「clients.py」と同じディレクトリに置いて実行します。
launch_vm.py
#!/usr/bin/python
from clients import nova, glance, cinder
import time
image = nova.images.find(name='Fedora19')
flavor = nova.flavors.find(name='m1.tiny')
net = nova.networks.find(label='private01')
instance = nova.servers.create(
name="vm01", image=image, flavor=flavor,
key_name="mykey", nics=[{'net-id':net.id}])
volume = cinder.volumes.create(size=1, display_name='volume01')
while instance.status == 'BUILD':
print "Waiting status to be active."
time.sleep(10)
instance = nova.servers.get(instance.id)
while volume.status == 'creating':
time.sleep(1)
volume = cinder.volumes.get(volume.id)
nova.volumes.create_server_volume(instance.id, volume.id, '/dev/vdb')
for floating_ip in nova.floating_ips.list():
if floating_ip.instance_id == None:
instance.add_floating_ip(floating_ip)
print "Floating IP: %s" % floating_ip.ip
break
51
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
52. 第2日 講義資料 No.1
クライアントライブラリの参考資料
■
OpenStackのPython Client Libraryの使い方をサンプルコードで紹介
- http://d.hatena.ne.jp/enakai00/20131215/1387109226
■
各マネージャとコンポーネントオブジェクトの主要メソッドは、下記のオンラインドキュメントで
確認します。
#
#
#
#
#
#
#
#
#
#
#
pydoc
pydoc
pydoc
pydoc
pydoc
pydoc
pydoc
pydoc
pydoc
pydoc
pydoc
glanceclient.v1.images
cinderclient.v1.volumes
cinderclient.v1.volume_snapshots
novaclient.v1_1.servers
novaclient.v1_1.flavors
novaclient.v1_1.floating_ips
novaclient.v1_1.security_groups
novaclient.v1_1.security_group_rules
novaclient.v1_1.keypairs
novaclient.v1_1.images
novaclient.v1_1.networks
52
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
56. 第2日 講義資料 No.1
Keystoneによる認証処理の流れ (1)
■
OpenStackのサービスを利用するユーザは、Keystoneから「トークン」(サービス利用
証)を取得して、該当サービスのAPIにリクエストを送信します。
- トークン本体はKeystone内部に保管されており、ユーザはトークンを特定するIDをAPIに送信し
ます。一定時間(デフォルトでは24時間)経過すると保管されたトークンは破棄されます。
ユーザ
ユーザ名/パスワード送信
ID=xxxx
ID=xxxx
UnscopedトークンID返送
ここで、自分が利用できる
プロジェクトが分かる
特定のプロジェクトを利用
するためのトークン
(Scopedトークン)を要求
Keystone
プロジェクト情報リクエスト
※ UnscopedトークンIDの代わりに
ユーザ名/パスワードを送信してもよい
ID=xxxx
プロジェクト情報返送
Scopedトークン生成要求
ID=yyyy
ID=xxxx
トークンIDと併せて、
各サービスAPIのURL
が返送される
Unscopedトークン生成
ID=yyyy
ScopedトークンID返送
Scopedトークン生成
56
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
57. 第2日 講義資料 No.1
Keystoneによる認証処理の流れ (2)
■
エンドユーザは、サービスエンドポイント(サービスのAPI)にScopedトークンのIDと
共にサービスのリクエストを送信します。
- サービスエンドポイントは、トークンIDを元に該当ユーザの属性をKeystoneから取得して、サー
ビスの利用可否を判断します。
Keystone
サービスエンドポイント
ユーザ
先にURLを取得した
サービスAPIリクエスト
ID=yyyy
サービスリクエスト
ID=yyyy
Scopedトークン
ユーザ属性取得
ID=yyyy
ユーザ属性返送
ユーザ属性に応じて、
リクエストを処理
リクエスト処理結果返送
57
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
58. 第2日 講義資料 No.1
Keystoneに対するリクエスト/レスポンスの例 (1)
■
Unscopedトークンを取得する例です。
ID=xxxx
[POST] http://keystone:5000/tokens
Header:
{'Content-Type': 'application/json'}
Request:
{
"auth":{
"passwordCredentials":{
"username":"demo_user",
"password":"xxxxxxxx"
}
}
}
(参考)これを実行するPythonスクリプトの例
http://d.hatena.ne.jp/enakai00/20131120/1385022558
Responce:
{
"access": {
"token": {
"issued_at": "2013-11-21T08:36:25.921898",
"expires": "2013-11-22T08:36:25Z",
"id": "149226c5f191445b90d7bb45925ed9f1"
},
"serviceCatalog": [],
UnscopedトークンのID
"user": {
"username": "demo_user",
"roles_links": [],
"id": "44be5165fdf64bd5907d07aa1aaa5dab",
"roles": [],
"name": "demo_user"
},
"metadata": {
"is_admin": 0,
"roles": []
}
}
}
58
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
59. 第2日 講義資料 No.1
Keystoneに対するリクエスト/レスポンスの例 (2)
■
Unscopedトークンを利用して、プロジェクト情報を取得する例です。
ID=xxxx
[GET] http://keystone:5000/tenants
Header:
{'Content-Type': 'application/json',
'X-Auth-Token': '149226c5f191445b90d7bb45925ed9f1'}
Responce:
{
"tenants": [
{
ユーザが属する
"enabled": true,
プロジェクト
"description": "",
"name": "production",
"id": "ee18bc8d37184ed0b013cd612c92f45a"
},
{
ユーザが属する
"enabled": true,
プロジェクト
"description": "",
"name": "demo",
"id": "f057a8457a8144b48fded7e6ba644e92"
}
],
"tenants_links": []
}
59
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
60. 第2日 講義資料 No.1
Keystoneに対するリクエスト/レスポンスの例 (3)
■
Scopedトークンを取得する例です。
ID=xxxx
ID=yyyy
[POST] http://keystone:5000/tokens
Header:
{'Content-Type': 'application/json'}
Request:
{
"auth":{
"tenantName":"demo",
"token":{
"id":"149226c5f191445b90d7bb45925ed9f1"
}
}
}
レスポンスは次ページ参照
60
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
61. 第2日 講義資料 No.1
Keystoneに対するリクエスト/レスポンスの例 (4)
■
Scopedトークン取得に対するレスポンスです。
Responce:
{
"access": {
"token": {
"issued_at": "2013-11-21T08:36:33.995777",
"expires": "2013-11-22T08:36:25Z",
"id": "8312676d28b546d0b801b7b44dfdf70f",
ScopedトークンのID
"tenant": {
"enabled": true,
"description": "",
"name": "demo",
"id": "f057a8457a8144b48fded7e6ba644e92"
}
},
"serviceCatalog": [
{
サービスエンドポイントの情報
"endpoints_links": [],
"endpoints": [
{
"adminURL": "http://10.64.200.97:8774/v2/f057a8457a8144b48fded7e6ba644e92",
"region": "RegionOne",
"publicURL": "http://10.64.200.97:8774/v2/f057a8457a8144b48fded7e6ba644e92",
"internalURL": "http://10.64.200.97:8774/v2/f057a8457a8144b48fded7e6ba644e92",
"id": "9aed292e70e9468499dd6c77e7a258f3"
}
],
"type": "compute",
"name": "nova"
},
...
61
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
63. 第2日 講義資料 No.1
(付録)OpenStack 主要APIリスト
(参考)OpenStack API Reference http://api.openstack.org/api-ref.html
63
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
64. 第2日 講義資料 No.1
Keystone API
■
一般ユーザ向けAPI
64
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
65. 第2日 講義資料 No.1
Keystone API
■
管理ユーザ向けAPI
65
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
66. 第2日 講義資料 No.1
Glance API
66
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
67. 第2日 講義資料 No.1
Neutron API
■
Network API
■
Subnet API
67
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
68. 第2日 講義資料 No.1
Neutron API
■
Ports API
68
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
69. 第2日 講義資料 No.1
Nova API
■
Versions API
■
Extensions API
■
Limits API
69
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
70. 第2日 講義資料 No.1
Nova API
■
Server API
■
Server Metadata API
70
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
71. 第2日 講義資料 No.1
Nova API
■
Server Address API
■
Server Actions API
71
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
72. 第2日 講義資料 No.1
Nova API
■
Flavors API
■
Images API
■
Image Metadata API
72
Copyright (C) 2014 National Institute of Informatics, All rights reserved.
73. 第2日 講義資料 No.1
Cinder API
73
Copyright (C) 2014 National Institute of Informatics, All rights reserved.