さくらの専用サーバと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)。