: O. Yuanying

OpenStack Magnum の開発環境を整える 2015年1月版

なんかしょっちゅう devstack がぶっ壊れるので、 OpenStack Magnum の開発環境を整える方法をメモ。 絶賛開発中なのですぐに情報が古くなると思うけど。

Devstack

8GB ほどメモリを積んだ VM を Vagrant で用意。 devstack を起動する。

必要パッケージのインストール

$ sudo apt-get update
$ sudo apt-get install -y vim git libmysqlclient-dev openvswitch-switch

kubernetes client のインストール

ダウンロードページ から適当なバージョンのリリース、今回は v0.8.0 をダウンロードし、 適時 PATH の通った場所にコピー。

$ curl -O -L https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v0.8.0/kubernetes.tar.gz
$ tar zxvf kubernetes.tar.gz
$ cd kubernetes/platforms/linux/amd64/
$ sudo cp -rp ./* /usr/local/bin/

Network 事前準備

eth2 を以下のように修正。

auto eth2
iface eth2 inet manual
        up ifconfig $IFACE 0.0.0.0 up
        up ip link set $IFACE promisc on
        down ip link set $IFACE promisc off
        down ifconfig $IFACE 0.0.0.0 down

devstack がその後に作る br-ex を事前に作り設定。

$ sudo ifup eth2
$ sudo ovs-vsctl add-br br-ex
$ sudo ovs-vsctl add-port br-ex eth2
$ sudo ovs-vsctl add-port br-ex p0
$ sudo ovs-vsctl set interface p0 type=internal
$ sudo ifconfig p0 192.168.11.139

Devstack 起動

$ cd /vagrant
$ git clone https://git.openstack.org/openstack-dev/devstack
$ cd devstack
$ git checkout -b stable/juno origin/stable/juno
$ ./stack.sh

devstack の localrc は以下。 現状、利用している heat のテンプレートが最新版で動かないので、 stable/juno を利用。

HOST_IP=192.168.11.139

FLOATING_RANGE=192.168.11.0/24
Q_FLOATING_ALLOCATION_POOL="start=192.168.11.133,end=192.168.11.138"
PUBLIC_NETWORK_GATEWAY=192.168.11.1

Q_USE_SECGROUP=True
ENABLE_TENANT_VLANS=True
TENANT_VLAN_RANGE=1000:1999
PHYSICAL_NETWORK=default
OVS_PHYSICAL_BRIDGE=br-ex

NETWORK_GATEWAY=10.11.12.1
FIXED_RANGE=10.11.12.0/24
FIXED_NETWORK_SIZE=256

ADMIN_PASSWORD=openstack
MYSQL_PASSWORD=stackdb
RABBIT_PASSWORD=stackqueue
SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=tokentoken

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 neutron

NOVA_BRANCH=stable/juno
GLANCE_BRANCH=stable/juno
KEYSTONE_BRANCH=stable/juno
HORIZON_BRANCH=stable/juno
CINDER_BRANCH=stable/juno
NEUTRON_BRANCH=stable/juno
CEILOMETER_BRANCH=stable/juno
HEAT_BRANCH=stable/juno

LOGFILE=$DEST/logs/devstack.log
DEST=/opt/stack
SCREEN_LOGDIR=$DEST/logs/screen

local.sh

# /bin/bash
sudo ifconfig br-ex 0.0.0.0

Magnum

ソースのインストール

Magnum サーバ

$ cd /vagrant
$ git clone https://github.com/stackforge/magnum.git
$ cd magnum
$ tox -evenv -- echo 'done'

Magnum クライアント

$ cd /vagrant
$ git clone https://github.com/stackforge/python-magnumclient.git
$ cd python-magnumclient
$ tox -evenv -- echo 'done'

設定

$ sudo mkdir -p /etc/magnum/templates
$ cd /etc/magnum/templates
$ sudo git clone https://github.com/larsks/heat-kubernetes.git
$ cd /etc/magnum
$ vim magnum.conf

magnum.conf の中身は以下。

[DEFAULT]
debug = True
verbose = True

rabbit_password = stackqueue
rabbit_hosts = 192.168.11.139
rpc_backend = rabbit

[database]
connection = mysql://root:stackdb@localhost/magnum

[keystone_authtoken]
admin_password = openstack
admin_user = nova
admin_tenant_name = service
identity_uri = http://192.168.11.139:35357

auth_uri=http://192.168.11.139:5000/v2.0
auth_protocol = http
auth_port = 35357
auth_host = 192.168.11.139

Keystone に Magnum サービスを登録

$ source /vagrant/devstack/openrc admin admin
$ keystone service-create --name=container \
                        --type=container \
                        --description="Magnum Container Service"
$ keystone endpoint-create --service=container \
                         --publicurl=http://127.0.0.1:9511/v1 \
                         --internalurl=http://127.0.0.1:9511/v1 \
                         --adminurl=http://127.0.0.1:9511/v1

デフォルトの key-pair を追加

$ ssh-keygen
$ source /vagrant/devstack/openrc demo demo
$ nova keypair-add --pub-key ~/.ssh/id_rsa.pub default

Image の登録

Magnum で利用する VM のイメージを Glance に登録。

$ cd /vagrant
$ curl -O https://fedorapeople.org/groups/heat/kolla/fedora-21-atomic.qcow2
$ source /vagrant/devstack/openrc admin admin
$ glance image-create \
    --disk-format qcow2 \
    --container-format bare \
    --is-public True \
    --name fedora-21-atomic \
    --file /vagrant/fedora-21-atomic.qcow2

Database

devstack が作成されたらとりあえずデータベースを作る。

$ mysql -h 127.0.0.1 -u root -pstackdb mysql <<EOF
CREATE DATABASE IF NOT EXISTS magnum DEFAULT CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON magnum.* TO
    'root'@'%' IDENTIFIED BY 'stackdb'
EOF

テーブル作成。

$ cd /vagrant/magnum
$ source .tox/venv/bin/activate
$ pip install mysql-python
$ magnum-db-manage upgrade

Magnum の起動

端末が3個あると良い。

magnum-api

$ cd /vagrant/magnum
$ source .tox/venv/bin/activate
$ magnum-api

magnum-conductor

$ cd /vagrant/magnum
$ source .tox/venv/bin/activate
$ magnum-conductor

python-magnumclient

$ cd /vagrant/python-magnumclient
$ source .tox/venv/bin/activate
$ magnum bay-list

Bay を作ってみる

Bay とは Pod を管理するリソースという意味らしい。 ぶっちゃけ k8s をホストするクラスターのこと。

magnum baymodel-create --name default --keypair_id default \
  --external_network_id 97dc1372-b002-47a0-82e2-63e8896f107c \
  --image_id fedora-21-atomic \
  --flavor_id m1.small

magnum bay-create --name kube --baymodel_id ae8fd2a5-6076-4b36-a545-61c15ee43677

以上。