ここからは、あなたがOpenStackが稼働している環境を持っていると想定して進めます。この節は環境の構築と情報収集に役立つでしょう。
OpenStack command line interface (CLI) クライアントツールとOpenStackダッシュボードを組み合わせて使うことをおすすめします。他のクラウド技術の経験を持つユーザーは、EC2互換APIを使っているかも知れませんが、それとは命名規則が少々異なります。それらの違いは必要に応じて補足します。
コマンドラインツールは、UbuntuやFedoraのパッケージからではなく、Python Package Index(PyPI) (https://pypi.python.org/) から導入することを強くおすすめします。クライアントツールは開発が活発であり、OSベンダーが配布しているパッケージのバージョンが古くなりがちなためです。
「pip」ユーティリティはPyPIアーカイブからパッケージを導入するために使われます。そして、多くのLinuxディストリビューションでは「pip」ユーティリティは「python-pip」パッケージに含まれています。各OpenStackプロジェクトはそれぞれクライアントを持ちますので、あなたの環境で動かすサービスに合わせて、以下のパッケージを導入してください。
PyPIアーカイブからpipを使ってパッケージをインストール (もしくはアップグレード)するには、rootとして、
# pip install [--upgrade] <package-name>
パッケージを削除するには、
# pip uninstall <package-name>
もし新しいバージョンのクライアントが必要な場合、-e
フラグを指定することで、アップストリームのgitリポジトリから直接導入できます。その際は、Python egg名を指定しなければいけません。例えば、
# pip install -e git+https://github.com/openstack/python-novaclient.git#egg=python-novaclient
もしEC2 APIを使いたい場合、「euca2ools」パッケージなどのEC2 API対応ツールで実現できます。EC2 APIベースのツールはこのガイドの範囲外ですが、それを使うための認証情報の取得手段については触れることにします。
*-manageという名のコマンドラインツールがいくつかあります。
nova-manage
glance-manage
keystone-manage
cinder-manage
前述のツールと違って、*-manage
ツールはクラウドコントローラーからroot権限で実行されなければいけません。なぜなら、それらのツールは/etc/nova/nova.conf
などの設定ファイルを読み取り、また、OpenStack API エンドポイントではなく、データベースに対し直接クエリーを発行するからです。
*-manage
ツールが存在しているのは、歴史的な経緯からです。OpenStackプロジェクトは最終的に、*-manage
の全機能を通常のクライアントツールへ移行する予定です。それまでは、cloud controller nodeへSSHし、必要な*-manage
を使ってメンテナンス作業を行う必要があります。
OpenStackクラウドに対してクエリを発行するためにコマンドラインツールを使いたいのであれば、適切な認証情報を持っている必要があります。コマンドラインツールで使う認証情報を得るための最も簡単な方法は、Horizonダッシュボードです。ユーザー設定ページを表示するには、ページ右上のナビゲーションバーから、設定のリンクを選択し、ユーザー設定を開きます。ユーザー設定では、言語やタイムゾーンも設定できます。ここで重要なのは、このページ左側のナビゲーションにあるOpenStack API と EC2 認証情報 リンクです。このリンクから、あなたのサービスエンドポイントや認証情報といった環境変数を設定するファイルを生成できます。
OpenStackネイティブのツールを使うには、 OpenStack API リンクを選択します。ページ上部にはサービスエンドポイントのURLリストが、その下にタイトルOpenStack RCファイルのダウンロードがあります。管理者としてクラウドにアクセスする場合、ドロップダウンメニューから選択できます。ここから認証情報を取得したいプロジェクトを選択し、 をクリックします。以下のような、openrc.sh
ファイルが生成されます。
#!/bin/bash # With the addition of Keystone, to use an openstack cloud you should # authenticate against keystone, which returns a **Token** and **Service # Catalog**. The catalog contains the endpoint for all services the # user/tenant has access to - including nova, glance, keystone, swift. # # *NOTE*: Using the 2.0 *auth api* does not mean that compute api is 2.0. # We use the 1.1 *compute api* export OS_AUTH_URL=http://203.0.113.10:5000/v2.0 # With the addition of Keystone we have standardized on the term **tenant** # as the entity that owns the resources. export OS_TENANT_ID=98333aba48e756fa8f629c83a818ad57 export OS_TENANT_NAME="test-project" # In addition to the owning entity (tenant), openstack stores the entity # performing the action as the **user**. export OS_USERNAME=test-user # With Keystone you pass the keystone password. echo "Please enter your OpenStack Password: " read -s OS_PASSWORD_INPUT export OS_PASSWORD=$OS_PASSWORD_INPUT
注記 | |
---|---|
あなたのパスワードはプレーンテキストに保存されません。これはいいことです。このスクリプトを読み込み、実行する際、パスワードの入力が要求され、環境変数 |
EC2互換クレデンシャルは左側ナビゲーションバー内の「EC2 認証情報」リンクからダウンロードできます。対象認証情報のプロジェクトを選択し、「EC2 認証情報のダウンロード」をクリックすると、x509証明書とシェルスクリプトを含むzipファイルが生成されます。クラウドにアクセスするために必要な認証情報を含んでいるため、openrc
とは異なり、安全な場所へ新しいディレクトリを作り、そこへzipファイルを展開してください。cacert.pem、 cert.pem、 ec2rc.sh そして pk.pemがあるはずです。 ec2rc.sh
は以下のようになるでしょう。
#!/bin/bash NOVARC=$(readlink -f "${BASH_SOURCE:-${0}}" 2>/dev/null) ||\ NOVARC=$(python -c 'import os,sys; print os.path.abspath(os.path.realpath(sys.argv[1]))' "${BASH_SOURCE:-${0}}") NOVA_KEY_DIR=${NOVARC%/*} export EC2_ACCESS_KEY=df7f93ec47e84ef8a347bbb3d598449a export EC2_SECRET_KEY=ead2fff9f8a344e489956deacd47e818 export EC2_URL=http://203.0.113.10:8773/services/Cloud export EC2_USER_ID=42 # nova does not use user id, but bundling requires it export EC2_PRIVATE_KEY=${NOVA_KEY_DIR}/pk.pem export EC2_CERT=${NOVA_KEY_DIR}/cert.pem export NOVA_CERT=${NOVA_KEY_DIR}/cacert.pem export EUCALYPTUS_CERT=${NOVA_CERT} # euca-bundle-image seems to require this set alias ec2-bundle-image="ec2-bundle-image --cert $EC2_CERT --privatekey $EC2_PRIVATE_KEY --user 42 --ec2cert $NOVA_CERT" alias ec2-upload-bundle="ec2-upload-bundle -a $EC2_ACCESS_KEY -s $EC2_SECRET_KEY --url $S3_URL --ec2cert $NOVA_CERT"
EC2認証情報を環境変数として有効にするには、ec2rc.sh
ファイルを(source コマンドで) 読み込みます。
コマンドラインツールは、--debug
フラグを渡すことでOpenStack APIコールを表示することができます。例えば、
# nova --debug list
この例は、クライアントからのHTTPリクエストとエンドポイントからのレスポンスを表示しています。これはOpenStack APIを使ったカスタムツールを作る際に役立ちます。
Keyring Support (https://wiki.openstack.org/wiki/KeyringSupport)は、このガイドの執筆時点では混乱の元になるかもしれません。このバグレポート (https://bugs.launchpad.net/python-novaclient/+bug/1020238)はオープンされた後、無効(invalid)としてクローズされ、何度かやり取りがあって再度オープンされています。
その問題とは、ある条件下でコマンドラインツールがPythonのkeyringを認証情報キャッシュとして使おうとし、さらにある条件が重なった時、使用するたびにツールがkeyringパスワードを要求することです。もしあなたが運悪くその現象に遭遇した場合、認証情報キャッシュを回避するため、--no-cache
フラグを追加するか、OS_NO_CACHE=1
を環境変数に設定してください。
注記 | |
---|---|
no-cache を設定すると、コマンドラインツールがクラウドとやり取りを行う度に認証が行われます。 |
コマンドラインツールの内部ではOpenStack APIが使用されます。OpenStack APIはHTTP上で動作するRESTful APIです。時に、APIと直接やりとりしたい、CLIツールのバグを疑っている、ということがあるでしょう。その際に最適な方法は、cURL (http://curl.haxx.se/)と、JSONレスポンスを解析するjq (http://stedolan.github.com/jq/)などのツールを組み合わせることです。
まずはじめに、クラウドの認証が必要です。あなたの認証情報を用いて認証トークンを入手してください。
あなたの認証情報はユーザー名、パスワード、テナント(プロジェクト)の組み合わせです。前述したopenrc.sh
で、それらの値を得ることができます。そのトークンのおかげで、リクエストのたびに再認証することなく、サービスエンドポイントとやりとりすることができます。トークンは通常24時間有効です。失効の際は401 (Unauthorized)レスポンスにて警告されますが、別トークンを要求することができます。
それではOpenStack サービスカタログを見てみましょう。
$ curl -s -X POST http://203.0.113.10:35357/v2.0/tokens \ -d '{"auth": {"passwordCredentials": {"username":"test-user", "password":"test-password"}, "tenantName":"test-project"}}' \ -H "Content-type: application/json" | jq .
JSONレスポンスを読むことで、カタログを把握することができます。
これ以降のリクエストを楽にするため、トークンを環境変数へ設定します。
$ TOKEN=`curl -s -X POST http://203.0.113.10:35357/v2.0/tokens \ -d '{"auth": {"passwordCredentials": {"username":"test-user", "password":"test-password"}, "tenantName":"test-project"}}' \ -H "Content-type: application/json" | jq -r .access.token.id`
コマンドラインから、トークンを$TOKENとして参照できるようになりました。
あなたのサービスカタログからコンピュートなどのエンドポイントを選び、試してみましょう。例えば、(サーバー)インスタンスのリスト出力など。
$ curl -s \ -H "X-Auth-Token: $TOKEN" \ http://203.0.113.10:8774/v2/98333aba48e756fa8f629c83a818ad57/servers | jq .
APIリクエストがどのような構造かを知るには、OpenStack API Reference (http://api.openstack.org/api-ref.html)を参照してください。また、jqを使ってレスポンスを理解するには、jq Manual (http://stedolan.github.com/jq/manual/)も参考になるでしょう。
cURLの-s
フラグを使うことで、プログレスメーター非表示にできます。もしcURLコマンドの実行に問題がある場合、それらを消したくなるでしょう。いっぽう、-v
フラグは詳細を出力するため、cURLコマンドのトラブル解決に役立ちます。非常に便利な機能がcURLには多くあるので、manページでそれらのオプションを参照してください。
管理者として、あなたのOpenStackクラウドがどのような状態か、ツールを使って把握する方法が、いくつかあります。この節では、あなたのクラウドの概要、形、大きさ、状態を得るアイデアをお伝えします。
まず、あなたのOpenStackクラウドに属し、稼働しているサーバーを把握することができます。
$ nova-manage service list | sort
出力は以下のようになります。
Binary Host Zone Status State Updated_At nova-cert cloud.example.com nova enabled :-) 2013-02-25 19:32:38 nova-compute c01.example.com nova enabled :-) 2013-02-25 19:32:35 nova-compute c02.example.com nova enabled :-) 2013-02-25 19:32:32 nova-compute c03.example.com nova enabled :-) 2013-02-25 19:32:36 nova-compute c04.example.com nova enabled :-) 2013-02-25 19:32:32 nova-compute c05.example.com nova enabled :-) 2013-02-25 19:32:41 nova-consoleauth cloud.example.com nova enabled :-) 2013-02-25 19:32:36 nova-network cloud.example.com nova enabled :-) 2013-02-25 19:32:32 nova-scheduler cloud.example.com nova enabled :-) 2013-02-25 19:32:33
この出力は、5つのコンピュートノードと1つのクラウドコントローラーがあることを示しています。:-)
のような笑顔は、サービスが起動し、稼働中であることを表しています。もしサービスが動作していない場合、:-)
はXXX
へと変化します。なぜサービスがダウンしているのか、問題解決すべき印です。
あなたがまだnova-volume
を使っているのであれば、nova-volumeサービスのエントリも見えるでしょう。 (nova-volumeはFolsomより後のリリースでは廃止予定です)
Cinderを使っているのであれば、以下のコマンドを実行すると同様のリストが見られます。
$ cinder-manage host list | sort
host zone c01.example.com nova c02.example.com nova c03.example.com nova c04.example.com nova c05.example.com nova cloud.example.com nova
これら2つの表で、どのサーバーとサービスがあなたのクラウドを構成しているのか、概要を知ることができました。
また、認証サービス (Keystone)を使い、あなたのクラウドでどのサービスが使えるのか、また、どのエンドポイントがサービス向けに構成されているか、知ることができます。
下記コマンドを実行するには、あなたのシェル環境で正しく管理系の変数が設定されている必要があります。
$ keystone service-list
+-----+----------+----------+----------------------------+ | id | name | type | description | +-----+----------+----------+----------------------------+ | ... | cinder | volume | Cinder Service | | ... | glance | image | OpenStack Image Service | | ... | nova_ec2 | ec2 | EC2 Service | | ... | keystone | identity | OpenStack Identity Service | | ... | nova | compute | OpenStack Compute Service | +-----+----------+----------+----------------------------+
上記の出力は、5つのサービスが構成されていることを示しています。
各サービスのエンドポイントを見るには、
$ keystone endpoint-list
+-----+-----------------------------------------+-/+-----------------------------------------+ | id | publicurl | \| adminurl | +-----+-----------------------------------------+-/+-----------------------------------------+ | ... | http://example.com:8774/v2/%(tenant_id)s| \| http://example.com:8774/v2/%(tenant_id)s| | ... | http://example.com:8773/services/Cloud | /| http://example.com:8773/services/Admin | | ... | http://example.com:9292/v1 | \| http://example.com:9292/v1 | | ... | http://example.com:5000/v2.0 | /| http://example.com:35357/v2.0 | | ... | http://example.com:8776/v1/%(tenant_id)s| \| http://example.com:8776/v1/%(tenant_id)s| +-----+-----------------------------------------+-/+-----------------------------------------+
service と endpointは1対1でマッピングされます。いくつかのサービスではパブリックURLと管理URLが異なるので注意してください。
次に、あなたのクラウドでどのような固定IPネットワークが設定されているかを見てみましょう。nova novaコマンドラインクライアントを使って、構成されているIPアドレス空間を得ることができます。
$ nova network-list +--------------------------------------+--------+--------------+ | ID | Label | Cidr | +--------------------------------------+--------+--------------+ | 3df67919-9600-4ea8-952e-2a7be6f70774 | test01 | 10.1.0.0/24 | | 8283efb2-e53d-46e1-a6bd-bb2bdef9cb9a | test02 | 10.1.1.0/24 | +--------------------------------------+--------+--------------+
nova-manage ツールを使うと、もう少し詳しい情報が表示されます。
$ nova-manage network list id IPv4 IPv6 start address DNS1 DNS2 VlanID project uuid 1 10.1.0.0/24 None 10.1.0.3 None None 300 2725bbd beacb3f2 2 10.1.1.0/24 None 10.1.1.3 None None 301 none d0b1a796
この出力は、2つのネットワークが構成され、それぞれが255のIPアドレス (/24 サブネット)を持つことを表しています。1つ目のネットワークはあるプロジェクトに割り当てられており、2つ目はまだ割り当てられていません。手動でプロジェクトに割り当てることもできますし、プロジェクトの1つ目のインスタンスを起動する際、自動的に割り当てることもできます。
利用可能なフローティングIPを確認するには、
$ nova-manage floating list
2725bbd458e2459a8c1bd36be859f43f 1.2.3.4 None nova vlan20 None 1.2.3.5 48a415e7-6f07-4d33-ad00-814e60b010ff nova vlan20
2つのフローティングIPが利用可能であることがわかります。1つめはプロジェクトに割り当て済み、もうひとつは未割り当てです。
クラウドに追加されたプロジェクトのリストを見るためには、
$ keystone tenant-list
+-----+----------+---------+ | id | name | enabled | +-----+----------+---------+ | ... | jtopjian | True | | ... | alvaro | True | | ... | everett | True | | ... | admin | True | | ... | services | True | | ... | jonathan | True | | ... | lorin | True | | ... | anne | True | | ... | rhulsker | True | | ... | tom | True | | ... | adam | True | +-----+----------+---------+
ユーザーのリストを見るためには、
$ keystone user-list
+-----+----------+---------+------------------------------+ | id | name | enabled | email | +-----+----------+---------+------------------------------+ | ... | everett | True | everett.towne@backspace.com | | ... | jonathan | True | jon@sfcu.edu | | ... | nova | True | nova@localhost | | ... | rhulsker | True | ryan.hulkster@cyberalbert.ca | | ... | lorin | True | lorinhoch@nsservices.com | | ... | alvaro | True | Alvaro.Perry@cyberalbert.ca | | ... | anne | True | anne.green@backspace.com | | ... | admin | True | root@localhost | | ... | cinder | True | cinder@localhost | | ... | glance | True | glance@localhost | | ... | jtopjian | True | joe.topjian@cyberalbert.com | | ... | adam | True | adam@ossmanuals.net | | ... | tom | True | fafield@univm.edu.au | +-----+----------+---------+------------------------------+
注記 | |
---|---|
ユーザーとグループが1対1でマッピングされることもあります。これはcinder、glance、novaやswiftなど標準のシステムアカウントや、グループに属すのが1ユーザーのみの場合がこれにあたります。 |
以下のコマンドで、稼働中のインスタンスのリストが得られます。
$ nova list --all-tenants
+-----+------------------+--------+-------------------------------------------+ | ID | Name | Status | Networks | +-----+------------------+--------+-------------------------------------------+ | ... | Windows | ACTIVE | novanetwork_1=10.1.1.3, 199.116.232.39 | | ... | cloud controller | ACTIVE | novanetwork_0=10.1.0.6; jtopjian=10.1.2.3 | | ... | compute node 1 | ACTIVE | novanetwork_0=10.1.0.4; jtopjian=10.1.2.4 | | ... | devbox | ACTIVE | novanetwork_0=10.1.0.3 | | ... | devstack | ACTIVE | novanetwork_0=10.1.0.5 | | ... | initial | ACTIVE | nova_network=10.1.7.4, 10.1.8.4 | | ... | lorin-head | ACTIVE | nova_network=10.1.7.3, 10.1.8.3 | +-----+------------------+--------+-------------------------------------------+
残念ながら、このコマンドは稼働中のインスタンスの詳細を出力しません。例えば、どのコンピュートノードでインスタンスが動いているのか、フレーバーは何か、などなど。あなたは以下のコマンドでインスタンス個別の詳細情報を得ることができます。
$ nova show <uuid>
例えば、
# nova show 81db556b-8aa5-427d-a95c-2a9a6972f630
+-------------------------------------+-----------------------------------+ | Property | Value | +-------------------------------------+-----------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-SRV-ATTR:host | c02.example.com | | OS-EXT-SRV-ATTR:hypervisor_hostname | c02.example.com | | OS-EXT-SRV-ATTR:instance_name | instance-00000029 | | OS-EXT-STS:power_state | 1 | | OS-EXT-STS:task_state | None | | OS-EXT-STS:vm_state | active | | accessIPv4 | | | accessIPv6 | | | config_drive | | | created | 2013-02-13T20:08:36Z | | flavor | m1.small (6) | | hostId | ... | | id | ... | | image | Ubuntu 12.04 cloudimg amd64 (...) | | key_name | jtopjian-sandbox | | metadata | {} | | name | devstack | | novanetwork_0 network | 10.1.0.5 | | progress | 0 | | security_groups | [{u'name': u'default'}] | | status | ACTIVE | | tenant_id | ... | | updated | 2013-02-13T20:08:59Z | | user_id | ... | +-------------------------------------+-----------------------------------+