devstackでOpenStackをデプロイ

OpenStackのデプロイ方法について、RDO/packstackのやり方は書いたので、devstackを使ったやり方もメモを残しておく。


ちなみにdevstackの場合、公開されているリポジトリからソースコードをダウンロードして環境構築を行うので、最新のコードでOpenStack環境が構築できます*1。とりあえず環境はこんな感じ。

# 項目 今回の設定
1 CPU 2個
2 メモリ 8GB
3 HDD 80GB
4 OS Fedora 21
5 OpenStack Kilo+
6 その他 KVM上で構築


そして、ざっくりとした構成はRDOの時と同じで、2枚のNICが刺さってて、一つは管理用、もうひとつは外部接続用とする。


1. NetworkManagerサービスの無効化

# systemctl stop NetworkManager
# systemctl disable NetworkManager


2. NICの設定とnetworkサービスの有効化

# cat /etc/sysconfig/network-scripts/ifcfg-eth0
HWADDR=<MAC Address>
TYPE="Ethernet"
BOOTPROTO="stacic"
NAME="eth0"
ONBOOT="yes"
IPADDR="192.168.100.2"
NETMASK="255.255.255.0"
GATEWAY="192.168.100.1"
# cat /etc/sysconfig/network-scripts/ifcfg-eth1
HWADDR=<MAC Address>
TYPE="Ethernet"
BOOTPROTO="static"
NAME="eth1"
ONBOOT="yes"
IPADDR="192.168.101.2"
NETMASK="255.255.255.0"
GATEWAY="192.168.101.1"
DEFROUTE="no"
# systemctl restart network
# systemctrl enable network


3. 最新パッケージへupdate

# yum update -y


4. devstackのソースをダウンロード

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


5. 設定ファイルの作成
samples/local.confをベースに修正。

$ cd devstack
$ cp samples/local.conf .
vi local.conf
[[local|localrc]]
SERVICE_TOKEN=<TOKEN>
ADMIN_PASSWORD=<PASSWORD>
MYSQL_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD

HOST_IP=192.168.101.50

# Services
# --------
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 n-novnc

# Logging
# -------
LOGFILE=$DEST/logs/stack.sh.log
LOGDAYS=2
SCREEN_LOGDIR=$DEST/logs/screen

# Swift
# -----
SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5
SWIFT_REPLICAS=1
SWIFT_DATA_DIR=$DEST/data

# Neutron
# -------
IP_VERSION=4
PUBLIC_NETWORK_GATEWAY=192.168.101.1
FLOATING_RANGE=192.168.101.240/24
Q_FLOATING_START_IP=192.168.101.240
Q_FLOATING_END_IP=192.168.101.247
Q_FLOATING_ALLOCATION_POOL="start=$Q_FLOATING_START_IP,end=$Q_FLOATING_END_IP"

PUBLIC_BRIDGE=br-ex
PUBLIC_BRIDGE_IP=192.168.101.50

Q_USE_PROVIDERNET_FOR_PUBLIC=True
PUBLIC_PHYSICAL_NETWORK=public
OVS_BRIDGE_MAPPINGS=public:br-ex

PHYSICAL_NETWORK=public
OVS_PHYSICAL_BRIDGE=br-ex

[[post-config|$NOVA_CONF]]
[DEFAULT]
vnc_keymap=ja


6. devstackを実行

./stack.sh


7. br-exにeth1を接続

# ovs-vsctl show
4ca9a93d-18b3-413b-b522-ff9da153d42a
    Bridge br-ex
        Port phy-br-ex
            Interface phy-br-ex
                type: patch
                options: {peer=int-br-ex}
        Port br-ex
            Interface br-ex
                type: internal
    Bridge br-tun
        fail_mode: secure
    <snip>
# ip a
...
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    ...
    inet 192.168.101.50/24 brd 192.168.101.255 scope global eth1
...
# ip l set eth1 down
# ip a del 192.168.101.50/24 dev eth1
# ip a add 192.168.101.50/24 dev br-ex
# ovs-vsctl add-port br-ex eth1
# ip l set eth1 up


これでfloating IPとか割り振って外からインスタンスにアクセスできるはず。
できない場合、Security Groupとかの設定を見直す。

*1:たまに構築できなかったり、動かなかったりするけど