LoginSignup
6
5

More than 5 years have passed since last update.

OPNFV Apex (Release Colorado)を使ってCentOS7上にlibvirt/OpenStack (RDO版newton)/OpenDaylightの環境を構築する

Last updated at Posted at 2016-12-13

はじめに

本記事では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のみ)

Untitled.png

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を参照
  • 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進数表記なので、一度変換して対応するノードを探す必要があります。

opnfv-sc1.png

簡単に取得できるスクリプトとして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をインストールし、簡単な操作について説明しました。

主な情報源

6
5
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5