ハマった時は # init 0

試したことを書き綴ってます

openstack havana on ubuntu 13.10 (nova)

openstackとりまとめページ http://init0.hatenablog.com/entry/2013/10/05/232939

はじめに

novaの各サービス,nova-compute, keystone, glance, mysqlを1サーバ上にオールインワンで構築した時のメモです。

nova インストール

# aptitude install nova-api nova-cert nova-conductor \
 nova-network nova-scheduler nova-compute-kvm rabbitmq-server \
 python-novaclient python-nova-adminclient

設定のため nova の各サービスは一旦停止する。

# stop nova-network
# stop nova-api
# stop nova-scheduler
# stop nova-cert
# stop nova-conductor
# stop nova-compute

設定ファイル修正

/etc/nova/nova.conf

  • sql_connectionで、mysqlの接続設定をする
    • 事前に、nova用のDB(名称はnova)を作成済み
    • openstackのユーザを、stackという名称で、パスワードをstackで作成済み
    • stackユーザは、novaデータベースの全操作を行えるようロールを付与済み
  • ネットワークは、VlanManagerを使用

補足ですが、nova-apiやnova-network,compute,glance,keystoneなどなど、 それぞれを別サーバ上に設置する場合は、

  • glance_host
  • rabbit_host

などの設定が必要です。

[DEFAULT]
dhcpbridge_flagfile=/etc/nova/nova.conf
dhcpbridge=/usr/bin/nova-dhcpbridge
logdir=/var/log/nova
state_path=/var/lib/nova
lock_path=/var/lock/nova
force_dhcp_release=True
iscsi_helper=tgtadm
libvirt_use_virtio_for_bridges=True
connection_type=libvirt
root_helper=sudo nova-rootwrap /etc/nova/rootwrap.conf
verbose=True
ec2_private_dns_show_ip=True
api_paste_config=/etc/nova/api-paste.ini
volumes_path=/var/lib/nova/volumes
enabled_apis=ec2,osapi_compute,metadata
use_ipv6=false

# MySQL Connection #
sql_connection=mysql://stack:stack@127.0.0.1/nova

## nova-api #
auth_strategy=keystone

## Networking #
network_manager=nova.network.manager.VlanManager
vlan_interface=eth0

/etc/nova/api-paste.ini

  • keystoneとの連携設定をする(tenant,userなどはあらかじめkeystoneに作成済み)
    • tenant名は、service
    • user名とpasswordは、nova,nova
    • keystoneとnovaは同一サーバ上に設置するため、auto_hostは、127.0.0.1
### 省略

[filter:authtoken]
paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
auth_host = 127.0.0.1
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = nova
admin_password = nova
# signing_dir is configurable, but the default behavior of the authtoken
# middleware should be sufficient.  It will create a temporary directory
# in the home directory for the user the nova process is running as.
#signing_dir = /var/lib/nova/keystone-signing
# Workaround for https://bugs.launchpad.net/nova/+bug/1154809
auth_version = v2.0

### 省略

nova設定

DB初期化と、novaのネットワーク設定を実施する。

DB初期化

# nova-manage db sync

novaの内部ネットワーク作成(fixed ip)

  • あらかじめkeystoneに登録したテナントのIDを確認する。
    • SERVICE_TOKENはkeystoneの設定時に決めたもの
# export SERVICE_TOKEN="ADMIN"
# export SERVICE_ENDPOINT="http://192.168.0.110:35357/v2.0"
#
# keystone tenant-list
WARNING: Bypassing authentication using a token & endpoint (authentication credentials are being ignored).
+----------------------------------+---------+---------+
|                id                |   name  | enabled |
+----------------------------------+---------+---------+
| 291d8659c224497e9183d8be80aa5ef4 |  admin  |   True  |
| b570ab00d8c2492f95082b21618b2359 |   demo  |   True  |
| c53fbee6f45944f5b77e2a1f41ffa9ab | service |   True  |
+----------------------------------+---------+---------+
#
# unset SERVICE_TOKEN
# unset SERVICE_ENDPOINT

demoテナント用のネットワークを作成する。

  • マルチNICとするので、2系統ネットワークを作成する。
  • 1つ目のネットワークは、
    • vlanid=102 (環境に合わせて任意のvlan idで良い)
    • bridge=br102 (環境に合わせて任意の名称で良い)
    • cidrは、10.0.2.0/24 (環境に合わせて任意)
    • projectには、あらかじめ調べたdemoテナントのIDを指定する
  • 2つ目のネットワークは、
    • vlanid=103 (環境に合わせて任意のvlan idで良い)
    • bridge=br103 (環境に合わせて任意の名称で良い)
    • cidrは、10.0.3.0/24 (環境に合わせて任意)
    • projectには、あらかじめ調べたdemoテナントのIDを指定する
# nova-manage network create --vlan=102 --bridge=br102 \
--bridge_interface=eth0 --fixed_range_v4=10.0.2.0/24 \
--num_network=1 --network_size=256 --label=demo1 --gateway=10.0.2.1 \
--fixed_cidr=10.0.2.0/24 --project=b570ab00d8c2492f95082b21618b2359 
#
# nova-manage network create --vlan=103 --bridge=br103 \
--bridge_interface=eth0 --fixed_range_v4=10.0.3.0/24 \
--num_network=1 --network_size=256 --label=demo2 --gateway=10.0.3.1 \
--fixed_cidr=10.0.3.0/24 --project=b570ab00d8c2492f95082b21618b2359 
  • 補足

うちの環境では、network create実行時に、次のエラーが発生する。無視。 多分、環境が汚れまくっているせいだと思う… (/usr/localに入れた記憶はないんだけど…)

2013-11-02 22:02:35.298 4512 INFO nova.network.driver [-] Loading network driver 'nova.network.linux_net'
2013-11-02 22:02:35.346 4512 ERROR stevedore.extension [-] Could not load 'file': (python-glanceclient 0.7.0 (/usr/local/lib/python2.7/dist-packages/python_glanceclient-0.7.0-py2.7.egg), Requirement.parse('python-glanceclient>=0.9.0'))
2013-11-02 22:02:35.346 4512 ERROR stevedore.extension [-] (python-glanceclient 0.7.0 (/usr/local/lib/python2.7/dist-packages/python_glanceclient-0.7.0-py2.7.egg), Requirement.parse('python-glanceclient>=0.9.0'))
2013-11-02 22:02:35.346 4512 TRACE stevedore.extension Traceback (most recent call last):
2013-11-02 22:02:35.346 4512 TRACE stevedore.extension   File "/usr/lib/python2.7/dist-packages/stevedore/extension.py", line 89, in _load_plugins
2013-11-02 22:02:35.346 4512 TRACE stevedore.extension     invoke_kwds,
2013-11-02 22:02:35.346 4512 TRACE stevedore.extension   File "/usr/lib/python2.7/dist-packages/stevedore/extension.py", line 101, in _load_one_plugin
2013-11-02 22:02:35.346 4512 TRACE stevedore.extension     plugin = ep.load()
2013-11-02 22:02:35.346 4512 TRACE stevedore.extension   File "/usr/local/lib/python2.7/dist-packages/pkg_resources.py", line 2059, in load
2013-11-02 22:02:35.346 4512 TRACE stevedore.extension     if require: self.require(env, installer)
2013-11-02 22:02:35.346 4512 TRACE stevedore.extension   File "/usr/local/lib/python2.7/dist-packages/pkg_resources.py", line 2072, in require
2013-11-02 22:02:35.346 4512 TRACE stevedore.extension     working_set.resolve(self.dist.requires(self.extras),env,installer))
2013-11-02 22:02:35.346 4512 TRACE stevedore.extension   File "/usr/local/lib/python2.7/dist-packages/pkg_resources.py", line 598, in resolve
2013-11-02 22:02:35.346 4512 TRACE stevedore.extension     raise VersionConflict(dist,req) # XXX put more info here
2013-11-02 22:02:35.346 4512 TRACE stevedore.extension VersionConflict: (python-glanceclient 0.7.0 (/usr/local/lib/python2.7/dist-packages/python_glanceclient-0.7.0-py2.7.egg), Requirement.parse('python-glanceclient>=0.9.0'))
2013-11-02 22:02:35.346 4512 TRACE stevedore.extension

floating ip の作成

  • 192.168.0.128/28 を、nova の floating ip として作成(予約)する。
# nova-manage floating create --ip_range=192.168.0.128/28

novaの各サービスを起動

# start nova-network
# start nova-api
# start nova-scheduler
# start nova-cert
# start nova-conductor
# start nova-compute

これで、novaの基本的な設定は環境。 後は、ユーザやテナントごとの個別設定。

ユーザ・テナント設定

環境変数設定

novaのクライアントコマンドを実行する場合は、いくつか環境変数を設定する必要がある。

環境変数をexportするための設定ファイル(/root/creds/demo/openrc)を作成し読み込む

  • AUTH_URLには、keystoneのIPを指定
  • USERNAMEには、keystoneで作成したユーザ名を指定
  • PASSWORDには、上記ユーザのパスワードを指定
  • TENANT_NAMEには、demoを指定(本手順の場合)

openrc

export OS_AUTH_URL=http://192.168.0.110:5000/v2.0
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_TENANT_NAME=demo
# source /root/creds/demo/openrc

VMへのログイン用SSH鍵ペア設定

SSH鍵ペアを生成し、novaに登録する。

  • 出力場所は、/root/creds/demo/id_rsa
  • パスワードは無しとした
# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/creds/demo/id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
  • novaに登録する。
    • 最後の引数は任意の名称 (今回は、demokey とした)
nova keypair-add --pub-key /root/creds/demo/id_rsa.pub demokey 

floating ipでの接続時ポート開放

*とりあえず、icmp,sshのポートを開放する。

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

VM起動

起動するVMイメージを確認する

  • glanceには、すでにVMイメージは登録済み。
  • 今回は、ubuntu13.04を起動するため、ubuntu13.04のIDを確認する。
# nova image-list
+--------------------------------------+-----------------------------+--------+--------+
| ID                                   | Name                        | Status | Server |
+--------------------------------------+-----------------------------+--------+--------+
| 3696a363-6d14-4c4b-93f6-3430cb734351 | ubuntu12.04                 | ACTIVE |        |
| 4a415489-00ae-46b0-9e6c-c398bff8ef9a | ubuntu13.04-qcow2           | ACTIVE |        |
+--------------------------------------+-----------------------------+--------+--------+

VM起動

  • novaコマンドにてVMを起動する。
# nova boot --image ubuntu13.04-qcow2 --flavor m1.small --key-name demokey  vm01

VM起動確認

  • nova listコマンドにて、起動状況を確認する。
    • Running となったらVM起動完了 (ただしSSHが起動完了しているとは限らない)
# nova list
+--------------------------------------+------+--------+------------+-------------+----------+
| ID                                   | Name | Status | Task State | Power State | Networks |
+--------------------------------------+------+--------+------------+-------------+----------+
| 88e8ef57-ddb0-470d-8ce7-ed22d70f2e12 | vm01 | BUILD  | spawning   | NOSTATE     |          |
+--------------------------------------+------+--------+------------+-------------+----------+
# nova list
+--------------------------------------+------+--------+------------+-------------+--------------------------------+
| ID                                   | Name | Status | Task State | Power State | Networks                       |
+--------------------------------------+------+--------+------------+-------------+--------------------------------+
| 88e8ef57-ddb0-470d-8ce7-ed22d70f2e12 | vm01 | ACTIVE | None       | Running     | demo2=10.0.3.3; demo1=10.0.2.3 |
+--------------------------------------+------+--------+------------+-------------+--------------------------------+
  • SSH秘密鍵を使用してログインする。
  • ついでにマルチNICになっているか確認する
# ssh -i /root/creds/demo/id_rsa 10.0.2.3


ubuntu@vm01:~$ dmesg | grep eth
[    3.379119] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[    3.379125] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready
[    6.128238] IPv6: eth0: IPv6 duplicate address fe80::f816:3eff:fe2d:e66b detected!
ubuntu@vm01:~$
ubuntu@vm01:~$ exit
logout
Connection to 10.0.2.3 closed.

floating ip を割り当てSSHログインする

# nova floating-ip-create
+---------------+-------------+----------+------+
| Ip            | Instance Id | Fixed Ip | Pool |
+---------------+-------------+----------+------+
| 192.168.0.129 | None        | None     | nova |
+---------------+-------------+----------+------+

# nova add-floating-ip vm01 192.168.0.129
#
# ssh -i /root/creds/demo/id_rsa ubuntu@192.168.0.129

VMを停止(破棄)する

# nova delete vm01