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
以上。