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

DevStack

DevStackを用いてOpenStackをインストールします。

ハードウェアのスペック

スペックなどは以下のもの以上であれば問題ないでしょう。
また、KVMを利用できる環境で行なってください。
ブリッジの設定も必要ありません。DevStackが行なってくれます。
NICはQuantumを利用し更にL3エージェントを利用するようなリッチな環境であれば1枚ということは無いでしょうがここでは1枚で行います。
NIC 1個
Disk領域 10G
メモリ 2G

OSのインストール

公式で対応しているディストリビューションはUbuntu12.04とFedora16とあります。
Ubuntu12.04 Server版の64bitで確認しました。
インストール時に特に気にすることはあまりありませんので実験であれば適当にインストールして問題ありません。

Gitのインストール

DevStackをダウンロードするのに利用します。

$ sudo apt-get install git -y

DevStackのダウンロード

$ git clone https://github.com/openstack-dev/devstack.git

DevStackの設定

そのままMasterをインストールすると失敗する場合が多いのでバージョンを指定したほうが無難です。
しかし、 まだGrizzlyのブランチが設定されていないみたいなのでそのままMasterを利用します。
QuantumDevstack を参考にしています。
まずはコントローラーノードを構築して後からコンピュートノードを追加していきます。
$ cd devstack
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/stable/diablo
  remotes/origin/stable/essex
  remotes/origin/stable/folsom
localrcに設定を記述しておけばそのとおりに設定してくれます。
quantumを利用する設定にしています。
FIXED_RANGEは内部向けのIPなので何でも好きなのを設定して問題ありません。
FLOATING_RANGEは外部接続向けのIPです。
L3を利用するのであればこれもFIXED_RANGEと同じく好きなネットワークで問題ありません。
外部からフローティングIPを付与したインスタンスへの接続もnova-networkのFLAT DHCPを利用したネットワークと違い結局QuantumのL3が起動しているサーバでルーティングするからです。
なので外部ルータにはQuantumのL3が起動しているサーバをゲートウェイとしたフローティングIP向けのルーティングが必要になります。
間違ってたらすいません、ご指摘願います。
$ vi localrc
HOST_IP=192.168.10.50

ADMIN_PASSWORD=secrete
MYSQL_PASSWORD=nova
RABBIT_PASSWORD=password
SERVICE_PASSWORD=password
SERVICE_TOKEN=ADMIN

SYSLOG=True
LOGFILE=/opt/stack/logs/devstack.log

disable_service n-net
enable_service q-svc
enable_service q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
enable_service quantum

Q_PLUGIN=openvswitch
FIXED_RANGE=100.0.0.0/24
NETWORK_GATEWAY=100.0.0.254
FLOATING_RANGE=200.0.0.0/24
FLAT_INTERFACE=eth0
PUBLIC_INTERFACE=eth0

ENABLE_TENANT_TUNNELS=True
MULTI_HOST=True

VOLUME_BACKING_FILE_SIZE=10000M

#NOVA_BRANCH=stable/grizzly
#GLANCE_BRANCH=stable/grizzly
#KEYSTONE_BRANCH=stable/grizzly
#HORIZON_BRANCH=stable/grizzly
#CINDER_BRANCH=stable/grizzly
#QUANTUM_BRANCH=stable/grizzly
#HEAT_BRANCH=stable/grizzly
#CEILOMETER_BRANCH=stable/grizzly

インストール

シェルを実行すればあとは自動的にOpenStackをインストールしてくれます。

$ ./stack.sh

OpenStackの利用

Horizonの利用

インストールしたサーバのIPアドレスに接続してユーザ名 admin
パスワードは先ほどの設定の ADMIN_PASSWORD に設定したパスワード(この場合は、secreteです。)でHorizonにログインできます。
Quantumをインストールしてますので管理タブには Router
プロジェクトタブには、 Manage Network の項目が追加され ネットワークRoutersネットワークトポロジー のメニューが追加されています。
早速プロジェクトのインスタンスタブからインスタンスを起動してみましょう。
cirros-0.3.1-x86_64-uecというOSイメージが登録されていますのでそれを利用します。
また、Quantumをインストールしていますのでネットワークを選択する必要があります。

CUIからの利用

openrcというOpenStackを利用するための環境変数がセットされているファイルをまずは読み込みます。
第一引数にユーザ、第二引数にプロジェクト名を指定します。
$ . ./openrc admin demo
OpenStackのコマンドはこれで全て利用可能になります。

キーペアの作成

まず、インスタンスへの公開鍵認証でログインする際に利用するキーペアを作成します。
コマンドで作成していますがHorizonでも勿論作成可能です。
コマンドで作成してもHorizon側のdemoプロジェクトで確認出来ますので確認してみましょう。
$ nova keypair-add mykey > mykey
$ sudo chmod 600 mykey
$ nova keypair-list
+-------+-------------------------------------------------+
| Name  | Fingerprint                                     |
+-------+-------------------------------------------------+
| mykey | ff:6e:1a:56:77:ac:b0:c5:b5:8e:ad:d4:e7:c7:dc:97 |
+-------+-------------------------------------------------+

セキュリティグループの設定

セキュリティグループdefaultにicmpとSSHだけ許可しています。
但し、内部通信のセキュリティではなくフローティングIPへのセキュリティになります。
この作業も勿論Hozironで可能です。
$ 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 |              |
+-------------+-----------+---------+-----------+--------------+
$ 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 |              |
+-------------+-----------+---------+-----------+--------------+

追加後は元々入っていたものに先ほど追加した2つの設定が入っています。

$ nova secgroup-list-rules default
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range  | Source Group |
+-------------+-----------+---------+-----------+--------------+
|             | -1        | -1      |           | default      |
|             | -1        | -1      |           | default      |
| icmp        | -1        | -1      | 0.0.0.0/0 |              |
| tcp         | 22        | 22      | 0.0.0.0/0 |              |
+-------------+-----------+---------+-----------+--------------+
次にインスタンスを起動します。
イメージはCirros0.3.1が用意されています。
$ nova image-list
+--------------------------------------+---------------------------------+--------+--------+
| ID                                   | Name                            | Status | Server |
+--------------------------------------+---------------------------------+--------+--------+
| b7cf5fdb-6ca3-4f65-abe5-03e7e487d604 | cirros-0.3.1-x86_64-uec         | ACTIVE |        |
| 1c441da4-35ad-4325-8c97-76c135348b96 | cirros-0.3.1-x86_64-uec-kernel  | ACTIVE |        |
| fcbc20c9-096a-4803-8348-61cc57731543 | cirros-0.3.1-x86_64-uec-ramdisk | ACTIVE |        |
+--------------------------------------+---------------------------------+--------+--------+
インスタンスの起動にはインスタンスタイプも必要になりますので確認します。
$ nova flavor-list
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+-------------+
| ID | Name      | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public | extra_specs |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+-------------+
| 1  | m1.tiny   | 512       | 0    | 0         |      | 1     | 1.0         | True      | {}          |
| 2  | m1.small  | 2048      | 20   | 0         |      | 1     | 1.0         | True      | {}          |
| 3  | m1.medium | 4096      | 40   | 0         |      | 2     | 1.0         | True      | {}          |
| 4  | m1.large  | 8192      | 80   | 0         |      | 4     | 1.0         | True      | {}          |
| 42 | m1.nano   | 64        | 0    | 0         |      | 1     | 1.0         | True      | {}          |
| 5  | m1.xlarge | 16384     | 160  | 0         |      | 8     | 1.0         | True      | {}          |
| 84 | m1.micro  | 128       | 0    | 0         |      | 1     | 1.0         | True      | {}          |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+-------------+
Quantumを利用していますのでどのネットワークでインスタンスを起動するかも必要になりますので確認します。
$ nova net-list
+--------------------------------------+---------+------+
| ID                                   | Label   | CIDR |
+--------------------------------------+---------+------+
| 6d33b997-9a15-4040-b526-f4f5a0edab10 | private | None |
| bdb1f6fc-7721-4fd3-b6f1-143a41c909d9 | nova    | None |
+--------------------------------------+---------+------+
全ての情報が集まったのでインスタンスを起動します。
ネットワークはnovaが外部ネットワークなのでprivateのほうのIDを選びます。
コマンドよりHorizonのほうが楽ちんです。
$ nova boot --flavor m1.tiny --image cirros-0.3.1-x86_64-uec --security-groups default --nic net-id=6d33b997-9a15-4040-b526-f4f5a0edab10 --key_name mykey cirros_001
+-------------------------------------+--------------------------------------+
| Property                            | Value                                |
+-------------------------------------+--------------------------------------+
| status                              | BUILD                                |
| updated                             | 2013-03-30T06:07:47Z                 |
| OS-EXT-STS:task_state               | scheduling                           |
| OS-EXT-SRV-ATTR:host                | None                                 |
| key_name                            | mykey                                |
| image                               | cirros-0.3.1-x86_64-uec              |
| hostId                              |                                      |
| OS-EXT-STS:vm_state                 | building                             |
| OS-EXT-SRV-ATTR:instance_name       | instance-00000003                    |
| OS-EXT-SRV-ATTR:hypervisor_hostname | None                                 |
| flavor                              | m1.tiny                              |
| id                                  | 52501c9b-59ef-48bd-8b76-1a27be6481c4 |
| security_groups                     | [{u'name': u'default'}]              |
| user_id                             | 97a3951c499e4e278f41a96efe4e8115     |
| name                                | cirros_001                           |
| adminPass                           | p6T6uvBouD8J                         |
| tenant_id                           | 1970ea309a3648b9acc498e443f8c0c0     |
| created                             | 2013-03-30T06:07:47Z                 |
| OS-DCF:diskConfig                   | MANUAL                               |
| metadata                            | {}                                   |
| accessIPv4                          |                                      |
| accessIPv6                          |                                      |
| progress                            | 0                                    |
| OS-EXT-STS:power_state              | 0                                    |
| OS-EXT-AZ:availability_zone         | None                                 |
| config_drive                        |                                      |
+-------------------------------------+--------------------------------------+
無事に起動したか確認します。
$ nova list
+--------------------------------------+------------+--------+----------------------------------+
| ID                                   | Name       | Status | Networks                         |
+--------------------------------------+------------+--------+----------------------------------+
| 52501c9b-59ef-48bd-8b76-1a27be6481c4 | cirros_001 | ACTIVE | private=10.0.0.4                 |
+--------------------------------------+------------+--------+----------------------------------+
ログイン出来るか確認します。
$ ssh -i mykey root@10.0.0.4
もしサーバを再起動するのであれば自動的にプロセスは起動しませんので起動後にコマンドを実施します。
先にポート、ルーティングの
$ sudo ip addr add 200.0.0.1/24 dev br-ex
$ sudo ip link set br-ex up
$ sudo route add -net 100.0.0.0/24 gw 200.0.0.2
$ sudo losetup -f --show /opt/stack/data/stack-volumes-backing-file
$ cd ~/devstack
$ ./rejoin-stack.sh

コンピュートノードの追加

コンピュートノードを追加したい場合はコンピュートノード側で同じようにDevStackを実行します。

$ sudo apt-get install git -y
$ git clone https://github.com/openstack-dev/devstack.git
$ cd devstack
$ vi localrc
HOST_IP=192.168.10.51

ADMIN_PASSWORD=secrete
MYSQL_PASSWORD=nova
RABBIT_PASSWORD=password
SERVICE_PASSWORD=password
SERVICE_TOKEN=ADMIN

SYSLOG=True
LOGFILE=/opt/stack/logs/devstack.log

ENABLED_SERVICES=n-cpu,rabbit,g-api,quantum,q-agt
ENABLE_TENANT_TUNNELS=True

FLAT_INTERFACE=eth0

MULTI_HOST=True

#NOVA_BRANCH=stable/grizzly
#GLANCE_BRANCH=stable/grizzly
#KEYSTONE_BRANCH=stable/grizzly
#HORIZON_BRANCH=stable/grizzly
#CINDER_BRANCH=stable/grizzly
#QUANTUM_BRANCH=stable/grizzly
#HEAT_BRANCH=stable/grizzly
#CEILOMETER_BRANCH=stable/grizzly

後は、実行するだけです。

$ ./stack.sh