このエントリーをはてなブックマークに追加

2.2.6. Cloud compute (Nova)のインストール

Novaはサブコンポーネントがいくつもありそれら全てをあわせてNovaと呼びます。

2.2.6.1. Novaのダウンロード

Novaのソースをダウンロードします。
またNovaAPIを利用するためのクライアントもダウンロードしておきます。
ダウンロードしたバージョンはMasterになっているためバージョンはどちらもGrizzlyにします。

2.2.6.1.1. Novaのソースをダウンロード

$ sudo git clone https://github.com/openstack/nova.git /opt/nova
$ sudo git clone https://github.com/openstack/python-novaclient.git /opt/python-novaclient

2.2.6.1.2. NovaのバージョンをGrizzlyに固定

$ cd /opt/nova && sudo git checkout -b grizzly origin/stable/grizzly

2.2.6.2. Novaのインストール

ダウンロードしたNovaとクライアントをインストールします。
pipでパッケージの依存関係を解決します。
$ sudo pip install -r /opt/nova/tools/pip-requires
$ cd /opt/nova && sudo python setup.py install
$ sudo pip install -r /opt/python-glanceclient/tools/pip-requires
$ cd /opt/python-novaclient && sudo python setup.py install

2.2.6.3. Novaが利用するユーザ、ディレクトリなどの作成

ソースからインストールする場合はユーザやディレクトリを作成する必要がありますので作成します。
またnovaユーザがlibvirtdを利用するのでグループに追加しておきます。
しかし何故かグループから消える時があるのでそのためにいつもnovaの起動前に再度追加するようにしてます。
$ sudo useradd nova -m -d /var/lib/nova -s /bin/false
$ sudo usermod -G libvirtd nova
$ sudo mkdir /etc/nova
$ sudo mkdir /var/log/nova
$ sudo mkdir /var/lib/nova/instances /var/lib/nova/images /var/lib/nova/keys /var/lib/nova/networks
$ sudo cp -a /opt/nova/etc/nova/* /etc/nova
$ sudo chown nova:nova /var/log/nova /var/lib/nova -R

2.2.6.4. Novaの設定

適宜IPアドレスなどは環境にあったものに変更してください。
my_ip はコンピュートノードそれぞれのアドレスに設定する必要があります。
あと、バグなのか memcached_servers の設定を行うとnoVNCを利用することができませんので注意

して下さい。

# vi /etc/nova/nova.conf
[DEFAULT]
verbose=True
my_ip=192.168.10.50
allow_admin_api=True
api_paste_config=/etc/nova/api-paste.ini
instances_path=/var/lib/nova/instances
compute_driver=libvirt.LibvirtDriver
live_migration_uri=qemu+tcp://%s/system
live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE
rootwrap_config=/etc/nova/rootwrap.conf
multi_host=True
send_arp_for_ha=True
ec2_private_dns_show_ip=True

#behavior of an instance of when the host has been started
start_guests_on_host_boot=True
resume_guests_state_on_host_boot=True

#logging and other administrative
logdir=/var/log/nova
state_path=/var/lib/nova
lock_path=/var/lock/nova

#network
libvirt_use_virtio_for_bridges = True
network_manager=nova.network.manager.FlatDHCPManager
dhcpbridge_flagfile=/etc/nova/nova.conf
dhcpbridge=/usr/bin/nova-dhcpbridge
public_interface=br100
flat_interface=eth0
flat_network_bridge=br100
fixed_range=10.0.0.0/24
flat_network_dhcp_start=10.0.0.2
network_size=255
force_dhcp_release = True
flat_injected=false
use_ipv6=false

#firewall
firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver

#vnc
novncproxy_base_url=http://192.168.10.50:6080/vnc_auto.html
xvpvncproxy_base_url=http://192.168.10.50:6081/console
vncserver_proxyclient_address=127.0.0.1
vncserver_listen=0.0.0.0
vnc_keymap=ja

#scheduler
scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler

#object
s3_host=stack01
use_cow_images=yes

#glance
image_service=nova.image.glance.GlanceImageService
glance_api_servers=stack01:9292

#rabbit
rabbit_host=stack01
rabbit_virtual_host=/nova
rabbit_userid=nova
rabbit_password=password

#nova database
sql_connection=mysql://nova:password@stack01/nova

#cinder
enabled_apis=ec2,osapi_compute,metadata
volume_api_class=nova.volume.cinder.API

#keystone
auth_strategy=keystone
keystone_ec2_url=http://stack01:5000/v2.0/ec2tokens

#memcache
#memcached_servers=stack01:11211

コンフィグをパッケージでインストールしたものと同じするためにシンボリックリンクを貼っておきます。

$ sudo ln -s /usr/local/bin/nova-dhcpbridge /usr/bin/nova-dhcpbridge

2.2.6.4.1. nova-compute.confの設定

仮想マシンを起動するハイパーバイザー、コンテナを指定します。
ここではKVMを指定します。他にはlxcやxenなども選択できます。
$ sudo vi /etc/nova/nova-compute.conf
[default]
libvirt_type=kvm

2.2.6.4.2. api-paste.iniの設定

Keystone連携を行うための設定を行います。
[filter:authtoken]の項目を変更します。
# vi /etc/nova/api-paste.ini
[filter:authtoken]
paste.filter_factory = keystone.middleware.auth_token:filter_factory
auth_host = stack01
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = nova
admin_password = password
signing_dirname = /tmp/keystone-signing-nova

2.2.6.5. データベースの作成

Novaが利用するデータベースを作成します。
Novaのデータベースを設定するためのユーザ、パスワードはMySQLをインストールした時のものですので注意して下さい。
データベース名nova、ユーザ名nova、パスワードはpasswordとしているため適切なものへ変更してください。
ホスト名も同様にstack01としていますので変更が必要であればおこなって下さい。
$ mysql -u root -pnova -e "drop database nova;"
$ mysql -u root -pnova -e "create database nova;"
$ mysql -u root -pnova -e "grant all privileges on nova.* to 'nova'@'%' identified by 'password';"
$ mysql -u root -pnova -e "grant all privileges on nova.* to 'nova'@'localhost' identified by 'password';"
$ mysql -u root -pnova -e "grant all privileges on nova.* to 'nova'@'stack01' identified by 'password';"
$ sudo nova-manage db sync

2.2.6.6. プロセスの起動

novaのサブプロセスは多いためfor文で起動します。自動起動の設定も行います。
但し、nova-computeの起動はOS起動時にうまく行かないことが多いためOS起動時はキチンと確認して下さい。
また、起動スクリプトが必要なため作成します。

2.2.6.6.1. 起動スクリプトの用意

api cert compute conductor consoleauth console network novncproxy objectstore scheduler
と少し多いですが用意します。

nova-api

$ cat << 'NOVA_API_INIT' | sudo tee /etc/init/nova-api.conf > /dev/null
author "Soren Hansen <soren@linux2go.dk>"

start on runlevel [2345]
stop on runlevel [!2345]


chdir /var/run

pre-start script
        mkdir -p /var/run/nova
        chown nova:root /var/run/nova/

        mkdir -p /var/lock/nova
        chown nova:root /var/lock/nova/
end script

exec start-stop-daemon --start --chuid nova --exec /usr/local/bin/nova-api -- --config-file=/etc/nova/nova.conf
NOVA_API_INIT

nova-cert

$ cat << 'NOVA_CERT_INIT' | sudo tee /etc/init/nova-cert.conf > /dev/null
description "Nova cert"
author "Soren Hansen <soren@linux2go.dk>"

start on runlevel [2345]
stop on runlevel [!2345]


chdir /var/run

pre-start script
        mkdir -p /var/run/nova
        chown nova:root /var/run/nova/

        mkdir -p /var/lock/nova
        chown nova:root /var/lock/nova/
end script

exec start-stop-daemon --start --chuid nova --exec /usr/local/bin/nova-cert -- --config-file=/etc/nova/nova.conf
NOVA_CERT_INIT

nova-compute

$ cat << 'NOVA_COMPUTE_INIT' | sudo tee /etc/init/nova-compute.conf > /dev/null
description "Nova compute worker"
author "Soren Hansen <soren@linux2go.dk>"

start on runlevel [2345]
stop on runlevel [!2345]


chdir /var/run

pre-start script
        mkdir -p /var/run/nova
        chown nova:root /var/run/nova/

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

        modprobe nbd
end script

exec start-stop-daemon --start --chuid nova --exec /usr/local/bin/nova-compute -- --config-file=/etc/nova/nova.conf --config-file=/etc/nova/nova-compute.conf
NOVA_COMPUTE_INIT

nova-conductor

$ cat << 'NOVA_CONDUCTOR_INIT' | sudo tee /etc/init/nova-conductor.conf > /dev/null
description "Nova conductor"
author "Chuck Short <zulcss@ubuntu.com>"

start on runlevel [2345]
stop on runlevel [!2345]


chdir /var/run

pre-start script
        mkdir -p /var/run/nova
        chown nova:root /var/run/nova/

        mkdir -p /var/lock/nova
        chown nova:root /var/lock/nova/
end script

exec start-stop-daemon --start --chuid nova --exec /usr/local/bin/nova-conductor -- --config-file=/etc/nova/nova.conf
NOVA_CONDUCTOR_INIT

nova-consoleauth

$ cat << 'NOVA_CONSOLEAUTH_INIT' | sudo tee /etc/init/nova-consoleauth.conf > /dev/null
description "Nova Console"
author "Vishvananda Ishaya <vishvananda@gmail.com>"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

chdir /var/run

pre-start script
        mkdir -p /var/run/nova
        chown nova:root /var/run/nova

        mkdir -p /var/lock/nova
        chown nova:root /var/lock/nova
end script

exec start-stop-daemon --start --chuid nova --exec /usr/local/bin/nova-consoleauth -- --config-file=/etc/nova/nova.conf
NOVA_CONSOLEAUTH_INIT

nova-console

$ cat << 'NOVA_CONSOLE_INIT' | sudo tee /etc/init/nova-console.conf > /dev/null
description "Nova Console"
author "Vishvananda Ishaya <vishvananda@gmail.com>"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

chdir /var/run

pre-start script
        mkdir -p /var/run/nova
        chown nova:root /var/run/nova

        mkdir -p /var/lock/nova
        chown nova:root /var/lock/nova
end script

exec start-stop-daemon --start --chuid nova --exec /usr/local/bin/nova-console -- --config-file=/etc/nova/nova.conf
NOVA_CONSOLE_INIT

nova-network

$ cat << 'NOVA_NETWORK_INIT' | sudo tee /etc/init/nova-network.conf > /dev/null
description "Nova network worker"
author "Soren Hansen <soren@linux2go.dk>"

start on runlevel [2345]
stop on runlevel [!2345]

chdir /var/run

pre-start script
        mkdir -p /var/run/nova
        chown nova:root /var/run/nova/

        mkdir -p /var/lock/nova
        chown nova:root /var/lock/nova/
end script

exec start-stop-daemon --start --chuid nova --exec /usr/local/bin/nova-network -- --config-file=/etc/nova/nova.conf
NOVA_NETWORK_INIT

nova-novncproxy

$ cat << 'NOVA_NOVNCPXORY_INIT' | sudo tee /etc/init/nova-novncproxy.conf > /dev/null
description "Nova NoVNC proxy"
author "Vishvananda Ishaya <vishvananda@gmail.com>"

start on runlevel [2345]
stop on runlevel [!2345]

chdir /var/run

pre-start script
   mkdir -p /var/run/nova
   chown nova:root /var/run/nova/

   mkdir -p /var/lock/nova
   chown nova:root /var/lock/nova/
end script

exec start-stop-daemon --start --chuid nova --exec /usr/local/bin/nova-novncproxy -- --config-file=/etc/nova/nova.conf
NOVA_NOVNCPXORY_INIT

nova-objectstore

$ cat << 'NOVA_OBJECTSTORE_INIT' | sudo tee /etc/init/nova-objectstore.conf > /dev/null
description "Nova object store"
author "Soren Hansen <soren@linux2go.dk>"

start on runlevel [2345]
stop on runlevel [!2345]

chdir /var/run

pre-start script
    mkdir -p /var/run/nova
    chown nova:root /var/run/nova/

        mkdir -p /var/lock/nova
        chown nova:root /var/lock/nova/
end script

exec start-stop-daemon --start --chuid nova --exec /usr/local/bin/nova-objectstore -- --config-file=/etc/nova/nova.conf
NOVA_OBJECTSTORE_INIT

nova-scheduler

$ cat << 'NOVA_SCHEDULER_INIT' | sudo tee /etc/init/nova-scheduler.conf > /dev/null
description "Nova scheduler"
author "Soren Hansen <soren@linux2go.dk>"

start on runlevel [2345]
stop on runlevel [!2345]


chdir /var/run

pre-start script
        mkdir -p /var/run/nova
        chown nova:root /var/run/nova/

        mkdir -p /var/lock/nova
        chown nova:root /var/lock/nova/
end script

exec start-stop-daemon --start --chuid nova --exec /usr/local/bin/nova-scheduler -- --config-file=/etc/nova/nova.conf
NOVA_SCHEDULER_INIT

2.2.6.6.2. SUDOの設定

プロセスを起動するためにnovaのsudo設定が必要ですのでおこなっておきます。

$ cat << 'NOVA_SUDO' | sudo tee /etc/sudoers.d/nova_sudoers > /dev/null
Defaults:nova !requiretty

nova ALL = (root) NOPASSWD: /usr/local/bin/nova-rootwrap
NOVA_SUDO
$ sudo chmod 440 /etc/sudoers.d/*

2.2.6.6.3. プロセスの起動

サブコンポーネントが多いためfor文で回して起動します。
あと、libvirtdグループにしつこくnovaを追加しておきます。
$ sudo usermod -G libvirtd nova
$ for i in api cert compute conductor consoleauth console network novncproxy objectstore scheduler
do
  sudo start nova-$i ; sudo restart nova-$i
done

2.2.6.6.4. プロセスの確認

以下のようにプロセスが起動していれば問題ありません。
$ sudo nova-manage service list
Binary           Host                                 Zone             Status     State Updated_At
nova-consoleauth stack01                              internal         enabled    :-)   2013-03-24 09:09:28
nova-conductor   stack01                              internal         enabled    :-)   2013-03-24 09:09:26
nova-console     stack01                              internal         enabled    :-)   2013-03-24 09:09:28
nova-scheduler   stack01                              internal         enabled    :-)   2013-03-24 09:09:28
nova-cert        stack01                              internal         enabled    :-)   2013-03-24 09:09:28
nova-network     stack01                              internal         enabled    :-)   2013-03-24 09:09:29
nova-compute     stack01                              nova             enabled    :-)   2013-03-24 09:09:27
Novaのインストールは以上です。
ここまでで仮想マシンなどは起動可能ですがやはりGUIで操作できたほうが便利ですのでHorizonもインストールしましょう。