さくらの専用サーバとOpenStackで作るプライベートクラウド 6ページ

novaのインストール

 続いては仮想マシンの操作や管理を行うCompute Service(nova)をインストールする。novaはopenstack-novaパッケージで提供されている。

# yum install openstack-nova

RabbitMQの設定

 novaはコンポーネント内でメッセージをやり取りするためにAMQP(Advanced Message Queue Protocol)ベースのメッセージングキューサービスを使用する。AMQP対応のメッセージングキューサーバーはいくつかあるが、今回はRabbitMQを使用している。RabbitMQ自体は先にインストールしているので、ここではメッセージのやり取りに使用するアカウントの作成のみを行っておく。

 RabbitMQの設定はrabbitmqctlコマンドで行う。以下のように「/nova」という仮想ホストと「nova」ユーザーを作成し、novaユーザーに/nova仮想ホストへのアクセス権限を与える。

# rabbitmqctl add_vhost /nova
Creating vhost "/nova" ...
...done.
# rabbitmqctl add_user nova <パスワード>
Creating user "nova" ...
...done.
# rabbitmqctl set_permissions -p /nova nova ".*" ".*" ".*"
Setting permissions for user "nova" in vhost "/nova" ...
...done.

データベースの設定

 データベース関連の設定はkeystoneやglanceの場合と同じく、oepnstack-dbコマンドで行える。

# openstack-db --init --service nova --password <パスワード>
Please enter the password for the 'root' MySQL user: ←MySQLのrootパスワードを入力
Verified connectivity to MySQL.
Creating 'nova' database.
Updating 'nova' database password in /etc/nova/nova.conf
Asking openstack-nova to sync the database.
Complete!

 以上でMySQLに「nova」データベースと「nova」ユーザーが作成される。

設定ファイルの編集

 novaの設定ファイルは/etc/novaディレクトリ以下に格納されている。変更が必要なのはnova.confおよびapi-paste.iniだ。

 nova.confについては必要最小限の設定しか用意されていないので、次のような内容に変更しておく。

[DEFAULT]

# LOGS/STATE
verbose=True
logdir=/var/log/nova
state_path=/var/lib/nova
lock_path=/var/lock/nova

# AUTHENTICATION
auth_strategy=keystone

# SCHEDULER
compute_scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler

# VOLUMES
volume_group=nova-volumes
volume_name_template=volume-%08x
iscsi_helper=tgtadm

# DATABASE
sql_connection=mysql://nova:novaPassword@192.168.100.21/nova

# COMPUTE
libvirt_type=kvm ←使用する仮想化技術としてKVMを選択する
connection_type=libvirt
instance_name_template=instance-%08x
api_paste_config=/etc/nova/api-paste.ini
allow_resize_to_same_host=True

# APIS
osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions
ec2_dmz_host=192.168.100.21 ←ホストのIPアドレスを指定する
s3_host=192.168.100.21 ←ホストのIPアドレスを指定する

# RABBITMQ
rabbit_host=192.168.100.21 ←ホストのIPアドレスを指定する

# GLANCE
image_service=nova.image.glance.glanceImageService
glance_api_servers=192.168.100.21:9292 ←ホストのIPアドレスを指定する

# NETWORK
network_manager=nova.network.manager.FlatDHCPManager
force_dhcp_release=False
dhcpbridge_flagfile=/etc/nova/nova.conf
dhcpbridge=/usr/bin/nova-dhcpbridge
firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
# Change my_ip to match each host
my_ip=192.168.100.21 ←ホストのIPアドレスを指定する
public_interface=br100 ←使用するブリッジインターフェイスを指定する
vlan_interface=eth1 ←VLANに使用するインターフェイスを指定する
flat_network_bridge=br100 ←使用するブリッジインターフェイスを指定する
flat_interface=eth1 ←使用するネットワークインターフェイスを指定する
fixed_range=192.168.200.0/24 ←仮想マシンが使用するネットワークを指定する

# NOVNC CONSOLE
novncproxy_base_url=http://XXX.XXX.XXX.XXX:6080/vnc_auto.html ←ホストのインターネット側IPアドレスを指定する
# Change vncserver_proxyclient_address and vncserver_listen to match each compute host
vncserver_proxyclient_address=192.168.100.21 ←ホストのIPアドレスを指定する
vncserver_listen=192.168.100.21 ←ホストのIPアドレスを指定する

 また、api-paste.iniについては下記の個所を変更しておく。

[filter:authtoken]
paste.filter_factory = keystone.middleware.auth_token:filter_factory
service_protocol = http
service_host = 192.168.100.21 ←ホストのIPアドレスを指定する
service_port = 5000
auth_host = 192.168.100.21 ←ホストのIPアドレスを指定する
auth_port = 35357
auth_protocol = http
auth_uri = http://192.168.100.21:5000/ ←ホストのIPアドレスを指定する
admin_tenant_name = service ←テナント名を指定する
admin_user = nova ←keystoneで設定したユーザー名を指定する
admin_password = <パスワード> ←keystoneで設定したパスワードを指定する

 設定ファイルの編集が完了したら、nova-manageコマンドでデータベースに設定を反映させる。

# nova-manage db sync

 また、サービスが使用するロックファイルのディレクトリを作成しておく。

# mkdir -p /var/lock/nova
# chown nova:root /var/lock/nova/

sudoersの設定

 novaでは、「nova」ユーザーを使ってネットワーク関連の設定を変更する。変更の際はsudoコマンドを内部的に実行するようになっており、novaユーザーがsudoコマンドを使用できるよう設定しておく必要がある。これはvisudoコマンドを使い、/etc/sudoersファイルに「nova ALL=(ALL) NOPASSWD:ALL」という設定を追加しておけば良い。

# visudo
 :
 :
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
nova ALL=(ALL) NOPASSWD:ALL ←この行を追加

サービスを起動する

 以上の設定が完了したら、サービスを起動させる。

# for svc in api objectstore compute network volume scheduler cert console consoleauth; do chkconfig openstack-nova-$svc on; done
# for svc in api objectstore compute network volume scheduler cert console consoleauth; do service openstack-nova-$svc start; done

 各種サービスが正常に稼働しているかどうかは、nova-manageコマンドで確認できる。以下のように「State」が「:-)」になっていれば正常だ。

# nova-manage service list
Binary           Host                                 Zone             Status     State Updated_At
nova-scheduler   sata                                 nova             enabled    :-)   2012-09-15 10:51:03
nova-compute     sata                                 nova             enabled    :-)   2012-09-15 10:50:58
nova-cert        sata                                 nova             enabled    :-)   2012-09-15 10:51:03
nova-volume      sata                                 nova             enabled    :-)   2012-09-15 10:51:03
nova-network     sata                                 nova             enabled    :-)   2012-09-15 10:51:03
nova-consoleauth sata                                 nova             enabled    :-)   2012-09-15 10:51:03

仮想マシンを稼働させるための事前準備

 以上の作業が完了したら、実際に仮想マシンインスタンスを作成して正しく動作するかどうかを検証しておこう。まず、接続に使用するアカウント情報を環境変数に設定しておく。

$ export OS_USERNAME=adminUser
$ export OS_TENANT_NAME=openstackDemo
$ export OS_PASSWORD=<パスワード>
$ export OS_AUTH_URL=http://192.168.100.21:5000/v2.0/
$ export OS_REGION_NAME=RegionOne

 稼働している仮想マシンインスタンスは、nova listコマンドで確認できる。現時点では仮想マシンは稼働していないので、なにも表示されないはずだ。

$ nova list
+----+------+--------+----------+
| ID | Name | Status | Networks |
+----+------+--------+----------+
+----+------+--------+----------+

 仮想マシンを稼働させるには、テナント単位で設定できる「セキュリティグループ(security groups)」をあらかじめ用意しておく必要がある。これは、仮想マシンインスタンスに対し外部からのアクセスを許可するネットワークプロトコルやポート、IPアドレスを設定するものだ。セキュリティグループの一覧はnova secgroup-listコマンドで確認できる。標準では「defalt」というセキュリティグループが用意されている。

$ nova secgroup-list
+---------+-------------+
|   Name  | Description |
+---------+-------------+
| default | default     |
+---------+-------------+

 このdefaultセキュリティグループに、SSHおよびpingを許可するようルールを追加する。ルールの追加は、nova secgroup-add-ruleコマンドで行える。まず、SSH(TCPの22番ポート)を許可するルールを追加する。

$ nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port |  IP Range | Source Group |
+-------------+-----------+---------+-----------+--------------+
| tcp         | 22        | 22      | 0.0.0.0/0 |              |
+-------------+-----------+---------+-----------+--------------+

 続いてping(ICMP)を許可するルールを追加する。

$ nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port |  IP Range | Source Group |
+-------------+-----------+---------+-----------+--------------+
| icmp        | -1        | -1      | 0.0.0.0/0 |              |
+-------------+-----------+---------+-----------+--------------+

 これで、仮想マシンインスタンスに対しSSHでのアクセスが可能となる。また、仮想マシンインスタンスのアクセスに使用するSSH公開鍵も追加しておく。SSH公開鍵の追加は、nova keypair-addコマンドで行える。ここでは、~/.ssh/id_rsa.pubという公開鍵を「mykey」という名称で登録している。

$ nova keypair-add --pub_key ~/.ssh/id_rsa.pub mykey

 登録した公開鍵一覧はnova keypair-listコマンドで確認できる。

$ nova keypair-list
+-------+-------------------------------------------------+
|  Name |                   Fingerprint                   |
+-------+-------------------------------------------------+
| mykey | f2:07:47:9a:b9:2e:16:62:06:5e:e6:d6:54:37:f3:f1 |
+-------+-------------------------------------------------+

仮想マシンインスタンスの作成と起動

 仮想マシンを作成するには、仮想マシンの「フレーバー(flavor)を指定する必要がある。フレーバーとは、仮想マシンに割り当てるメモリ容量やストレージ容量、仮想マシン、使用できるネットワーク帯域などのリソースを定義したものだ。定義されているフレーバー一覧はnova flavor-listコマンドで確認できる。

$ nova flavor-list
+----+-----------+-----------+------+-----------+------+-------+-------------+
| ID |    Name   | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor |
+----+-----------+-----------+------+-----------+------+-------+-------------+
| 1  | m1.tiny   | 512       | 0    | 0         |      | 1     | 1.0         |
| 2  | m1.small  | 2048      | 10   | 20        |      | 1     | 1.0         |
| 3  | m1.medium | 4096      | 10   | 40        |      | 2     | 1.0         |
| 4  | m1.large  | 8192      | 10   | 80        |      | 4     | 1.0         |
| 5  | m1.xlarge | 16384     | 10   | 160       |      | 8     | 1.0         |
+----+-----------+-----------+------+-----------+------+-------+-------------+

 デフォルトでは「m1.tiny」から「m1.xlarg」まで5つのフレーバーが用意されている。今回は、「m1.small」フレーバーを使い、glanceの動作確認の項で登録したCirrOSを起動させてみよう。まず、nova image-listコマンドで利用できるイメージとそのIDを確認する。

$ nova image-list
+--------------------------------------+---------------------+--------+--------+
|                  ID                  |         Name        | Status | Server |
+--------------------------------------+---------------------+--------+--------+
| bb702558-75e2-419e-8128-85eecedaf14e | cirros-0.3.0-x86_64 | ACTIVE |        |
+--------------------------------------+---------------------+--------+--------+

 次に、nova bootコマンドで仮想マシンインスタンスを作成する。–flavorオプションでは使用するフレーバーを、–imageオプションでは使用するイメージのIDを、–key_nameオプションでは接続に使用するSSH公開鍵を、–security_groupオプションでは使用するセキュリティグループを指定する。また。最後のオプションでは仮想マシンインスタンスの名前を指定できる。ここでは「cirros」という名前を指定している。

$ nova boot --flavor 2 --image bb702558-75e2-419e-8128-85eecedaf14e --key_name mykey --security_group default cirros
+-------------------------------------+--------------------------------------+
|               Property              |                Value                 |
+-------------------------------------+--------------------------------------+
| OS-DCF:diskConfig                   | MANUAL                               |
| OS-EXT-SRV-ATTR:host                | sata                                 |
| OS-EXT-SRV-ATTR:hypervisor_hostname | None                                 |
| OS-EXT-SRV-ATTR:instance_name       | instance-00000007                    |
| OS-EXT-STS:power_state              | 0                                    |
| OS-EXT-STS:task_state               | scheduling                           |
| OS-EXT-STS:vm_state                 | building                             |
| accessIPv4                          |                                      |
| accessIPv6                          |                                      |
| adminPass                           | bNuQ4YH798w6                         |
| config_drive                        |                                      |
| created                             | 2012-09-15T11:34:41Z                 |
| flavor                              | m1.small                             |
| hostId                              |                                      |
| id                                  | 8e8f9032-a27c-4b02-8c2d-42f420fe7127 |
| image                               | cirros-0.3.0-x86_64                  |
| key_name                            | mykey                                |
| metadata                            | {}                                   |
| name                                | cirros                               |
| progress                            | 0                                    |
| status                              | BUILD                                |
| tenant_id                           | bf7522a74c2b4dd09b41f0ea25912748     |
| updated                             | 2012-09-15T11:34:41Z                 |
| user_id                             | 76da1f25b02d44c8b80f9579fe3fc4d2     |
+-------------------------------------+--------------------------------------+

 作成した仮想マシンインスタンスのステータスは、nova listコマンドで確認できる。

$ nova list
+--------------------------------------+---------+--------+-----------------------+
|                  ID                  |   Name  | Status |        Networks       |
+--------------------------------------+---------+--------+-----------------------+
| 8e8f9032-a27c-4b02-8c2d-42f420fe7127 | cirros  | ACTIVE | private=192.168.200.2 |
+--------------------------------------+---------+--------+-----------------------+

 仮想マシンインスタンスのコンソール出力は、nova console-logコマンドで確認できる。

$ nova console-log 8e8f9032-a27c-4b02-8c2d-42f420fe7127
][    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 3.0.0-12-virtual (buildd@crested) (gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3) ) #20-Ubuntu SMP Fri Oct 7 18:19:02 UTC 2011 (Ubuntu 3.0.0-12.20-virtual 3.0.4)
 :
 :
  ____               ____  ____
 / __/ __ ____ ____ / __ \/ __/
/ /__ / // __// __// /_/ /\ \
\___//_//_/  /_/   \____/___/
 http://launchpad.net/cirros


login as 'cirros' user. default password: 'cubswin:)'. use 'sudo' for root.
cirros login:

 仮想マシンの起動が確認できたら、SSHでログインしてみよう。仮想マシンに割り当てられたIPアドレスはnova listコマンドで確認できる。

$ nova list
+--------------------------------------+---------+--------+-----------------------+
|                  ID                  |   Name  | Status |        Networks       |
+--------------------------------------+---------+--------+-----------------------+
| 8e8f9032-a27c-4b02-8c2d-42f420fe7127 | cirros  | ACTIVE | private=192.168.200.2 |
+--------------------------------------+---------+--------+-----------------------+

 このIPアドレスに対し、sshコマンドで接続を行う。CirrOSでは、ユーザー名が「cirros」、パスワードが「cubswin:)」と設定されたアカウントがデフォルトで用意されているので、このユーザーログインしてみよう。

$ ssh cirros@192.168.200.2
Enter passphrase for key '/home/hylom/.ssh/id_rsa':
$ uname -a
Linux cirros 3.0.0-12-virtual #20-Ubuntu SMP Fri Oct 7 18:19:02 UTC 2011 x86_64 GNU/Linux
$ exit

 仮想マシンインスタンスを停止させるにはnova deleteコマンドを使用する。

$ nova delete 8e8f9032-a27c-4b02-8c2d-42f420fe7127

 nova deleteコマンドの実行度、再度nova listコマンドを実行するとインスタンスが削除されていることが分かる。

$ nova list
+----+------+--------+----------+
| ID | Name | Status | Networks |
+----+------+--------+----------+
+----+------+--------+----------+

novnc関連の設定

 仮想マシンインスタンスに外部からアクセスしたい場合、通常はSSHなどを使用するのが一般的だ。しかし、インスタンスの設定やその動作状況によっては、SSH接続が利用できない場合がある。このような場合に向け、OpenStackにはVNC経由で仮想マシンのコンソールにアクセスできる機能がある。このVNC接続を利用するには専用のVNCクライアントが必要で、「xvpvnc」と「novnc」という2つのクライアントが用意されている。前者はJavaで実装されたクライアントで、後者はWebブラウザ上で動作するクライアントだ。今回は後者について有効にしておこう。

 まず、novncを利用するために必要なnovncproxyサービスを含むopenstack-nova-novncproxyパッケージをインストールする。

# yum install openstack-nova-novncproxy

 novncproxyの設定はnova.conf内で行う。具体的には以下の個所を変更する。

# NOVNC CONSOLE
novncproxy_base_url=http://XXX.XXX.XXX.XXX:6080/vnc_auto.html ←ホストのインターネット側IPアドレスを指定する
# Change vncserver_proxyclient_address and vncserver_listen to match each compute host
vncserver_proxyclient_address=192.168.100.21 ←ホストのIPアドレスを指定する
vncserver_listen=192.168.100.21 ←ホストのIPアドレスを指定する

 ここで、novncproxy_base_urlにはクライアント(Webブラウザ)がアクセスできるURLを指定しておく必要がある。今回は、制御用ノードのインターネット側IPアドレスを指定している。nova.confを変更したら、nova-manageコマンドでデータベースに設定を反映させておこう。

# nova-manage db sync

 最後にサービスを起動させる。

# chkconfig openstack-nova-novncproxy on
# service openstack-nova-novncproxy start

 また、ファイアウォール(iptables)の設定を行ってTCPの6080番ポートに外部からアクセスできるようにしておこう。

 設定完了後にnova get-vnc-consoleコマンドを実行すると、Webブラウザで接続するためのURLが表示される。

$ nova get-vnc-console cirros novnc
+-------+------------------------------------------------------------------------------------+
|  Type |                                        Url                                         |
+-------+------------------------------------------------------------------------------------+
| novnc | http://133.242.6.157:6080/vnc_auto.html?token=d9904a4a-f12d-44ea-b34e-868b0f9262c5 |
+-------+------------------------------------------------------------------------------------+

 このURLにWebブラウザでアクセスすると、仮想マシンのコンソールにアクセスできる(図11)。

図11 Webブラウザで仮想マシンのコンソールにアクセスできる
図11 Webブラウザで仮想マシンのコンソールにアクセスできる