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

1.1.1. OSのインストール

コントローラー、ネットワーク、コンピュートの全ての機能を1台に纏めてインストールします。
基板となるOSは、Ubuntu13.04を利用します。
IPアドレスなどは自分の環境にあわせてください。
コントローラーノードのローカルHDDをブロックストレージ用に利用する場合はOSインストール時に論理ボリュームでcinder-volumesを作成しておきましょう。
後からイメージをCinderに利用することも可能ですが少し面倒なので先に用意しておいたほうが良いです。
インストールはSSH Serverを選択しておけば問題ありません。他に必要なものは後からインストールを行います。
また、インストール後はホスト名、IPアドレスの固定化を行って置きましょう。

1.1.2. OS設定

OpenStackをインストールする前にOSを最新にしておきます。
$ sudo apt-get update -y
$ sudo apt-get upgrade -y
$ sudo apt-get dist-upgrade -y

1.1.2.1. IPアドレスの固定化

ブリッジの設定は Openstack がよろしくやってくれますのでIPアドレスの固定化だけおこなっておきます。
Quantumを利用する場合、コントローラーノードは最低限2枚のNICが必要になります。
DevStackだと1枚でも利用できていますが方法がわかっていませんので素直に2枚用意します。
外部接続用ポートとして利用するほうはIPの割り当てはしません。
マネージメント用に利用するネットワークとインターネット(外部)接続用のネットワークは同じでも問題ありません。
上記はネットワークノードも兼ねるのであれば仮想マシンのトラフィックは全て同じ外部用ポートを利用するためネットワーク帯域が問題なければの話です。
$ sudo vi /etc/network/interfaces
auto eth0
#iface eth0 inet dhcp

iface eth0 inet static
       address 192.168.10.50
       netmask 255.255.255.0
       network 192.168.10.0
       broadcast 192.168.10.255
       gateway 192.168.10.1
       dns-nameservers 192.168.10.1

auto  eth1
iface eth1 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 down

1.1.2.2. HOSTSの設定

Ipv6部分は必要ないので削除もしくはコメントアウトしておきます。
特に問題なければ全ノードのホスト名を先に記述しておきます。
$ sudo vi /etc/hosts
127.0.0.1       localhost
#127.0.1.1      stack01

# The following lines are desirable for IPv6 capable hosts
#::1     ip6-localhost ip6-loopback
#fe00::0 ip6-localnet
#ff00::0 ip6-mcastprefix
#ff02::1 ip6-allnodes
#ff02::2 ip6-allrouters

192.168.10.50   stack01
192.168.10.51   stack02

1.1.2.3. カーネルの設定

IPフォワードの有効化、Ipv6の無効化を行います。
$ sudo sh -c "echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf"
$ sudo sh -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
$ sudo sh -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
$ sudo sysctl -p

1.1.2.4. パッケージのインストール

NTPのインストール、ブリッジとVLANのパッケージをインストールします。

$ sudo apt-get install ntp -y
$ sudo apt-get install vlan bridge-utils

1.1.2.5. ユーザの作成

rootで全て行うのであれば必要ありませんがネットワークの作成など以外は一般ユーザで全部行うことができます。
ubuntuのため最初にユーザを設定したはずですのでそちらを利用します。
また、ここでは stack というユーザを設定した前提で記述しています。

1.1.3. MySQL

MySQLをインストールする前にパスワードの設定を先に行っておきます。
パスワードは nova としてますがMySQLのrootのパスワードなのできちんとしたものを設定しましょう。
$ MYSQL_PASS=nova
$ cat <<MYSQL_DEBCONF | sudo debconf-set-selections
mysql-server-5.5 mysql-server/root_password password $MYSQL_PASS
mysql-server-5.5 mysql-server/root_password_again password $MYSQL_PASS
mysql-server-5.5 mysql-server/start_on_boot boolean true
MYSQL_DEBCONF

1.1.3.1. MySQLのパッケージをインストール

$ sudo apt-get install -y mysql-server python-mysqldb

1.1.3.2. MySQLの設定

外部から接続できるように設定します。

$ sudo sed -i 's#127.0.0.1#0.0.0.0#g' /etc/mysql/my.cnf
$ sudo restart mysql

1.1.3.3. OpenStackが利用するデータベースの作成

Keystone Glance Quantum Cinder Nova が利用するデータベースです。
こちらのパスワードはそれぞれ password としていますので修正が必要であれば後でOpenStackをインストールする場合も適宜変更してください。
$ NOVA_CONTOLLER_HOSTNAME=stack01

$ MYSQL_PASS=nova
$ MYSQL_PASS_KEYSTONE=password
$ sudo mysql -uroot -p$MYSQL_PASS -e "drop database if exists keystone;"
$ sudo mysql -uroot -p$MYSQL_PASS -e "create database keystone character set utf8;"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on keystone.* to 'keystone'@'%' identified by '$MYSQL_PASS_KEYSTONE';"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on keystone.* to 'keystone'@'localhost' identified by '$MYSQL_PASS_KEYSTONE';"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on keystone.* to 'keystone'@'$NOVA_CONTOLLER_HOSTNAME' identified by '$MYSQL_PASS_KEYSTONE';"

$ MYSQL_PASS_GLANCE=password
$ sudo mysql -uroot -p$MYSQL_PASS -e "drop database if exists glance;"
$ sudo mysql -uroot -p$MYSQL_PASS -e "create database glance character set utf8;"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on glance.* to 'glance'@'%' identified by '$MYSQL_PASS_GLANCE';"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on glance.* to 'glance'@'localhost' identified by '$MYSQL_PASS_GLANCE';"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on glance.* to 'glance'@'$NOVA_CONTOLLER_HOSTNAME' identified by '$MYSQL_PASS_GLANCE';"

$ MYSQL_PASS_QUANTUM=password
$ sudo mysql -uroot -p$MYSQL_PASS -e "drop database if exists ovs_quantum;"
$ sudo mysql -uroot -p$MYSQL_PASS -e "create database ovs_quantum character set utf8;"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on ovs_quantum.* to 'quantum'@'%' identified by '$MYSQL_PASS_QUANTUM';"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on ovs_quantum.* to 'quantum'@'localhost' identified by '$MYSQL_PASS_QUANTUM';"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on ovs_quantum.* to 'quantum'@'$NOVA_CONTOLLER_HOSTNAME' identified by '$MYSQL_PASS_QUANTUM';"

$ MYSQL_PASS_CINDER=password
$ sudo mysql -uroot -p$MYSQL_PASS -e "drop database if exists cinder;"
$ sudo mysql -uroot -p$MYSQL_PASS -e "create database cinder character set utf8;"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on cinder.* to 'cinder'@'%' identified by '$MYSQL_PASS_CINDER';"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on cinder.* to 'cinder'@'localhost' identified by '$MYSQL_PASS_CINDER';"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on cinder.* to 'cinder'@'$NOVA_CONTOLLER_HOSTNAME' identified by '$MYSQL_PASS_CINDER';"

$ MYSQL_PASS_NOVA=password
$ sudo mysql -uroot -p$MYSQL_PASS -e "drop database if exists nova;"
$ sudo mysql -uroot -p$MYSQL_PASS -e "create database nova;"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on nova.* to 'nova'@'%' identified by '$MYSQL_PASS_NOVA';"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on nova.* to 'nova'@'localhost' identified by '$MYSQL_PASS_NOVA';"
$ sudo mysql -uroot -p$MYSQL_PASS -e "grant all privileges on nova.* to 'nova'@'$NOVA_CONTOLLER_HOSTNAME' identified by '$MYSQL_PASS_NOVA';"

1.1.4. RabbitMQ

OpenStackはコンポーネント間の通信にMQを利用します。
UbuntuではRabbitMQ、RedHat系ではApache Qpidを利用することが多いみたいです。

1.1.4.1. RabbitMQのパッケージをインストール

$ sudo apt-get install -y rabbitmq-server

1.1.4.2. RabbitMQの設定

ユーザを作成します。共通ユーザとして nova を利用します。
パスワードを変更する必要があれば他の設定項目でも一緒に変更してください。
$ RABBIT_PASS=password
$ sudo rabbitmqctl add_vhost /nova
$ sudo rabbitmqctl add_user nova $RABBIT_PASS
$ sudo rabbitmqctl set_permissions -p /nova nova ".*" ".*" ".*"
$ sudo rabbitmqctl delete_user guest

もし確認する場合は以下のように行えます。

$ sudo rabbitmqctl list_users
$ sudo rabbitmqctl list_vhosts
$ sudo rabbitmqctl list_permissions
$ sudo rabbitmqctl list_user_permissions nova

1.1.5. Keystone

ここからはOpenStackのコンポーネントをインストールしていきます。
KeystoneはOpenStack全てのコンポーネントが利用する認証機構です。

1.1.5.1. Keystoneのインストール

$ sudo apt-get install -y keystone

1.1.5.2. Keystoneの設定

色々設定は行う項目はありますがここでは最低限Keystoneが利用するデータベースに接続する設定だけ行います。
$ MYSQL_PASS_KEYSTONE=password
$ NOVA_CONTOLLER_HOSTNAME=stack01
$ sudo cp -a /etc/keystone /etc/keystone_bak
$ sudo sed -i "s#sqlite:////var/lib/keystone/keystone.db#mysql://keystone:$MYSQL_PASS_KEYSTONE@$NOVA_CONTOLLER_HOSTNAME/keystone?charset=utf8#" /etc/keystone/keystone.conf

1.1.5.3. データベースの同期

先に設定を変更したので再起動してからデータベースを同期します。

$ sudo stop keystone ; sudo start keystone
$ sudo keystone-manage db_sync

1.1.5.4. Keystoneの設定

管理用、各コンポーネント用テナントとそれを利用するユーザ、ロールを作成します。
スクリプトを利用させてもらいます。
各コンポーネントがKeystoneに接続するためのエンドポイント(URL)は、EXT_HOST_IP でAPIで外部から接続してくる時に利用するIPアドレスです。
コントローラーノードのIPアドレスは適宜変更してください
マネージメント用セグメントと同じ想定で同じIPにしています。
ADMIN_PASSWORDは管理用ユーザ admin のパスワードです。
SERVICE_PASSWORDは各コンポーネント用のパスワードです。(ユーザはここでは各コンポーネント名と同じです。)
$ NOVA_CONTOLLER_IP=192.168.10.50
$ MYSQL_PASS_KEYSTONE=password
$ export ADMIN_PASSWORD=secrete
$ export SERVICE_PASSWORD=secrete
$ sudo \rm -rf /usr/local/src/*keystone_basic.sh*
$ sudo \rm -rf /usr/local/src/*keystone_endpoints_basic.sh*
$ sudo -E wget -P /usr/local/src https://raw.github.com/mseknibilel/OpenStack-Grizzly-Install-Guide/OVS_MultiNode/KeystoneScripts/keystone_basic.sh
$ sudo -E wget -P /usr/local/src https://raw.github.com/mseknibilel/OpenStack-Grizzly-Install-Guide/OVS_MultiNode/KeystoneScripts/keystone_endpoints_basic.sh
$ sudo sed -i "s@HOST_IP=10.10.10.51@HOST_IP=$NOVA_CONTOLLER_IP@" /usr/local/src/keystone_basic.sh
$ sudo sed -i "s@HOST_IP=10.10.10.51@HOST_IP=$NOVA_CONTOLLER_IP@" /usr/local/src/keystone_endpoints_basic.sh
$ sudo sed -i "s@EXT_HOST_IP=192.168.100.51@EXT_HOST_IP=$NOVA_CONTOLLER_IP@" /usr/local/src/keystone_endpoints_basic.sh
$ sudo sed -i "s@MYSQL_USER=keystoneUser@MYSQL_USER=keystone@" /usr/local/src/keystone_endpoints_basic.sh
$ sudo sed -i "s@MYSQL_PASSWORD=keystonePass@MYSQL_PASSWORD=$MYSQL_PASS_KEYSTONE@" /usr/local/src/keystone_endpoints_basic.sh
$ sudo chmod +x /usr/local/src/keystone_basic.sh
$ sudo chmod +x /usr/local/src/keystone_endpoints_basic.sh
$ sudo -E /usr/local/src/keystone_basic.sh
$ sudo -E /usr/local/src/keystone_endpoints_basic.sh

1.1.5.5. 環境設定ファイルの作成

とりあえず一般ユーザのホームに作成します。
ホスト名、ユーザ名は適宜変更してください。
$ STACK_USER=stack
$ NOVA_CONTOLLER_HOSTNAME=stack01
$ ADMIN_PASSWORD=secrete
$ cd /home/$STACK_USER
$ cat << KEYSTONERC | sudo tee keystonerc > /dev/null
$ export OS_TENANT_NAME=admin
$ export OS_USERNAME=admin
$ export OS_PASSWORD=$ADMIN_PASSWORD
$ export OS_AUTH_URL=http://$NOVA_CONTOLLER_HOSTNAME:5000/v2.0/
$ KEYSTONERC
$ sudo chown $STACK_USER:$STACK_USER /home/$STACK_USER/keystonerc

1.1.5.6. 設定確認

設定の確認を行う場合は以下のコマンドで実施しましょう。
環境変数を読み込ませて行います。
結果が出力されれば問題ありません。
$ STACK_USER=stack
$ . /home/$STACK_USER/keystonerc
$ keystone user-list
$ keystone role-list
$ keystone tenant-list
$ keystone endpoint-list

1.1.6. Glance

GlanceはOpenStackの中で仮想マシンの起動イメージやスナップショットを登録するためのコンポーネントです。
バックエンドには色々利用できますがそのままローカルストレージを利用する設定を行います。

1.1.6.1. Glanceのインストール

$ sudo apt-get install -y glance

1.1.6.2. Glanceの設定

まずはGlanceがKeystoneに接続するための設定を行います。
コントローラーノードのIPとサービス用のパスワードも変更していたら適宜変更してください。
$ NOVA_CONTOLLER_IP=192.168.10.50
$ SERVICE_PASSWORD=secrete
$ sudo cp -a /etc/glance /etc/glance_bak

$ cat << GLANCE_API_PASTE | sudo tee -a /etc/glance/glance-api-paste.ini > /dev/null
auth_host = $NOVA_CONTOLLER_IP
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = $SERVICE_PASSWORD
GLANCE_API_PASTE

$ cat << GLANCE_REGISTRY_PASTE | sudo tee -a /etc/glance/glance-registry-paste.ini > /dev/null
auth_host = $NOVA_CONTOLLER_IP
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = $SERVICE_PASSWORD
GLANCE_REGISTRY_PASTE

$ sudo sed -i "s/#flavor=/flavor = keystone/" /etc/glance/glance-api.conf
$ sudo sed -i "s/#flavor=/flavor = keystone/" /etc/glance/glance-registry.conf

データベースへ接続するための設定を行います。

$ NOVA_CONTOLLER_HOSTNAME=stack01
$ MYSQL_PASS_GLANCE=password
$ sudo sed -i "s#sqlite:////var/lib/glance/glance.sqlite#mysql://glance:$MYSQL_PASS_GLANCE@$NOVA_CONTOLLER_HOSTNAME/glance?charset=utf8#" /etc/glance/glance-api.conf
$ sudo sed -i "s#sqlite:////var/lib/glance/glance.sqlite#mysql://glance:$MYSQL_PASS_GLANCE@$NOVA_CONTOLLER_HOSTNAME/glance?charset=utf8#" /etc/glance/glance-registry.conf

RabbitMQに接続するための設定を行います。

$ NOVA_CONTOLLER_HOSTNAME=stack01
$ RABBIT_PASS=password
$ sudo sed -i "s/notifier_strategy = noop/notifier_strategy = rabbit/" /etc/glance/glance-api.conf
$ sudo sed -i "s/rabbit_host = localhost/rabbit_host=$NOVA_CONTOLLER_HOSTNAME/" /etc/glance/glance-api.conf
$ sudo sed -i "s/rabbit_userid = guest/rabbit_userid = nova/" /etc/glance/glance-api.conf
$ sudo sed -i "s/rabbit_password = guest/rabbit_password = $RABBIT_PASS/" /etc/glance/glance-api.conf
$ sudo sed -i "s@rabbit_virtual_host = /@rabbit_virtual_host = /nova@" /etc/glance/glance-api.conf
なぜかパッケージにファイルが足りないためワークアラウンドを行っておきます。
配置しないとエラーが鬱陶しいです。
$ sudo -E wget -P /etc/glance https://raw.github.com/openstack/glance/master/etc/schema-image.json

1.1.6.3. データベースの同期

再起動してからGlance用のデータベースの同期を行います。

$ sudo \rm -rf /var/log/glance/*
$ for i in api registry
do
  sudo start glance-$i ; sudo restart glance-$i
done

$ sudo glance-manage db_sync

1.1.6.4. イメージの登録

OpenStackが利用するイメージを登録して設定確認を行います。
まだ先は長いので必要な物だけ登録しましょう。
また後で記述してますがイメージで仮想マシンを起動した際に利用する際SSHでの鍵なし認証時のユーザはUbuntuは ubuntu Fedoraはは root Cirrosは cirros です。
コマンドを実施するには環境変数を読み込ませます。
$ STACK_USER=stack
$ . /home/$STACK_USER/keystonerc
#Ubuntu11.10
$ sudo mkdir /opt/virt/ubuntu11.10 ; cd /opt/virt/ubuntu11.10
$ sudo -E wget http://uec-images.ubuntu.com/releases/11.10/release/ubuntu-11.10-server-cloudimg-amd64-disk1.img
$ glance image-create     \
   --name="Ubuntu_11.10"  \
   --is-public=true       \
   --container-format=ovf \
   --disk-format=qcow2 < ubuntu-11.10-server-cloudimg-amd64-disk1.img

#Ubuntu12.04_LTS
$ sudo mkdir /opt/virt/ubuntu12.04 ; cd /opt/virt/ubuntu12.04
$ sudo -E wget http://cloud-images.ubuntu.com/releases/precise/release/ubuntu-12.04-server-cloudimg-amd64-disk1.img
$ glance image-create        \
   --name="Ubuntu_12.04_LTS" \
   --is-public=true          \
   --container-format=ovf    \
   --disk-format=qcow2 < ubuntu-12.04-server-cloudimg-amd64-disk1.img

#Ubuntu12.10
$ sudo mkdir /opt/virt/ubuntu12.10 ; cd /opt/virt/ubuntu12.10
$ sudo -E wget http://cloud-images.ubuntu.com/releases/quantal/release/ubuntu-12.10-server-cloudimg-amd64-disk1.img
$ glance image-create      \
    --name="Ubuntu_12.10"  \
    --is-public=true       \
    --container-format=ovf \
    --disk-format=qcow2 < ubuntu-12.10-server-cloudimg-amd64-disk1.img

#Ubuntu13.04_LTS
$ sudo mkdir -p /opt/virt/ubuntu13.04 ; cd /opt/virt/ubuntu13.04
$ sudo -E wget http://cloud-images.ubuntu.com/releases/13.04/release/ubuntu-13.04-server-cloudimg-amd64-disk1.img
$ glance image-create         \
    --name="Ubuntu_13.04_LTS" \
    --is-public=true          \
    --container-format=ovf    \
    --disk-format=qcow2 < ubuntu-13.04-server-cloudimg-amd64-disk1.img

#Feodra16
$ sudo mkdir -p /opt/virt/fedora16; cd /opt/virt/fedora16;
$ sudo -E wget http://berrange.fedorapeople.org/images/2012-02-29/f16-x86_64-openstack-sda.qcow2
$ glance image-create         \
    --name="f16-jeos"         \
    --is-public=true          \
    --container-format=ovf    \
    --disk-format=qcow2 < f16-x86_64-openstack-sda.qcow2

#Fedora17
$ glance image-create         \
    --name="f17-jeos"         \
    --is-public=true          \
    --container-format=ovf    \
    --disk-format=qcow2 < f17-x86_64-openstack-sda.qcow2

#Fedora19
 sudo mkdir -p /opt/virt/fedora19; cd /opt/virt/fedora19;
$ sudo -E wget http://download.fedoraproject.org/pub/fedora/linux/releases/19/Images/x86_64/Fedora-x86_64-19-20130627-sda.qcow2
$ glance image-create         \
    --name="f19-jeos"         \
    --is-public=true          \
    --container-format=ovf    \
    --disk-format=qcow2       \

$ sudo mkdir -p /opt/virt/cirros; cd /opt/virt/cirros;
$ sudo -E wget http://download.cirros-cloud.net/0.3.1/cirros-0.3.1-x86_64-uec.tar.gz
$ sudo tar zxvf cirros-0.3.1-x86_64-uec.tar.gz
$ glance image-create --name="cirros-kernel" --is-public=true --container-format=aki --disk-format=aki < cirros-0.3.1-x86_64-vmlinuz
$ glance image-create --name="cirros-ramdisk" --is-public=true --container-format=ari --disk-format=ari < cirros-0.3.1-x86_64-initrd
$ RAMDISK_ID=$(glance image-list | grep cirros-ramdisk | awk -F"|" '{print $2}' | sed -e 's/^[ ]*//g')
$ KERNEL_ID=$(glance image-list | grep cirros-kernel | awk -F"|" '{print $2}' | sed -e 's/^[ ]*//g')
$ glance image-create              \
   --name="cirros"                 \
   --is-public=true                \
   --container-format=ami          \
   --disk-format=ami               \
   --property kernel_id=$KERNEL_ID \
   --property ramdisk_id=$RAMDISK_ID < cirros-0.3.1-x86_64-blank.img
登録出来た時点で確認は問題ないですが確認しておきます。
$ glance image-list
RHELのイメージは公式からダウンロード可能です。
コンソールログが出ないのが気になりますけどまあそのうち治るんでしょう。
CentOSやその他のOSの場合は自分で作成する必要があります。
何度も作成するものでもないので作成しておけばよいでしょう。

1.1.7. OpenVswitch

Quantum(Neutron)をインストールする前の準備としてOSSの仮想ソフトウェアスイッチであるOpenVswitchをインストールします。

1.1.7.1. OpenVswitchのインストール

$ sudo apt-get install openvswitch-switch openvswitch-datapath-dkms -y

1.1.7.2. ブリッジの作成

Quantumが利用するブリッジを作成します。
br-intは仮想マシン間をGREやVLANが利用します。
br-exはネットワークノード(コントローラーノード)からインターネットや外部接続用のブリッジです。
また外部接続用ポートはここで実NICと関連付けします。
eth1としていますが実際の環境にあったものを指定してください。
$ EXT_NIC=eth1
$ sudo ovs-vsctl --no-wait -- --may-exist add-br br-int
$ sudo ovs-vsctl --no-wait -- --may-exist add-br br-ex
$ sudo ovs-vsctl add-port br-ex $EXT_NIC

設定後の確認をしておきます。

$ sudo ovs-vsctl show

1.1.8. Quantum

QuantumはOpenStackのネットワークコンポーネントです。
テナントと外部を接続したりテナント間を接続したりする仮想ネットワークを作成します。
コンポーネントの名称は次のバージョン(Havana)からはNeutronになります。
L2プラグインはOpenVswitchを利用します。(apt-cache search quantum-pluginなどとすればいっぱいあります。)

1.1.8.1. Quantumのインストール

$ sudo apt-get install quantum-server quantum-plugin-openvswitch-agent quantum-dhcp-agent quantum-l3-agent quantum-metadata-agent -y

1.1.8.2. Quantumの設定

$ sudo cp -a  /etc/quantum /etc/quantum_bak
まず、L2用のプラグインは色々利用可能ですがここではOpenVswitchを利用しますのでOpenVswitch用の設定を行います。
仮想マシン間の通信はGREを利用します。
local_ipにはコンピュートノードがネットワークノードと通信する際に利用するNICのIPを指定してください。
$ NOVA_COMPUTE_IP=192.168.10.50
$ NOVA_CONTOLLER_HOSTNAME=stack01
$ cat << QUANTUM_OVS | sudo tee /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini > /dev/null
[DATABASE]
sql_connection = mysql://quantum:$MYSQL_PASS_QUANTUM@$NOVA_CONTOLLER_HOSTNAME/ovs_quantum?charset=utf8
[OVS]
tenant_network_type = gre
tunnel_id_ranges = 1:1000
integration_bridge = br-int
tunnel_bridge = br-tun
local_ip = $NOVA_COMPUTE_IP
enable_tunneling = True
[SECURITYGROUP]
firewall_driver = quantum.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
QUANTUM_OVS
QuantumがのKeystoneへ接続するための設定を行います。
$ NOVA_CONTOLLER_IP=192.168.10.50
$ SERVICE_PASSWORD=secrete
$ cat << QUANTUM_PASTE_INI | sudo tee /etc/quantum/api-paste.ini > /dev/null
[composite:quantum]
use = egg:Paste#urlmap
/: quantumversions
/v2.0: quantumapi_v2_0

[composite:quantumapi_v2_0]
use = call:quantum.auth:pipeline_factory
noauth = extensions quantumapiapp_v2_0
keystone = authtoken keystonecontext extensions quantumapiapp_v2_0

[filter:keystonecontext]
paste.filter_factory = quantum.auth:QuantumKeystoneContext.factory

[filter:authtoken]
paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
auth_host = $NOVA_CONTOLLER_IP
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = quantum
admin_password = $SERVICE_PASSWORD

[filter:extensions]
paste.filter_factory = quantum.api.extensions:plugin_aware_extension_middleware_factory

[app:quantumversions]
paste.app_factory = quantum.api.versions:Versions.factory

[app:quantumapiapp_v2_0]
paste.app_factory = quantum.api.v2.router:APIRouter.factory
QUANTUM_PASTE_INI
こちらもQuantumがのKeystoneへ接続するための設定を行います。
プラグイン、RabbitMQへの接続設定も行います。
$ NOVA_CONTOLLER_IP=192.168.10.50
$ NOVA_CONTOLLER_HOSTNAME=stack01
$ SERVICE_PASSWORD=secrete
$ RABBIT_PASS=password
$ cat << QUANTUM_SERVER | sudo tee /etc/quantum/quantum.conf > /dev/null
[DEFAULT]
lock_path = \$state_path/lock
bind_host = 0.0.0.0
bind_port = 9696
core_plugin = quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2
api_paste_config = /etc/quantum/api-paste.ini
control_exchange = quantum
rpc_backend = quantum.openstack.common.rpc.impl_kombu
rabbit_host=$NOVA_CONTOLLER_IP
rabbit_userid=nova
rabbit_password=$RABBIT_PASS
rabbit_virtual_host=/nova
notification_driver = quantum.openstack.common.notifier.rpc_notifier
default_notification_level = INFO
notification_topics = notifications
[QUOTAS]
[DEFAULT_SERVICETYPE]
[AGENT]
root_helper = sudo quantum-rootwrap /etc/quantum/rootwrap.conf
[keystone_authtoken]
auth_host = $NOVA_CONTOLLER_HOSTNAME
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = quantum
admin_password = $SERVICE_PASSWORD
signing_dir = /var/lib/quantum/keystone-signing
QUANTUM_SERVER
MetaAgentの設定を行います。
Keystoneへの接続設定とパスワードの指定です。stackとしています。
$ NOVA_CONTOLLER_IP=192.168.10.50
$ SERVICE_PASSWORD=secrete
$ cat << QUANTUM_META | sudo tee /etc/quantum/metadata_agent.ini > /dev/null
[DEFAULT]
auth_url = http://$NOVA_CONTOLLER_IP:35357/v2.0
auth_region = RegionOne
admin_tenant_name = service
admin_user = quantum
admin_password = $SERVICE_PASSWORD
nova_metadata_ip = $NOVA_CONTOLLER_IP
nova_metadata_port = 8775
metadata_proxy_shared_secret = stack
QUANTUM_META

1.1.8.3. Quantumのプロセス起動と確認

Quantumはデータベースの同期はプロセス起動時に行われます。
$ sudo \rm -rf /var/log/quantum/*
$ for i in dhcp-agent l3-agent metadata-agent server plugin-openvswitch-agent
do
  sudo stop quantum-$i ; sudo start quantum-$i
done
コマンドが利用できることだけ確認しておきます。
ネットワークの作成は後で行います。
ポートもネットワークもルータも無いので出力されません。
またMetaAgentはリストへは出力されないみたいです。
$ STACK_USER=stack
$ . /home/$STACK_USER/keystonerc
$ quantum net-list
$ quantum port-list
$ quantum router-list
$ quantum agent-list

1.1.9. Nova

Novaは仮想マシンを利用するためのコンポーネントです。
但しGlanceで登録したイメージやQuantumで登録したネットワークなどの確認、削除などある程度のコマンドも実施できます。

1.1.9.1. Novaのインストール

コントローラーとネットワークノードをコンピュートノードと分けるのであればnova-computeをインストールしないでください。
$ sudo apt-get install -y nova-api nova-cert novnc nova-consoleauth nova-scheduler nova-novncproxy nova-doc nova-conductor
$ sudo apt-get install -y nova-compute
仮想マシンを利用するための設定を行います。
仮想マシンが起動しない場合はCPUの設定を入れたら起動するかもしれません。
$ sudo cp -a /etc/nova /etc/nova_bak
$ cat << NOVA_COMPUTE_SETUP | sudo tee /etc/nova/nova-compute.conf
[DEFAULT]
libvirt_type=kvm
libvirt_ovs_bridge=br-int
libvirt_vif_type=ethernet
libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver
libvirt_use_virtio_for_bridges=True
#libvirt_cpu_mode=none
NOVA_COMPUTE_SETUP
NovaがKeystoneへ接続するための設定を行います。
$ NOVA_CONTOLLER_HOSTNAME=stack01
$ SERVICE_PASSWORD=secrete
$ sudo sed -i "s#127.0.0.1#$NOVA_CONTOLLER_HOSTNAME#" /etc/nova/api-paste.ini
$ sudo sed -i "s#%SERVICE_TENANT_NAME%#service#" /etc/nova/api-paste.ini
$ sudo sed -i "s#%SERVICE_USER%#nova#" /etc/nova/api-paste.ini
$ sudo sed -i "s#%SERVICE_PASSWORD%#$SERVICE_PASSWORD#" /etc/nova/api-paste.ini

Novaを利用するための設定を行います。

$ NOVA_CONTOLLER_HOSTNAME=stack01
$ MYSQL_PASS_NOVA=password
$ NOVA_CONTOLLER_IP=192.168.10.50
$ NOVA_COMPUTE_IP=192.168.10.51
$ cat << NOVA_SETUP | sudo tee /etc/nova/nova.conf > /dev/null
[DEFAULT]
my_ip=$NOVA_COMPUTE_IP
logdir=/var/log/nova
state_path=/var/lib/nova
lock_path=/run/lock/nova
verbose=True
api_paste_config=/etc/nova/api-paste.ini
scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler
rabbit_host=$NOVA_CONTOLLER_HOSTNAME
rabbit_virtual_host=/nova
rabbit_userid=nova
rabbit_password=$RABBIT_PASS
nova_url=http://$NOVA_CONTOLLER_IP:8774/v1.1/
sql_connection=mysql://nova:$MYSQL_PASS_NOVA@$NOVA_CONTOLLER_HOSTNAME/nova
root_helper=sudo nova-rootwrap /etc/nova/rootwrap.conf

#auth
use_deprecated_auth=false
auth_strategy=keystone

#glance
glance_api_servers=$NOVA_CONTOLLER_HOSTNAME:9292
image_service=nova.image.glance.GlanceImageService

#vnc
novnc_enabled=true
novncproxy_base_url=http://$NOVA_CONTOLLER_IP:6080/vnc_auto.html
novncproxy_port=6080
vncserver_proxyclient_address=\$my_ip
vncserver_listen=0.0.0.0
vnc_keymap=ja

#quantum
network_api_class=nova.network.quantumv2.api.API
quantum_url=http://$NOVA_CONTOLLER_IP:9696
quantum_auth_strategy=keystone
quantum_admin_tenant_name=service
quantum_admin_username=quantum
quantum_admin_password=$SERVICE_PASSWORD
quantum_admin_auth_url=http://$NOVA_CONTOLLER_IP:35357/v2.0
libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver
linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver=nova.virt.firewall.NoopFirewallDriver
security_group_api=quantum

#metadata
service_quantum_metadata_proxy=True
quantum_metadata_proxy_shared_secret=stack

#compute
compute_driver=libvirt.LibvirtDriver

#cinder
volume_api_class=nova.volume.cinder.API
osapi_volume_listen_port=5900
NOVA_SETUP

1.1.9.2. データベースの同期とプロセスの再起動

$ sudo nova-manage db sync

$ sudo \rm -rf /var/log/nova/*
$ for proc in proc in api cert console consoleauth scheduler compute novncproxy conductor
do
  sudo service nova-$proc stop
  sudo service nova-$proc start
done

コマンドが利用できることを確認します。

$ nova-manage service list
$ nova image-list
$ nova list

1.1.10. Horzion

HorizonはWebUIによりOpenStackを操作するためのコンポーネントです。
全てを操作出来るわけではありませんがやはりGUIによる操作は楽です。

1.1.10.1. Horizonのインストール

$ sudo apt-get install -y openstack-dashboard memcached

Ubuntuのテーマが気に入らない場合はパッケージを削除すればオリジナルテーマに戻ります。

$ dpkg --purge openstack-dashboard-ubuntu-theme

1.1.10.2. Memcachedの設定

外部から接続できるようにします。

$ sudo sed -i "s/127.0.0.1/$NOVA_CONTOLLER_IP/" /etc/memcached.conf
$ sudo service memcached restart

1.1.11. Cinder

CinderはNovaで起動した仮想マシンに外部ディスクを付与するためのコンポーネントです。

1.1.11.1. Cinderのインストール

openiscsiなども利用できるみたいですがtgtを利用します。

$ sudo apt-get install cinder-api cinder-scheduler cinder-volume tgt -y

1.1.11.2. Cinderの設定

$ sudo cp -a /etc/cinder /etc/cinder_bak

CinderがKeystoneへ接続するための設定を行います。

$ SERVICE_PASSWORD=secrete
$ NOVA_CONTOLLER_HOSTNAME=stack01
$ sudo sed -i "s/%SERVICE_TENANT_NAME%/service/" /etc/cinder/api-paste.ini
$ sudo sed -i "s/%SERVICE_USER%/cinder/" /etc/cinder/api-paste.ini
$ sudo sed -i "s/%SERVICE_PASSWORD%/$SERVICE_PASSWORD/" /etc/cinder/api-paste.ini
$ sudo sed -i "s#127.0.0.1#$NOVA_CONTOLLER_HOSTNAME#" /etc/cinder/api-paste.ini
$ sudo sed -i "s#localhost#$NOVA_CONTOLLER_HOSTNAME#" /etc/cinder/api-paste.ini

DBへの接続設定、iscsi、RabbitMQへの接続設定などを行います。

$ MYSQL_PASS_CINDER=password
$ NOVA_CONTOLLER_HOSTNAME=stack01
$ RABBIT_PASS=password
$ cat << CINDER | sudo tee /etc/cinder/cinder.conf > /dev/null
[DEFAULT]
rootwrap_config=/etc/cinder/rootwrap.conf
sql_connection=mysql://cinder:$MYSQL_PASS_CINDER@$NOVA_CONTOLLER_HOSTNAME/cinder?charset=utf8
api_paste_config=/etc/cinder/api-paste.ini
iscsi_helper=tgtadm
volume_name_template=volume-%s
volume_group=cinder-volumes
state_path=/var/lib/cinder
volumes_dir=/var/lib/cinder/volumes
verbose=True
auth_strategy=keystone
iscsi_ip_address=$NOVA_CONTOLLER_HOSTNAME
rabbit_host=$NOVA_CONTOLLER_HOSTNAME
rabbit_virtual_host=/nova
rabbit_userid=nova
rabbit_password=$RABBIT_PASS
CINDER

1.1.11.3. データベースの同期とプロセスの再起動

$ sudo cinder-manage db sync

$ sudo \rm -rf /var/log/cinder/*
for i in volume api scheduler
do
  sudo start cinder-$i ; sudo restart cinder-$i
done

1.1.11.4. Cinderの設定確認

ブロックストレージを作成して確認します。
$ cinder create 1
$ cinder list
$ cinder delete 59cddf03-3aa6-446e-a328-5ad1f8932180

1.1.12. KVM

OpenStackがNovaで利用する仮想基板はKVMだけでなくVmware HyperV Xenserver LXCなど他にもありますが色々利用可能です。
KVMを利用するためKVMをインストールして設定します。

1.1.12.1. KVMの設定

QemuがTAPデバイスを利用できるための設定を行います。
$ sudo apt-get install -y kvm libvirt-bin pm-utils

$ cat << CGROUP | sudo tee -a /etc/libvirt/qemu.conf > /dev/null
cgroup_device_acl = [
"/dev/null", "/dev/full", "/dev/zero",
"/dev/random", "/dev/urandom",
"/dev/ptmx", "/dev/kvm", "/dev/kqemu",
"/dev/rtc", "/dev/hpet","/dev/net/tun"
]
CGROUP

基本的に必要ないはずなのでlibvirtが利用するNAT設定を削除しておきます。

$ sudo virsh net-destroy default
$ sudo virsh net-undefine default
ライブマイグレーションを行う必要があるのであればそのための設定が必要です。
行わない場合に設定しても問題にはなりません。
$ sudo cp -a /etc/libvirt/libvirtd.conf /etc/libvirt/libvirtd.conf_orig
$ sudo sed -i 's@#listen_tls = 0@listen_tls = 0@' /etc/libvirt/libvirtd.conf
$ sudo sed -i 's@#listen_tcp = 1@listen_tcp = 1@' /etc/libvirt/libvirtd.conf
$ sudo sed -i 's@#auth_tcp = "sasl"@auth_tcp = "none"@' /etc/libvirt/libvirtd.conf
$ sudo cp -a /etc/init/libvirt-bin.conf /etc/init/libvirt-bin.conf_orig
$ sudo sed -i 's@env libvirtd_opts="-d"@env libvirtd_opts="-d -l"@' /etc/init/libvirt-bin.conf
$ sudo cp -a /etc/default/libvirt-bin /etc/default/libvirt-bin_orig
$ sudo sed -i 's@libvirtd_opts="-d"@libvirtd_opts="-d -l"@' /etc/default/libvirt-bin
$ sudo service libvirt-bin restart
以上でコンピュート、コントローラー、ネットワークノードのインストールは終了です。
必要であれば引き続きコンピュートノードの追加を行ってください。
コンピュートノードの追加が必要ないのであればOpenStackの利用を引き続き行ってください。

目次

前のトピックへ

1. Openstackインストール手順(Grizzly)Ubuntu13.04(パッケージ)編

次のトピックへ

1.2.1. OSのインストール

このページ