Grizzlyリリースの情報は以下から入手できます。
サマリ:http://www.slideshare.net/yosshy/openstack-grizzly-release-18354936
原文:https://wiki.openstack.org/wiki/ReleaseNotes/Grizzly
日本語訳:http://openstack.jp/news/20130405.html
環境サマリ
この手順で構築される環境は以下になります。
* nova
* quantum
- OVS + GRE
- LBaaS
* cinder
* glance
* keystone
* horizon
* swift
* tempest
事前準備
仮想マシンで構いませんので
1vCPU, 2GBメモリ以上
Ubuntu12.04 64bit
を準備しておきます。メモリは2GB以下だと、各プロセスの起動に時間がかかりすぎてエラーになる場合があります。
devstackの取得
$ git clone https://github.com/openstack-dev/devstack.git $ cd devstack $ git checkout -b grizzly remotes/origin/stable/grizzly
localrc
localrc を以下のように定義します。
$ cd devstack $ vim localrc
HOST_IP=192.168.100.10 LOGFILE=stack.sh.log ADMIN_PASSWORD=openstack MYSQL_PASSWORD=$ADMIN_PASSWORD RABBIT_PASSWORD=$ADMIN_PASSWORD SERVICE_PASSWORD=$ADMIN_PASSWORD SERVICE_TOKEN=admintoken # use spice console #disable_service n-net #disable_service n-novnc #disable_service n-xvnc #enable_service n-spice # use swift disable_service n-obj enable_service swift # use quantum disable_service n-net enable_service q-svc enable_service q-agt enable_service q-dhcp enable_service q-l3 enable_service q-meta enable_service q-lbaas enable_service quantum # use tempest enable_service tempest # use ovs + gre tunnel for virtual network ENABLE_TENANT_TUNNELS=True # initial network info FIXED_RANGE=172.24.17.0/24 NETWORK_GATEWAY=172.24.17.254 FLOATING_RANGE=10.0.0.0/24 # for cinder VOLUME_BACKING_FILE_SIZE=4096M # for swift SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5 # optional: set keymap EXTRA_OPTS=( vnc_keymap=ja )* spice はまだうまく使えなかったのでコメント化しています。
$ ./stack.sh
以上で終了です。
いくつか特徴的な機能を見てみます。
Quantum LBaaS
GrizzlyからQuantumにLBaaSがマージされました。まだ完全ではありませんが、HAProxyを使った基本的なロードバランサを構築可能です。Network Namespaceを利用しているので、RHEL系では動きません。
$ source openrc■まずセキュリティグループを編集して、SSH, HTTP, PING通信が可能な状態にしておきます。
$ nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 $ nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 $ nova secgroup-add-rule default tcp 80 80 0.0.0.0/0 $ nova secgroup-list-rules default
+-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | | -1 | -1 | | default | | | -1 | -1 | | default | | icmp | -1 | -1 | 0.0.0.0/0 | | | tcp | 22 | 22 | 0.0.0.0/0 | | | tcp | 80 | 80 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+
■インスタンスを作成します。
$ nova boot --flavor m1.tiny --image 98847803-6231-40a3-9953-559233497849 --nic net-id=574d032b-a44c-4b0a-b7aa-9a7fcc515e12 vm1 $ nova boot --flavor m1.tiny --image 98847803-6231-40a3-9953-559233497849 --nic net-id=574d032b-a44c-4b0a-b7aa-9a7fcc515e12 vm2 $ nova list
+--------------------------------------+------+--------+---------------------+ | ID | Name | Status | Networks | +--------------------------------------+------+--------+---------------------+ | 7cd0986b-762f-40b9-9a33-ac55ef69d0f8 | vm1 | ACTIVE | private=172.24.17.2 | | 925043ee-4ea8-45bf-94a3-8c91d161af91 | vm2 | ACTIVE | private=172.24.17.3 | +--------------------------------------+------+--------+---------------------+
■疎通テストを行います。これはNetwork Namespace内から実施します。
$ sudo ip netns
qrouter-ec182694-80a1-4c58-a54e-71b4277e19de qdhcp-574d032b-a44c-4b0a-b7aa-9a7fcc515e12
$ sudo ip netns exec qdhcp-574d032b-a44c-4b0a-b7aa-9a7fcc515e12 ping -q -c 1 172.24.17.2
PING 172.24.17.2 (172.24.17.2) 56(84) bytes of data. --- 172.24.17.2 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 127.558/127.558/127.558/0.000 ms
$ sudo ip netns exec qdhcp-574d032b-a44c-4b0a-b7aa-9a7fcc515e12 ping -q -c 1 172.24.17.3
PING 172.24.17.3 (172.24.17.3) 56(84) bytes of data. --- 172.24.17.3 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 53.476/53.476/53.476/0.000 ms
■各仮想マシンへログインし、ポート80番で待ち受けるプロセスを起動します。
$ sudo ip netns exec qdhcp-574d032b-a44c-4b0a-b7aa-9a7fcc515e12 ssh cirros@172.24.17.2 vm1$ while true; do echo -e 'HTTP/1.0 200 OK\r\n\r\nvm1' | sudo nc -l -p 80 ; done
$ sudo ip netns exec qdhcp-574d032b-a44c-4b0a-b7aa-9a7fcc515e12 ssh cirros@172.24.17.3 vm2$ while true; do echo -e 'HTTP/1.0 200 OK\r\n\r\nvm2' | sudo nc -l -p 80 ; done■各サーバへアクセスします。
$ sudo ip netns exec qdhcp-574d032b-a44c-4b0a-b7aa-9a7fcc515e12 curl 172.24.17.2 vm1
$ sudo ip netns exec qdhcp-574d032b-a44c-4b0a-b7aa-9a7fcc515e12 curl 172.24.17.3 vm2■仮想LBを作成していきます。
$ quantum subnet-list
+--------------------------------------+------+----------------+--------------------------------------------------+ | id | name | cidr | allocation_pools | +--------------------------------------+------+----------------+--------------------------------------------------+ | 8cf82ccd-b158-460f-a284-cee2be32fc7a | | 172.24.17.0/24 | {"start": "172.24.17.1", "end": "172.24.17.253"} | +--------------------------------------+------+----------------+--------------------------------------------------+
■プールを作成し、サブネットを割り当てます。
$ quantum lb-pool-create --lb-method ROUND_ROBIN --name mypool --protocol HTTP --subnet-id 8cf82ccd-b158-460f-a284-cee2be32fc7a
Created a new pool: +-----------------+--------------------------------------+ | Field | Value | +-----------------+--------------------------------------+ | admin_state_up | True | | description | | | health_monitors | | | id | 3341c179-43a9-4337-8427-2d490d06ffec | | lb_method | ROUND_ROBIN | | members | | | name | mypool | | protocol | HTTP | | status | PENDING_CREATE | | subnet_id | 8cf82ccd-b158-460f-a284-cee2be32fc7a | | tenant_id | 77d868945fa249e59bd072e027bda1a0 | | vip_id | | +-----------------+--------------------------------------+
$ quantum lb-pool-list
+--------------------------------------+--------+-------------+----------+----------------+----------------+ | id | name | lb_method | protocol | admin_state_up | status | +--------------------------------------+--------+-------------+----------+----------------+----------------+ | 3341c179-43a9-4337-8427-2d490d06ffec | mypool | ROUND_ROBIN | HTTP | True | PENDING_CREATE | +--------------------------------------+--------+-------------+----------+----------------+----------------+
■プールにメンバーを加えます。
$ quantum lb-member-create --address 172.24.17.2 --protocol-port 80 mypool
Created a new member: +----------------+--------------------------------------+ | Field | Value | +----------------+--------------------------------------+ | address | 172.24.17.2 | | admin_state_up | True | | id | 0a6e7caf-8dc0-41d2-b2df-c5f919277022 | | pool_id | 3341c179-43a9-4337-8427-2d490d06ffec | | protocol_port | 80 | | status | PENDING_CREATE | | tenant_id | 77d868945fa249e59bd072e027bda1a0 | | weight | 1 | +----------------+--------------------------------------+
$ quantum lb-member-create --address 172.24.17.3 --protocol-port 80 mypool
Created a new member: +----------------+--------------------------------------+ | Field | Value | +----------------+--------------------------------------+ | address | 172.24.17.3 | | admin_state_up | True | | id | d03c237c-b549-4bfb-a281-189ddd1ccb25 | | pool_id | 3341c179-43a9-4337-8427-2d490d06ffec | | protocol_port | 80 | | status | PENDING_CREATE | | tenant_id | 77d868945fa249e59bd072e027bda1a0 | | weight | 1 | +----------------+--------------------------------------+
■モニタリングルールを作成します。
$ quantum lb-healthmonitor-create --delay 3 --type HTTP --max-retries 3 --timeout 3
Created a new health_monitor: +----------------+--------------------------------------+ | Field | Value | +----------------+--------------------------------------+ | admin_state_up | True | | delay | 3 | | expected_codes | 200 | | http_method | GET | | id | 35ed6c95-13b5-4013-a21c-d15eaa01d8ec | | max_retries | 3 | | status | PENDING_CREATE | | tenant_id | 77d868945fa249e59bd072e027bda1a0 | | timeout | 3 | | type | HTTP | | url_path | / | +----------------+--------------------------------------+
$ quantum lb-healthmonitor-list
+--------------------------------------+------+----------------+----------------+ | id | type | admin_state_up | status | +--------------------------------------+------+----------------+----------------+ | 35ed6c95-13b5-4013-a21c-d15eaa01d8ec | HTTP | True | PENDING_CREATE | +--------------------------------------+------+----------------+----------------+
■作成したプールとモニタリングルールを関連付けます。
$ quantum lb-healthmonitor-associate 35ed6c95-13b5-4013-a21c-d15eaa01d8ec mypool
Associated health monitor 35ed6c95-13b5-4013-a21c-d15eaa01d8ec
■最後に仮想IPを作成します
$ quantum lb-vip-create --name myvip --protocol-port 80 --protocol HTTP --subnet-id 8cf82ccd-b158-460f-a284-cee2be32fc7a mypool
Created a new vip: +------------------+--------------------------------------+ | Field | Value | +------------------+--------------------------------------+ | address | 172.24.17.4 | | admin_state_up | True | | connection_limit | -1 | | description | | | id | 02517419-7a07-425d-87f6-75ce1151c550 | | name | myvip | | pool_id | 3341c179-43a9-4337-8427-2d490d06ffec | | port_id | f212b520-d314-481b-9110-eb2ad24e374a | | protocol | HTTP | | protocol_port | 80 | | status | PENDING_CREATE | | subnet_id | 8cf82ccd-b158-460f-a284-cee2be32fc7a | | tenant_id | 77d868945fa249e59bd072e027bda1a0 | +------------------+--------------------------------------+
$ quantum lb-vip-list
+--------------------------------------+-------+-------------+----------+----------------+--------+ | id | name | address | protocol | admin_state_up | status | +--------------------------------------+-------+-------------+----------+----------------+--------+ | 02517419-7a07-425d-87f6-75ce1151c550 | myvip | 172.24.17.4 | HTTP | True | ACTIVE | +--------------------------------------+-------+-------------+----------+----------------+--------+
$ quantum lb-pool-list
+--------------------------------------+--------+-------------+----------+----------------+--------+ | id | name | lb_method | protocol | admin_state_up | status | +--------------------------------------+--------+-------------+----------+----------------+--------+ | 3341c179-43a9-4337-8427-2d490d06ffec | mypool | ROUND_ROBIN | HTTP | True | ACTIVE | +--------------------------------------+--------+-------------+----------+----------------+--------+
$ quantum lb-healthmonitor-list
+--------------------------------------+------+----------------+--------+ | id | type | admin_state_up | status | +--------------------------------------+------+----------------+--------+ | 35ed6c95-13b5-4013-a21c-d15eaa01d8ec | HTTP | True | ACTIVE | +--------------------------------------+------+----------------+--------+
$ quantum lb-member-list
+--------------------------------------+-------------+---------------+----------------+--------+ | id | address | protocol_port | admin_state_up | status | +--------------------------------------+-------------+---------------+----------------+--------+ | 0a6e7caf-8dc0-41d2-b2df-c5f919277022 | 172.24.17.2 | 80 | True | ACTIVE | | d03c237c-b549-4bfb-a281-189ddd1ccb25 | 172.24.17.3 | 80 | True | ACTIVE | +--------------------------------------+-------------+---------------+----------------+--------+
■HAProxyが起動していることが確認できます。
$ ps -ef |grep haproxy
nobody 30074 1 0 00:33 ? 00:00:00 haproxy -f /opt/stack/data/quantum/lbaas/3341c179-43a9-4337-8427-2d490d06ffec/conf -p /opt/stack/data/quantum/lbaas/3341c179-43a9-4337-8427-2d490d06ffec/pid
$ sudo ip netns
qlbaas-3341c179-43a9-4337-8427-2d490d06ffec qrouter-ec182694-80a1-4c58-a54e-71b4277e19de qdhcp-574d032b-a44c-4b0a-b7aa-9a7fcc515e12
$ sudo ip netns exec qlbaas-3341c179-43a9-4337-8427-2d490d06ffec ip addr
24: tapf212b520-d3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether fa:16:3e:b2:2d:c8 brd ff:ff:ff:ff:ff:ff inet 172.24.17.4/24 brd 172.24.17.255 scope global tapf212b520-d3 inet6 fe80::f816:3eff:feb2:2dc8/64 scope link valid_lft forever preferred_lft forever 25: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever
■ラウンドロビンで分散されていることが確認できます。
$ sudo ip netns exec qdhcp-574d032b-a44c-4b0a-b7aa-9a7fcc515e12 curl 172.24.17.4 vm2 $ sudo ip netns exec qdhcp-574d032b-a44c-4b0a-b7aa-9a7fcc515e12 curl 172.24.17.4 vm1 $ sudo ip netns exec qdhcp-574d032b-a44c-4b0a-b7aa-9a7fcc515e12 curl 172.24.17.4 vm2 $ sudo ip netns exec qdhcp-574d032b-a44c-4b0a-b7aa-9a7fcc515e12 curl 172.24.17.4 vm1 $ sudo ip netns exec qdhcp-574d032b-a44c-4b0a-b7aa-9a7fcc515e12 curl 172.24.17.4 vm2
Quantum L3,DHCP
Grizzlyでは、Folsomで議論されていたL3/DHCPのボトルネックを解消するために、分散構成(nova-networkのmulti_hostのようなイメージ)が取れるようになっています。
具体的には複数のL3/DHCPエージェントを起動して、仮想ルータやdnsmasqをどのホストへ配置するか指定できるようになっており、API/quantumコマンドのサブコマンドにいくつかの追加がなされています。
Commands for API v2.0: agent-delete Delete a given agent. agent-list List agents. agent-show Show information of a given agent. agent-update Update a given agent. dhcp-agent-list-hosting-net List DHCP agents hosting a network. dhcp-agent-network-add Add a network to a DHCP agent. dhcp-agent-network-remove Remove a network from a DHCP agent. l3-agent-list-hosting-router List L3 agents hosting a router. l3-agent-router-add Add a router to a L3 agent. l3-agent-router-remove Remove a router from a L3 agent. net-list-on-dhcp-agent List the networks on a DHCP agent. router-list-on-l3-agent List the routers on a L3 agent.
$ quantum agent-list
+--------------------------------------+--------------------+--------+-------+----------------+ | id | agent_type | host | alive | admin_state_up | +--------------------------------------+--------------------+--------+-------+----------------+ | 7436f0e9-572a-4450-8c2f-a3f9309b0512 | DHCP agent | ubuntu | :-) | True | | 8a2e658d-25bb-4381-ad8f-264680058ea0 | Open vSwitch agent | ubuntu | :-) | True | | d9291a93-12a8-419e-85a8-9ddf11283912 | L3 agent | ubuntu | :-) | True | +--------------------------------------+--------------------+--------+-------+----------------+
$ quantum dhcp-agent-list-hosting-net 574d032b-a44c-4b0a-b7aa-9a7fcc515e12
+--------------------------------------+--------+----------------+-------+ | id | host | admin_state_up | alive | +--------------------------------------+--------+----------------+-------+ | 7436f0e9-572a-4450-8c2f-a3f9309b0512 | ubuntu | True | :-) | +--------------------------------------+--------+----------------+-------+
$ quantum l3-agent-list-hosting-router ec182694-80a1-4c58-a54e-71b4277e19de
+--------------------------------------+--------+----------------+-------+ | id | host | admin_state_up | alive | +--------------------------------------+--------+----------------+-------+ | d9291a93-12a8-419e-85a8-9ddf11283912 | ubuntu | True | :-) | +--------------------------------------+--------+----------------+-------+
ただしこの機能は可用性を担保する機能ではありません。仮想ルータやDHCPの冗長構成については今後実装が議論される予定になっています。
Quantum Metadata
MetadataはVMが自分自身の動作環境をOpenStackへ問い合わせるために使用する機能で、VMがMetadataサーバーへアクセスすることで自身が動作しているAvailability Zone情報等を知ることができます。
これまでNovaを中心として、OpenStackはVMに割り当てられるアドレスがユニークであることを前提に実装されてきたため、Metadataサーバではアクセス元VMのIPアドレスを見て、返す情報を決定してきました。
しかし、Qunatumによって仮想ネットワークが実装されたことで、別のVMが同じアドレスを持つことが可能になり、この実装では問題が発生するようになりました。またQuantumによって作られた仮想ネットワークはそのままではnova-metadataサーバとは通信できない環境に存在するので、Folsomの頃は個別にルーティングを設定しなければなりませんでした。
この問題を回避するために、実装されたのが Quantum Metadataになります。Quantum MetadataサーバはProxyのように動作し、アクセス元のVMを特定した後に、Nova Metadata への問い合わせを行います。
$ curl http://169.254.169.254
1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01 2009-04-04
$ curl http://169.254.169.254/2009-04-04
meta-data/
$ curl http://169.254.169.254/2009-04-04/meta-data/
ami-id ami-launch-index ami-manifest-path block-device-mapping/ hostname instance-action instance-id instance-type kernel-id local-hostname local-ipv4 placement/ public-hostname public-ipv4 ramdisk-id reservation-id
$ curl http://169.254.169.254/2009-04-04/meta-data/placement/
availability-zone
$ curl http://169.254.169.254/2009-04-04/meta-data/placement/availability-zone
nova
Tempest
Grizzlyからというわけではありませんが、最後にTempestを簡単に紹介しておきます。
これはOpenStackの自動テストツールで、環境が正しく動いているかテストを実施してくれます。Pythonのテストフレームワークである unittest2 nose を利用しています。
様々なテストが実施できます。
$ cd /opt/stack/tempest
テストの条件は以下で設定されています。devstackでインストールした場合、基本的な設定は自動で行われています。
$ etc/tempest.conf
すべてのテストを実行するには以下を実行します。
$ nosetests tempest
特定のテストを実行することも可能です。
$ nosetests tempest/tests/compute/servers/test_create_server.py
tempest.tests.compute.servers.test_create_server.ServersTestJSON.test_can_log_into_created_server ... SKIP: Instance validation tests are disabled. tempest.tests.compute.servers.test_create_server.ServersTestJSON.test_create_server_response[smoke] ... ok tempest.tests.compute.servers.test_create_server.ServersTestJSON.test_host_name_is_same_as_server_name ... SKIP: Instance validation tests are disabled. tempest.tests.compute.servers.test_create_server.ServersTestJSON.test_list_servers[smoke] ... ok tempest.tests.compute.servers.test_create_server.ServersTestJSON.test_list_servers_with_detail[smoke] ... ok tempest.tests.compute.servers.test_create_server.ServersTestJSON.test_verify_created_server_vcpus ... SKIP: Instance validation tests are disabled. tempest.tests.compute.servers.test_create_server.ServersTestJSON.test_verify_server_details[smoke] ... ok tempest.tests.compute.servers.test_create_server.ServersTestManualDisk.test_can_log_into_created_server ... SKIP: Instance validation tests are disabled. tempest.tests.compute.servers.test_create_server.ServersTestManualDisk.test_create_server_response[smoke] ... ok tempest.tests.compute.servers.test_create_server.ServersTestManualDisk.test_host_name_is_same_as_server_name ... SKIP: Instance validation tests are disabled. tempest.tests.compute.servers.test_create_server.ServersTestManualDisk.test_list_servers[smoke] ... ok tempest.tests.compute.servers.test_create_server.ServersTestManualDisk.test_list_servers_with_detail[smoke] ... ok tempest.tests.compute.servers.test_create_server.ServersTestManualDisk.test_verify_created_server_vcpus ... SKIP: Instance validation tests are disabled. tempest.tests.compute.servers.test_create_server.ServersTestManualDisk.test_verify_server_details[smoke] ... ok tempest.tests.compute.servers.test_create_server.ServersTestXML.test_can_log_into_created_server ... SKIP: Instance validation tests are disabled. tempest.tests.compute.servers.test_create_server.ServersTestXML.test_create_server_response[smoke] ... ok tempest.tests.compute.servers.test_create_server.ServersTestXML.test_host_name_is_same_as_server_name ... SKIP: Instance validation tests are disabled. tempest.tests.compute.servers.test_create_server.ServersTestXML.test_list_servers[smoke] ... ok tempest.tests.compute.servers.test_create_server.ServersTestXML.test_list_servers_with_detail[smoke] ... ok tempest.tests.compute.servers.test_create_server.ServersTestXML.test_verify_created_server_vcpus ... SKIP: Instance validation tests are disabled. tempest.tests.compute.servers.test_create_server.ServersTestXML.test_verify_server_details[smoke] ... ok ---------------------------------------------------------------------- Ran 21 tests in 148.013s OK (SKIP=9)
参考
QuantumDevstack: https://wiki.openstack.org/wiki/QuantumDevstack
Quantum/LBaaS/HowToRun: https://wiki.openstack.org/wiki/Quantum/LBaaS/HowToRun
OpenStack QA: http://joinfu.com/presentations/openstack-qa-processes/openstack-qa-processes.pdf
0 件のコメント:
コメントを投稿