はじめに
本記事ではCentOS7をインストールした状態から、Apexというインストーラを使って一台のサーバにOpenStackとOpenDaylightをvirsh/qemu環境にインストールするまでを主に説明します。その後に簡単な使い方を説明します。
OPNFV Apexとは (超簡単説明)
OPNFVとはNFVをオープンソースのプラットフォームで実現しようぜ! というプロジェクトで、ApexとはOPNFVの中でRed Hatが主導しているCentOS/TripleOを使ったOPNFVの実装(インストーラ)のプロジェクトです。
OPNFVのリリースでは名前にアルファベット順に川の名前が使われており、最新バージョンはColoradoとなっています。
Apexを使用すると以下のような環境を簡単に立ち上げることが可能です。
- Undercloud (TripleO用OpenStackインストール用VM) x 1
- OpenStack Controller+OpenDaylight x 1 (HAの場合は2台)
- Compute x 2
それぞれのVMは4つのネットワークと以下のように接続されます
- admin_network (インストール時に使用)
- public_network
- private_network (Controller, Computeのみ)
- storage_network (Controller, Computeのみ)
Apexのインストールの必要条件
Apexのインストールに必要なサーバの条件は以下となります(正直かなり厳しめです…)
- CPUコア 16以上が理想 (仮想VM用, それより低い場合はover subscriptionになります)
- メモリ 64G以上 (実際はもうちょっと減らせます)
- HDD 100G以上
インストールについて
CentOS7のインストール・設定
CentOS7を普通にインストールした後に以下のコマンドで各種必要なパッケージをインストールします。
もしOpenStack,OpenDaylightのweb UIを他のマシンから使いたい場合はtinyproxyもインストールします。
補足
もし既存にインストールして使っているCentOS7がある場合それを使用することも可能ですがlibvirtの設定などが競合する可能性があります。
ちなみに筆者はインストール時はcore packageのみの構成(デフォルトで何も特殊なパッケージを入れない状態)でインストールしました。
yum update -y
yum groupinstall -y "Virtualization Host" "Development Tools"
yum install -y python-setuptools docker-io
# Epel, RDOの登録
yum install -y https://www.rdoproject.org/repos/rdo-release.rpm epel-release
yum install -y python34 libvirt-python tinyproxy
systemctl enable libvirtd.service
systemctl enable docker.service
systemctl enable firewalld.service
# tinyproxyの設定、OpenStack/ODLのGUIをリモートで見ないならば不要
cp /etc/tinyproxy/tinyproxy.conf{,.orig}
cat << EOF >> /etc/tinyproxy/tinyproxy.conf
Allow <アクセスを許したい IPアドレス>
Listen <このサーバーのIP>
# noVNC
ConnectPort 6080
# ODL web UI
ConnectPort 8181
EOF
systemctl start firewalld.service
firewall-cmd --add-port=8888/tcp --zone=public --permanent
systemctl enable tinyproxy.service
ここで各種サービスの起動のために再起動します。systemctl restart
でサービス毎に再起動をかけてももちろん構いません。
reboot
# または
systemctl restart libvirtd.service
systemctl restart docker.service
systemctl restart tinyproxy.service
Apexの取得・インストール
Apexに必要なパッケージを取得・インストールします。"apexのパッケージのダウンロード"の箇所についてはApexのダウンロードページ(最新stable)やスナップショットの保存場所を参照して最新のRPMを取得するといいと思います。
wget \
http://artifacts.opnfv.org/apex/dependencies/python3-ipmi-0.3.0-1.noarch.rpm \
http://artifacts.opnfv.org/apex/dependencies/python3-jinja2-2.8-5.el7.centos.noarch.rpm \
http://artifacts.opnfv.org/apex/dependencies/python34-markupsafe-0.23-9.el7.centos.x86_64.rpm
yum install -y python3-ipmi-0.3.0-1.noarch.rpm \
python34-markupsafe-0.23-9.el7.centos.x86_64.rpm \
python3-jinja2-2.8-5.el7.centos.noarch.rpm
# apexのパッケージのダウンロード (*1)
# https://www.opnfv.org/opnfv-colorado-tripleo-users-20 から最新の安定版を、
# http://artifacts.opnfv.org/apex.html から開発中のスナップショットを取得可能です
wget \
http://artifacts.opnfv.org/apex/colorado/opnfv-apex-3.0-20161112.noarch.rpm \
http://artifacts.opnfv.org/apex/colorado/opnfv-apex-common-3.0-20161112.noarch.rpm \
http://artifacts.opnfv.org/apex/colorado/opnfv-apex-undercloud-3.0-20161112.noarch.rpm
yum install -y opnfv-apex*.rpm
Apexの設定
Apexではインストールの設定ファイルとしてdeploy_settings.yaml
(インストール構成用)とnetwork_settings.yaml
(ネットワーク構成用)の2つのファイルを使用します。まずはそれらのサンプルファイルをベースに設定を変更していきます。
cp /usr/share/doc/opnfv/deploy_settings.yaml.example ~/deploy_settings.yaml
cp /usr/share/doc/opnfv/network_settings.yaml.example ~/network_settings.yaml
インストール構成の設定
Apexではインストール時にどのようなソフトウェアでインストールするか(tacker, congressの有無)、HA構成にするか等の構成を変えることができます。それらの設定は先程コピーしたYAMLファイル~/deploy_settings.yaml
を修正することで可能です。その他に設定済みシナリオのdeploy_settings.yamlファイルが/etc/opnfv-apex/
配下にありますので、これらを使うことも可能です。
ネットワーク構成の設定
ネットワーク構成ではDNSサーバーのアドレスやインストールするOpenStackのネットワーク構成を変更することが可能です。設定例は/usr/share/doc/opnfv/
と/etc/opnfv-apex
に存在しますので参考に先程コピーした~/network_settings.yaml
を修正して下さい。
Apexのインストールの実行
以下のopnfv-deploy
コマンドを実行することでOpenStack/OpenDaylightのインストールが開始されます。インストールに必要な時間は構成によってことなりますが、けっこう時間がかかります(HA構成なしの状態で1時間程度)。
opnfv-deploy -v -n ./network_settings.yaml -d ./deploy_settings.yaml
補足
たまにterminalが変なところで固まったように見えるときもありますが、処理は続いています。
2016-11-15 13:54:50 [overcloud-BlockStorageNodesPostDeployment-qtvp3rubcq4p-VolumeDeployment_Step1-glhht56fjrmg]: CREATE_IN_PROGRESS Stack CREATE started
2016-11-15 13:54:50 [overcloud-BlockStorageNodesPostDeployment-qtvp3rubcq4p-VolumeDeployment_Step1-glhht56fjrmg]: CREATE_COMPLETE Stack CREATE completed successfully
2016-11-15 13:54:50 [overcloud-CephStorageNodesPostDeployment-sv2ldhyihu4o-CephStorageDeployment_Step1-m67z3q3xitux]: CREATE_COMPLETE Stack CREATE completed successfully
2016-11-15 13:54:51 [VolumeDeployment_Step1]: CREATE_COMPLETE state changed
2016-11-15 13:54:51 [ExtraConfig]: CREATE_IN_PROGRESS state changed
2016-11-15 13:54:51 [overcloud-BlockStorageNodesPostDeployment-qtvp3rubcq4p-ExtraConfig-23w6y5uyyjvx]: CREATE_IN_PROGRESS Stack CREATE started
2016-11-15 13:54:51 [overcloud-BlockStorageNodesPostDeployment-qtvp3rubcq4p-ExtraConfig-23w6y5uyyjvx]: CREATE_COMPLETE Stack CREATE completed successfully
2016-11-15 13:54:51 [CephStorage
Apexのインストール完了
以下のようなメッセージが出るとインストールが完了です。
INFO: Undercloud VM has been setup to NAT Overcloud public network
Undercloud IP: 192.168.122.140, please connect by doing 'opnfv-util undercloud'
Overcloud dashboard available at http://192.168.37.10/dashboard
INFO: Post Install Configuration Complete
[root@opnfv-test ~]#
Apexの操作
これ以降はインストールしたApexを使って簡単にVMを起動しながら、OpenStack, ODLそれぞれの動作の仕方について説明していきます。
各種コンソールへのアクセス方法
Apexでインストールしたそれぞれのコンポーネント(OpenStack, ODL)については以下のコマンドでアクセス可能です。
アクセス対象 | 何が可能か | アクセス方法 |
---|---|---|
undercloud | OpenStackのコマンドの実行 | opnfv-util undercloud |
controller0/1 | - | opnfv-util overcloud controller0 |
compute0/1 | - | opnfv-util overcloud compute0 |
OpenDaylight console | OpenDaylightの操作 (password='karaf') | opnfv-util opendaylight |
OpenStackのコマンド操作
Undercloudにある~/overcloudrc
というファイルを読むことでOpenStackをコマンドから操作することが可能です。
[root@opnfv-test ~]# opnfv-util undercloud
[stack@undercloud ~]$ . overcloudrc
[stack@undercloud ~]$ nova list
+----+------+--------+------------+-------------+----------+
| ID | Name | Status | Task State | Power State | Networks |
+----+------+--------+------------+-------------+----------+
+----+------+--------+------------+-------------+----------+
各種WebUIへのアクセス方法
先程のコマンド完了時に出ているIPアドレスでOpenStack, OpenDaylightのWebUIにアクセス可能です。
インストールしたサーバーの外側からアクセスする場合は上でインストールしたproxyを経由するとアクセスが可能です。
INFO: Undercloud VM has been setup to NAT Overcloud public network
Undercloud IP: 192.168.122.140, please connect by doing 'opnfv-util undercloud'
Overcloud dashboard available at http://192.168.37.10/dashboard
INFO: Post Install Configuration Complete
[root@opnfv-test ~]#
- OpenStack : http://<上のIP>/dashboard
- user/passはundercloudの
~/overcloudrc
を参照
- user/passはundercloudの
- OpenDaylight : http://<overcloudrcの中のSDN_CONTROLLER_IPのIP>:8181/index.html
- user/pass = admin=admin
- 同様にREST APIにもアクセス可能です
- 例:http://<上のIP>:8181/controller/nb/v2/neutron/networks
IPを忘れてしまった場合
以下のコマンドで上のIPを再度確認することが可能です。
[root@opnfv-test ~]# opnfv-util undercloud
(snip)
[stack@undercloud ~]$ . stackrc
[stack@undercloud ~]$ heat output-show overcloud PublicVip #PublicVipは大文字・小文字注意
"192.168.37.10"
overcloudrcを消してしまった場合
以下のコマンドでOpenStackのadminのパスワードを確認することが可能です
[root@opnfv-test ~]# opnfv-util overcloud controller0
(snip)
[heat-admin@overcloud-controller-0 ~]$ sudo hiera keystone::roles::admin::password
XXXXXX ← パスワード
OpenDaylightの情報採取
OpenDaylightのWebUIでOpenStackのController node, Compute nodeのOVSが以下のように参照できます。ですが、OvSのNode Idが16進数に対してOpenDaylightは10進数表記なので、一度変換して対応するノードを探す必要があります。
簡単に取得できるスクリプトとしてovs-helperを用意致しました。このスクリプトを使うことで対応するノードを簡単に取得することが可能です。ovs-helperを以下のGistから取得して下さい。
[root@opnfv-test ~]# wget 'https://goo.gl/N1qeTa' -O ovs-helper
[root@opnfv-test ~]# chmod +x ovs-helper
[root@opnfv-test ~]# ./ovs-helper getdpid
overcloud-novacompute-0:75047155970218 (0x44414712b0aa)
overcloud-controller-0:57293109187697 (0x341b976bd471)
overcloud-novacompute-1:260295454480225 (0xecbcc219d761)
OvSの情報採取
ovs-helperを使うことでOvSのフォワーディングのFlowを取得することが可能です。
[root@opnfv-test ~]# ./ovs-helper getflow compute0 # controller0, compute1も可能
OFPST_FLOW reply (OF1.3) (xid=0x2):
cookie=0x0, duration=419445.069s, table=0, n_packets=0, n_bytes=0, dl_type=0x88cc actions=CONTROLLER:65535
cookie=0x0, duration=419445.069s, table=0, n_packets=0, n_bytes=0, priority=0 actions=goto_table:20
(省略)
cookie=0x0, duration=419444.982s, table=110, n_packets=0, n_bytes=0, priority=0 actions=drop
VMの起動
最後にVM(Cirros)を2台起動してみます。以下のコマンドを実行後OpenStackのWebUIからConsoleを使うことで2台間のPingの疎通を確認することが可能です。
[root@opnfv-test ~]# opnfv-util undercloud
Last login: Tue Nov 29 12:31:30 2016 from 192.168.122.1
[stack@undercloud ~]$ . overcloudrc
[stack@undercloud ~]$ nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 # Ping
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range | Source Group |
+-------------+-----------+---------+-----------+--------------+
| icmp | -1 | -1 | 0.0.0.0/0 | |
+-------------+-----------+---------+-----------+--------------+
[stack@undercloud ~]$ nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 # SSH
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range | Source Group |
+-------------+-----------+---------+-----------+--------------+
| tcp | 22 | 22 | 0.0.0.0/0 | |
+-------------+-----------+---------+-----------+--------------+
[stack@undercloud ~]$ curl -O http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 12.6M 100 12.6M 0 0 1161k 0 0:00:11 0:00:11 --:--:-- 1589k
[stack@undercloud ~]$ openstack image create 'cirros' --public --container-format bare \
> --disk-format=qcow2 < cirros-0.3.4-x86_64-disk.img
+------------------+----------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------------+----------------------------------------------------------------------------------------------------------+
| checksum | ee1eca47dc88f4879d8a229cc70a07c6 |
| container_format | bare |
(snip)
| visibility | public |
+------------------+----------------------------------------------------------------------------------------------------------+
[stack@undercloud ~]$ neutron net-create internal
Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
(snip)
| updated_at | 2016-11-29T13:05:52 |
+---------------------------+--------------------------------------+
[stack@undercloud ~]$ neutron subnet-create internal 192.168.0.0/24 --name subnet-int1
Created a new subnet:
+-------------------+--------------------------------------------------+
| Field | Value |
+-------------------+--------------------------------------------------+
| allocation_pools | {"start": "192.168.0.2", "end": "192.168.0.254"} |
(snip)
+-------------------+--------------------------------------------------+
[stack@undercloud ~]$ neutron router-create router
Created a new router:
+-------------------------+--------------------------------------+
| Field | Value |
+-------------------------+--------------------------------------+
(snip)
+-------------------------+--------------------------------------+
[stack@undercloud ~]$ neutron router-gateway-set router external
Set gateway for router router
[stack@undercloud ~]$ neutron router-interface-add router subnet-int1
Added interface 7d2511eb-72ec-488e-b3b5-5bedf8be9be5 to router router.
[stack@undercloud ~]$ int_net=$(openstack network list -f json| jq -r ' .[] | select(.Name == "internal") | .ID')
[stack@undercloud ~]$ nova boot --flavor m1.tiny --image 'cirros' --nic net-id=$int_net testvm1
+--------------------------------------+-----------------------------------------------+
| Property | Value |
+--------------------------------------+-----------------------------------------------+
(snip)
+--------------------------------------+-----------------------------------------------+
[stack@undercloud ~]$ nova boot --flavor m1.tiny --image 'cirros' --nic net-id=$int_net testvm2
+--------------------------------------+-----------------------------------------------+
| Property | Value |
+--------------------------------------+-----------------------------------------------+
(snip)
+--------------------------------------+-----------------------------------------------+
環境のクリーンアップ
環境を削除したい場合にはopnfv-clean
コマンドを使うことでクリーンアップすることが可能です。
[root@opnfv-test ~]# opnfv-clean
(snip)
Cleanup Completed
まとめ
本記事ではOPNFV Apexを使用してCentOS7上にOpenStack/OpenDaylightをインストールし、簡単な操作について説明しました。