• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No1
 

OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No1

on

  • 3,385 views

 

Statistics

Views

Total Views
3,385
Views on SlideShare
3,382
Embed Views
3

Actions

Likes
9
Downloads
294
Comments
0

1 Embed 3

https://twitter.com 3

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

    OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No1 OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No1 Presentation Transcript

    • OpenStackクラウド基盤構築ハンズオンセミナー 第2日 講義資料 No.1 ver1.3 2014/03/05 1 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 目次 ■ OpenStackの主要コンポーネント ■ Nova/Cinderを構成するサービス群 ■ スケーラビリティと高可用性を実現するコンポーネント配置 ■ クライアントライブラリによるAPI操作 ■ (参考)Keystoneのトークン認証 ■ (付録)OpenStack 主要APIリスト 注意:本テキストで扱うOpenStackは、RDO(Grizzly)がベースとなります。 2 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 OpenStackの主要コンポーネント 3 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第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.
    • 第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.
    • 第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.
    • 第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.
    • 第2日 講義資料 No.1 Keystoneによるトークン認証 ■ ■ OpenStackのクライアントは複数のコンポーネントに多数のリクエストを送信するた め、リクエストごとにユーザID/パスワードで認証するのは、セキュリティ上の問題を 引き起こす可能性が高くなります。 そこで、認証サーバ(Keystone)からコンポーネントの利用許可証である「トーク ン」を取得しておき、リクエストの際はトークンIDをコンポーネントに送信します。 - リクエストを受けたコンポーネントは、トークンIDの正当性をKeystoneに問い合わせて確認し た後に、リクエストを実行します。 - 取得したトークンは一定時間(デフォルトは24時間)で有効期限が切れます。有効期限が切れ るまでは繰り返し利用できますので、リクエストごとにトークンを取得する必要はありません。 Keystoneサーバ 発行したトークンは Keystoneサーバに保管 ID=yyyy トークン発行依頼  (ユーザID/パスワードで認証) トークンIDに対応するトークンの情報を確認 (ユーザの権限を確認) トークンIDを返送 クライアント  リクエスト送信 (トークンIDを送信) 8 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第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.
    • 第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.
    • 第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.
    • 第2日 講義資料 No.1 Glanceへのテンプレートイメージ登録 (1) ■ 起動ディスクのテンプレートイメージをGlanceに登録することで、Novaから利用でき るようになります。 Keystone (ユーザ認証) Neutron (仮想ネットワーク) Horizon (ダッシュボード) Cinder (ブロックボリューム) Nova (仮想マシン) Glance (テンプレート) 12 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第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.
    • 第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.
    • 第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.
    • 第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.
    • 第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.
    • 第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.
    • 第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.
    • 第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.
    • 第2日 講義資料 No.1 Cinderによるブロックボリューム作成 ■ CinderのAPIを通して、ブロックボリュームの作成・削除・スナップショット作成など が可能です。 - 仮想マシンインスタンスにブロックボリュームを接続する際は、NovaのAPIに指示を出すと、 NovaがCinderのAPIを経由して連携処理を行います。 Keystone (ユーザ認証) Neutron (仮想ネットワーク) Horizon (ダッシュボード) Cinder (ブロックボリューム) Nova (仮想マシン) ブロックボリューム の接続 Glance (テンプレート) 21 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第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.
    • 第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.
    • 第2日 講義資料 No.1 メモとしてお使いください 24 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 メモとしてお使いください 25 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 メモとしてお使いください 26 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 Nova/Cinderを構成するサービス群 27 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第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.
    • 第2日 講義資料 No.1 メッセージングサーバについて ■ 同じコンポーネントのサービス群は、メッセージングサーバを介して相互通信します。 - 通信用途ごとの「トピック」があり、送信側は、特定のトピックにメッセージを配信します。受 信側は、購読中のトピックに入ったメッセージを定期的に取得します。 - トピックに入れるメッセージは、「購読中の受信者全員が受け取ること」「購読中の受信者のど れか1つだけが受け取ること」などの受信条件が設定されます。 - 複数のサービスが同じトピックにメッセージを配信することができますので、「N : M」の非同 期通信が実現されます。 - OpenStackでは、メッセージングサーバには、RabbitMQ、もしくは、QPIDを使用します。 メッセージングサーバ サービス トピックA メッセージ受信 サービス サービス メッセージ送信 トピックB サービス ・・・ トピックAを購読中の サービス群 29 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 qcow2ディスイメージについて ■ ■ qcow2は、仮想マシンのディスクイメージ用に設計されたイメージファイル形式で、次 のような特徴を持ちます。 ファイルサイズを動的に増加 - 論理的なディスクイメージのサイズに対して、実際にデータが書かれている分だけの物理ディス クを使用します。論理サイズの拡張も可能です。 ■ ベースイメージファイルと差分イメージファイルを分割して利用可能 - 仮想マシン起動時は、ベースイメージの内容が見えていますが、仮想マシンから書き込んだ変更 は、差分イメージファイルに書き込まれます。 - 複数の仮想マシンでベースイメージを共有することで、物理ディスクの使用量を低減することが できます。 ■ 複数のスナップショットを保持可能 - スナップショットを作成しておくと、過去のスナップショットの状態に内容を戻したり、特定の スナップショットの内容をコピーして新規イメージを作成することができます。 30 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第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.
    • 第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.
    • 第2日 講義資料 No.1 ブロックボリュームの使い方と対応するAPI OS領域 データ領域 OS領域 他の仮想マシンインスタンスに 再接続可能(同時接続は不可) データ領域 ②仮想マシンインスタンスに 接続してデータ領域として使用 ④スナップショットを複製して 新たなブロックボリュームを作成 ①新規ブロックボリュームを作成 ③スナップショット作成 テンプレート イメージ OS領域 テンプレートイメージを複製して ブロックボリュームを作成 ■ Cinder API - volume create/delete/list/show (create from snapshot, image) OS領域 - snapshot create/delete/list/show ■ Nova API - volume attach/detach 33 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 Nava/Cinder連携の全体像 ■ ■ ブロックストレージは、典型的には、iSCSIストレージ装置のLUNとして用意されます。 この時、Cinderは、iSCSIストレージ装置をコントロールする役割を持ちます。 Nova Computeは、ホストLinuxに接続したLUNを仮想ディスクとしてVM接続します。 Nova Compute VMインスタンス /dev/vdb Cinder LUNの作成・公開を指示 ストレージ装置 仮想ディスク Linux KVM /dev/sdX iSCSI LUN iSCSI Target iSCSI SW Initiator 34 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第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.
    • 第2日 講義資料 No.1 LVM/tgtdによる実装例 ■ Cinderが標準提供するLVMドライバでは、LVMで作成した論理ボリュームをtgtdで iSCSI LUNとして公開します。スナップショットの作成には、LVMのスナップショット を利用します(差分領域のサイズは、元のLVと同じサイズ)。 Nova Compute Cinder 論理ボリュームを作成して、 iSCSI LUNとして公開 VMインスタンス /dev/vdb 仮想ディスク Linux KVM /dev/sdX iSCSI LUN VG: cinder-volumes LV iSCSI SW Target (tgtd) iSCSI SW Initiator 36 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 NFSドライバの利用 ■ Cinderが標準提供するNFSドライバでは、NFSサーバ上にディスクイメージファイルを 作成して、 ComputeノードからNFSマウントして利用します。 Nova Compute Cinder VMインスタンス /dev/vdb NFSマウントして、 ディスクイメージ ファイルを作成 仮想ディスク NFSサーバ Linux KVM ・・・ ・・・ NFSマウント 37 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 GlusterFSドライバの利用 ■ GlusterFSの分散ファイルシステム上にディスクイメージを配置するドライバも提供さ れています。 - 現在は、FUSEマウントによるアクセスですが、今後、GlusterFSのAPIライブラリ(libgfapi)に よるダイレクトアクセスにも対応する予定です。 Cinder Nova Compute VMインスタンス /dev/vdb 仮想ディスク GlusterFSクラスタ FUSEマウントして、 ディスクイメージ ファイルを作成 ・・・ Linux KVM ・・・ FUSEマウント 38 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 スケーラビリティと高可用性を 実現するコンポーネント配置 39 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 コンピュートノードのスケールアウト構成 ■ コンピュートノードを追加して、起動可能な仮想マシンインスタンスの数を増やします。 コントローラノード ● ● ● ● ● APIサービス群 Horizonダッシュボード L2/L3/DHCP Agent データベース (MySQL) メッセージング (QPID) コンピュートノード ● ● ● KVMハイパーバイザ Nova Compute L2 Agent コンピュートノード ● ● ● スケールアウト KVMハイパーバイザ Nova Compute L2 Agent 40 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第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.
    • 第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.
    • 第2日 講義資料 No.1 コントローラ群の分離構成 ■ さらに、コントローラノード内のコンポーネントを別々のサーバに配置します。 データベース Keystoneサービス Glanceサービス ● データベース (MySQL) メッセージング Cinderサービス ● ネットワークノード ● L2/L3/DHCP Agent メッセージング (QPID) Novaサービス Horizon ● Horizonダッシュボード コンピュートノード コンピュートノード 43 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 APIサービス / Horizonのスケールアウト ■ APIサービス群とHorizonダッシュボードは、ロードバランサで負荷分散が可能です。 ロードバランサ ロードバランサ ロードバランサ ロードバランサ ロードバランサ Keystoneサービス スケールアウト Glanceサービス スケールアウト Cinderサービス スケールアウト Novaサービス スケールアウト Horizon スケールアウト 44 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 データベースとメッセージングのHA構成 ■ ロードバランサ自体は、HAクラスタによって可用性を高めます。データベースサーバ とメッセージングサーバーも同様にHAクラスタ化で可用性を高めます - データベース (MySQL)は、クラスタに構成して負荷分散を行うことも可能です。あまり一般的な 構成ではありませんが、「Galera Cluster (MySQL)」などの技術が利用できます。 × × × 障害発生! フェイルオーバ ロードバランサ ロードバランサ 障害発生! フェイルオーバ データベース データベース 障害発生! メッセージング フェイルオーバ メッセージング 45 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 HA/ロードバランス構成の参考資料 ■ HAクラスタのロードバランサの具体的な設定は、次の資料が参考になります。 - RDO HighlyAvailable and LoadBalanced Control Services ● http://openstack.redhat.com/RDO_HighlyAvailable_and_LoadBalanced_Control_Services 46 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 クライアントライブラリによるAPI操作 47 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第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.
    • 第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.
    • 第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.
    • 第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.
    • 第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.
    • 第2日 講義資料 No.1 メモとしてお使いください 53 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 メモとしてお使いください 54 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 (参考)Keystoneのトークン認証 55 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第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.
    • 第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.
    • 第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.
    • 第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.
    • 第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.
    • 第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.
    • 第2日 講義資料 No.1 メモとしてお使いください 62 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第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.
    • 第2日 講義資料 No.1 Keystone API ■ 一般ユーザ向けAPI 64 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 Keystone API ■ 管理ユーザ向けAPI 65 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 Glance API 66 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 Neutron API ■ Network API ■ Subnet API 67 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 Neutron API ■ Ports API 68 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 Nova API ■ Versions API ■ Extensions API ■ Limits API 69 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 Nova API ■ Server API ■ Server Metadata API 70 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 Nova API ■ Server Address API ■ Server Actions API 71 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 Nova API ■ Flavors API ■ Images API ■ Image Metadata API 72 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 Cinder API 73 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 第2日 講義資料 No.1 メモとしてお使いください 74 Copyright (C) 2014 National Institute of Informatics, All rights reserved.
    • 75 Copyright (C) 2014 National Institute of Informatics, All rights reserved.