8. Nova インストール手順

インスタンス管理担当 Nova インストール手順を記載します。

8.1. Nova 関連パッケージのインストール

インストール直後から Nova が起動しますので設定前にこれを停止します。

$ sudo apt-get -y install nova-api nova-scheduler nova-volume nova-compute nova-network nova-console nova-consoleauth
$ sudo for A in `ls /etc/init.d/nov*` ; do $A stop ; done

8.2. /etc/nova/nova.conf の作成

デフォルトは存在しない。手で作成。解説は激しく面倒なので省略。 このあたり を見てください。

$ sudo vim /etc/nova/nova.conf
[DEFAULT]

##### Misc #####
logdir=/var/log/nova
state_path=/var/lib/nova
lock_path=/var/lock/nova
root_helper=sudo nova-rootwrap
host=stack
allow_resize_to_same_host=True

#### Logging ####
debug=True
verbose=True

##### RabbitMQ #####
rabbit_host=localhost
rabbit_userid=nova
rabbit_password=y7u8i9YUI
rabbit_virtual_host=/nova

##### MySQL #####
sql_connection=mysql://nova:y7u8i9YUI@localhost/nova

##### Glance #####
image_service=nova.image.glance.GlanceImageService
glance_api_servers=192.168.0.2:9292

##### nova-api #####
auth_strategy=keystone
keystone_ec2_url=http://192.168.0.2:5000/v2.0/ec2tokens
enabled_apis=ec2,osapi_compute,osapi_volume,metadata

##### nova-network #####
network_manager=nova.network.manager.FlatDHCPManager
public_interface=eth0
flat_interface=eth0
flat_network_bridge=br100
network_host=node1
fixed_range=10.0.0.0/8
network_size=1024
dhcpbridge_flagfile=/etc/nova/nova.conf
dhcpbridge=/usr/bin/nova-dhcpbridge
force_dhcp_release=True
fixed_ip_disassociate_timeout=30
my_ip=192.168.0.2
routing_source_ip=192.168.0.2
multi_host=True

##### nova-compute #####
connection_type=libvirt
libvirt_type=kvm
libvirt_use_virtio_for_bridges=True
use_cow_images=True
snapshot_image_format=qcow2
resume_guests_state_on_host_boot=True
start_guests_on_host_boot=True

##### nova-volume #####
iscsi_ip_prefix=192.168.0.
num_targets=100
iscsi_helper=tgtadm
volume_group=stack

##### nova-vncproxy ####
xvpvncproxy_base_url=http://192.168.0.2:6081/console
novncproxy_base_url=http://192.168.0.2:6080/vnc_auto.html
vnc_enabled=true
vnc_keymap=ja
vncserver_listen=0.0.0.0
vncserver_proxyclient_address=192.168.0.2

VirtualBox で動作させる場合は libvirt_type=qemu にすると幸せになれます。

8.2.1. 重要

my_ip, host, volume_group は環境に合わせて正しく設定をしないと死ぬほどはまります。死にました。

8.3. /etc/nova/nova-compute.conf の編集

私は邪魔なので空にしてしまいます。削除するとパッケージのアップデートでこけます。

$ sudo echo -n > /etc/nova/nova-compute.conf

8.4. /etc/nova/api-paste.ini の修正

サンプル設定ファイルを修正します。KeyStone 連携を行う場合の設定を記載します。

8.4.1. デフォルトの設定ファイル(2012/08/02)

root@stack:/etc/nova# cat api-paste.ini
############
# Metadata #
############
[composite:metadata]
use = egg:Paste#urlmap
/: metaversions
/latest: meta
/1.0: meta
/2007-01-19: meta
/2007-03-01: meta
/2007-08-29: meta
/2007-10-10: meta
/2007-12-15: meta
/2008-02-01: meta
/2008-09-01: meta
/2009-04-04: meta

[pipeline:metaversions]
pipeline = ec2faultwrap logrequest metaverapp

[pipeline:meta]
pipeline = ec2faultwrap logrequest metaapp

[app:metaverapp]
paste.app_factory = nova.api.metadata.handler:Versions.factory

[app:metaapp]
paste.app_factory = nova.api.metadata.handler:MetadataRequestHandler.factory

#######
# EC2 #
#######

[composite:ec2]
use = egg:Paste#urlmap
/services/Cloud: ec2cloud

[composite:ec2cloud]
use = call:nova.api.auth:pipeline_factory
noauth = ec2faultwrap logrequest ec2noauth cloudrequest validator ec2executor
deprecated = ec2faultwrap logrequest authenticate cloudrequest validator ec2executor
keystone = ec2faultwrap logrequest ec2keystoneauth cloudrequest validator ec2executor

[filter:ec2faultwrap]
paste.filter_factory = nova.api.ec2:FaultWrapper.factory

[filter:logrequest]
paste.filter_factory = nova.api.ec2:RequestLogging.factory

[filter:ec2lockout]
paste.filter_factory = nova.api.ec2:Lockout.factory

[filter:totoken]
paste.filter_factory = nova.api.ec2:EC2Token.factory

[filter:ec2keystoneauth]
paste.filter_factory = nova.api.ec2:EC2KeystoneAuth.factory

[filter:ec2noauth]
paste.filter_factory = nova.api.ec2:NoAuth.factory

[filter:authenticate]
paste.filter_factory = nova.api.ec2:Authenticate.factory

[filter:cloudrequest]
controller = nova.api.ec2.cloud.CloudController
paste.filter_factory = nova.api.ec2:Requestify.factory

[filter:authorizer]
paste.filter_factory = nova.api.ec2:Authorizer.factory

[filter:validator]
paste.filter_factory = nova.api.ec2:Validator.factory

[app:ec2executor]
paste.app_factory = nova.api.ec2:Executor.factory

#############
# Openstack #
#############

[composite:osapi_compute]
use = call:nova.api.openstack.urlmap:urlmap_factory
/: oscomputeversions
/v1.1: openstack_compute_api_v2
/v2: openstack_compute_api_v2

[composite:osapi_volume]
use = call:nova.api.openstack.urlmap:urlmap_factory
/: osvolumeversions
/v1: openstack_volume_api_v1

[composite:openstack_compute_api_v2]
use = call:nova.api.auth:pipeline_factory
noauth = faultwrap noauth ratelimit osapi_compute_app_v2
deprecated = faultwrap auth ratelimit osapi_compute_app_v2
keystone = faultwrap authtoken keystonecontext ratelimit osapi_compute_app_v2
keystone_nolimit = faultwrap authtoken keystonecontext osapi_compute_app_v2

[composite:openstack_volume_api_v1]
use = call:nova.api.auth:pipeline_factory
noauth = faultwrap noauth ratelimit osapi_volume_app_v1
deprecated = faultwrap auth ratelimit osapi_volume_app_v1
keystone = faultwrap authtoken keystonecontext ratelimit osapi_volume_app_v1
keystone_nolimit = faultwrap authtoken keystonecontext osapi_volume_app_v1

[filter:faultwrap]
paste.filter_factory = nova.api.openstack:FaultWrapper.factory

[filter:auth]
paste.filter_factory = nova.api.openstack.auth:AuthMiddleware.factory

[filter:noauth]
paste.filter_factory = nova.api.openstack.auth:NoAuthMiddleware.factory

[filter:ratelimit]
paste.filter_factory = nova.api.openstack.compute.limits:RateLimitingMiddleware.factory

[app:osapi_compute_app_v2]
paste.app_factory = nova.api.openstack.compute:APIRouter.factory

[pipeline:oscomputeversions]
pipeline = faultwrap oscomputeversionapp

[app:osapi_volume_app_v1]
paste.app_factory = nova.api.openstack.volume:APIRouter.factory

[app:oscomputeversionapp]
paste.app_factory = nova.api.openstack.compute.versions:Versions.factory

[pipeline:osvolumeversions]
pipeline = faultwrap osvolumeversionapp

[app:osvolumeversionapp]
paste.app_factory = nova.api.openstack.volume.versions:Versions.factory

##########
# Shared #
##########

[filter:keystonecontext]
paste.filter_factory = nova.api.auth:NovaKeystoneContext.factory

[filter:authtoken]
paste.filter_factory = keystone.middleware.auth_token:filter_factory
service_protocol = http
service_host = 127.0.0.1
service_port = 5000
auth_host = 127.0.0.1
auth_port = 35357
auth_protocol = http
auth_uri = http://127.0.0.1:5000/
admin_tenant_name = %SERVICE_TENANT_NAME%
admin_user = %SERVICE_USER%
admin_password = %SERVICE_PASSWORD%

8.4.2. 変更箇所とちょっとした解説?

パラメータ 解説 今回設定する値
service_host 192.168.0.2 説明がない…。たぶん、KeyStone のアドレス
service_port 5000 説明がない…。たぶん、KeyStone のポート
auth_host 192.168.0.2 KeyStone サービスURL
auth_port 35357 KeyStone 管理用ポート
auth_uri http://192.168.0.2:5000/ KeyStone 認証用 URL
admin_tenant_name service nova ユーザのテナント
admin_user nova nova サービスを管理するユーザ
admin_password y7u8i9YUI nova ユーザのパスワード

8.5. nova-manage

不要なデータベース(Sqlite)を削除した後、新規データベースの設定を行います。

Nova データベースを初期化し、ネットワークの設定を行います。

$ sudo nova-manage db sync
$ sudo nova-manage network create private --multi_host=T --fixed_range_v4=10.0.0.0/24 --num_networks=1 --network_size=256

Floating IP は必要であれば付与
$ sudo nova-manage floating create --ip_range=XXX.XXX.XXX.XXX/24

8.6. サービス起動

設定後、サービスを起動します。

$ sudo for A in `ls /etc/init.d/nov*` ; do $A start ; done
$ sudo nova-manage service list
Binary           Host                                 Zone             Status     State Updated_At
nova-consoleauth stack                                nova             enabled    :-)   2012-08-01 19:45:19
nova-console     stack                                nova             enabled    :-)   2012-08-01 19:45:19
nova-scheduler   stack                                nova             enabled    :-)   2012-08-01 19:45:20
nova-compute     stack                                nova             enabled    :-)   2012-08-01 19:45:22
nova-network     stack                                nova             enabled    :-)   2012-08-01 19:45:21
nova-volume      stack                                nova             enabled    :-)   2012-08-01 19:45:20
(全てで :-) マークになっていることを確認。時間は UTC)

8.7. 環境変数

以下の環境変数を設定するスクリプトを作成し、.bashrc などから呼び出するように設定します。

export SERVICE_TOKEN=999888777666
export SERVICE_ENDPOINT=http://192.168.0.2:35357/v2.0

export OS_AUTH_USER=glance
export OS_AUTH_KEY=y7u8i9YUI
export OS_AUTH_TENANT=service
export OS_STRATEGY=keystone
export OS_AUTH_STRATEGY=keystone
export OS_AUTH_URL=http://192.168.0.2:5000/v2.0
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=y7u8i9YUI
export OS_REGION_NAME=RegionOne

#Admin
#export EC2_URL=http://192.168.0.2:8773/services/Cloud
#export EC2_ACCESS_KEY=0890d0b5e7274ea1a3180b31f200ca6f
#export EC2_SECRET_KEY=8fbcfee19d804ceba1b520f29f04685e

#Demo
export EC2_URL=http://192.168.0.2:8773/services/Cloud
export EC2_ACCESS_KEY=70af2c3645e54cb4873b62bbade85862
export EC2_SECRET_KEY=91d81426a80c4fe28f7f5312fd5f0644

EC2_ACCESS_KEY と EC2_SECRET_KEY は環境に合わせて変更してください。

8.8. 確認

$ nova list
$ euca-describe-instance