はじめに
OpenStackでNFVを実現するTackerをインストールしてみました。Tackerは情報が少なめで、公式のインストール手順通りに行ったらハマったため、私の環境でインストールが成功したときの手順をメモとしてまとめます。
NFVとTackerについて
NFV(Network Functions Virtualization)は、ETSI(欧州電気通信標準化機構)が定める通信ネットワークを仮想化するためのアーキテクチャを定めた基本仕様で、NTTやKDDIといった通信事業者に大きく注目されています。NFVを活用すると、VM群やネットワーク群をセットにした一括デプロイや削除がワンストップでできるようになります。
そしてTackerは、OpenStack上でNFVを実現する(NovaやNeturonのような)コンポーネントです。NFV関連ではすでに何種類かのOSS製品が存在しますが、OpenStackのコンポーネントという知名度を考えると、TackerはNFV関連の本命になりそうです。
TackerとOpenStackの関係を簡単に表すと下図になります。TackerはNFVO(オーケストレーション)とVNFM(VNFの管理)の機能を担当します。
構築メモ
こちらで作成したPackstackによるAllInOne環境にTackerをインストールします。
- VirtualBoxで作成したCentOS7.2のVM(図の黄色部分)にOpenStackを構築
- OpenStackはPackstackでAllInOneインストール
- CentOS7.2のVMは自宅LANにブリッジ接続(インターネット接続)
- 今回はCentOS7.2のVMにTackerを追加インストールする
##1. 事前準備
Tackerのインストールで使用するopenstack-configコマンドやpipコマンドを使えるようにする。
# yum -y install openstack-utils
# yum -y install python-pip git
extension_driversにport_securityを追加して、いったん再起動する。
# cd /etc/neutron/plugins/ml2
# openstack-config --set ml2_conf.ini ml2 extension_drivers port_security
# reboot
admin権限を持つadmin以外のユーザがフレーバーを作成できるようにするため、"resource_types:OS::Nova::Flavor"を"role:admin"に書き換える。
# vi /etc/heat/policy.json
"resource_types:OS::Nova::Flavor": "role:admin"
##2. Tacker用のユーザやサービスの作成
OpenStackの他のコンポーネントと同じように、Tacker用DBを作成する。
# mysql -u root
> CREATE DATABASE tacker;
> GRANT ALL PRIVILEGES ON tacker.* TO 'tacker'@'localhost' IDENTIFIED BY 'password';
> GRANT ALL PRIVILEGES ON tacker.* TO 'tacker'@'%' IDENTIFIED BY 'password';
> exit
Tackerのユーザやサービスを登録する。HeatからVNFをデプロイできるようにするため、heat_stack_owner権限も追加する。
# cd /root
# source ./keystonerc_admin
# openstack user create --password password tacker
# openstack role add --project services --user tacker admin
# openstack role add --project services --user tacker heat_stack_owner
# openstack service create --name tacker --description "Tacker Project" nfv-orchestration
# openstack endpoint create --region RegionOne --publicurl 'http://192.168.0.159:9890/' --adminurl 'http://192.168.0.159:9890/' --internalurl 'http://192.168.0.159:9890/' `openstack service show -f value -c id tacker`
##3. Tackerのインストール
###3.1 インストール
Newtonのリポジトリをダウンロードしてインストールする。
# mkdir /root/work
# cd /root/work
# git clone -b stable/newton https://github.com/openstack/tacker
# cd tacker
# pip install -r requirements.txt
# python setup.py install
# mkdir /var/log/tacker
###3.2 設定ファイルの作成
Tackerの設定ファイルを作成する。
# cd /usr/etc/tacker
# vi tacker.conf
[DEFAULT]
auth_strategy = keystone
policy_file = /usr/etc/tacker/policy.json
debug = False
use_syslog = False
bind_host = <HOSTADDR>
bind_port = 9890
service_plugins = nfvo,vnfm
state_path = /var/lib/mysql/tacker
[nfvo]
vim_drivers = openstack
[keystone_authtoken]
memcached_servers = 11211
region_name = RegionOne
auth_type = password
username = tacker
project_name = services
password = password
auth_url = http://<HOSTADDR>:35357
auth_uri = http://<HOSTADDR>:5000
[agent]
root_helper = sudo /usr/bin/tacker-rootwrap /usr/etc/tacker/rootwrap.conf
[database]
connection = mysql://tacker:password@127.0.0.1:3306/tacker?charset=utf8
[tacker]
monitor_driver = ping,http_ping
Tackerの設定ファイルの部分に、OpenStackのController NodeのIPアドレスを変更する。
# sed -i -e 's/<HOSTADDR>/192.168.0.159/g' tacker.conf
tacker.confからTackerのデータベースを作成する。
# tacker-db-manage --config-file /usr/etc/tacker/tacker.conf upgrade head
###3.3 サービス起動
Tacker起動用スクリプトを作成する。
# cd /root/work/tacker
# vi tacker-server.service
[Unit]
Description="tacker-server"
[Service]
Restart=always
RestartSec=5
# Set the RUNBIN environment variable
Environment='RUNBIN="/usr/bin/tacker-server"'
# Change directory to service users home
WorkingDirectory="/var/lib/tacker"
# Pre start actions
ExecStartPre=\
/bin/mkdir -p "/var/run/tacker-server" ;\
/bin/chown root:root "/var/run/tacker-server" ;\
/bin/mkdir -p "/var/lock/tacker-server" ;\
/bin/chown root:root "/var/lock/tacker-server" ;\
PermissionsStartOnly=yes
User=root
# Run the start up job
ExecStart="/usr/bin/tacker-server" --config-file /usr/etc/tacker/tacker.conf --log-file /var/log/tacker/tacker-server.log
KillMode=process
[Install]
WantedBy=multi-user.target
Tackerをサービスとして起動する。
# cp tacker-server.service /usr/lib/systemd/system/
# systemctl enable tacker-server.service
# systemctl start tacker-server.service
Tackerのログ設定ファイルを作成する。
# vi logrotate.d_tacker
/var/log/tacker/tacker.log
{
daily
dateext
missingok
rotate 62
compress
delaycompress
copytruncate
minsize 100k
}
# cp logrotate.d_tacker /etc/logrotate.d/tacker
###3.4 Tacker ClientとTacker Horizonのインストール
Tacker Clientをインストールする。
# cd /root/work
# git clone -b stable/newton https://github.com/openstack/python-tackerclient
# cd python-tackerclient/
# python setup.py install
Tacker Horizonをインストールする。
# cd /root/work
# git clone -b stable/newton https://github.com/openstack/tacker-horizon
# cd tacker-horizon/
# python setup.py install
# cp openstack_dashboard_extensions/* /usr/share/openstack-dashboard/openstack_dashboard/enabled/
# systemctl restart httpd.service
# systemctl restart openstack-heat-engine.service
###3.5 Tacker使用前の準備
以降は追加したtackerアカウントでTackerを操作する。
tackerアカウントの環境設定ファイルを作成する。
# vi /root/keystonerc_tacker
以下を記述する(OS_AUTH_URLのIPアドレスはKeystoneのIPアドレス)。
unset OS_SERVICE_TOKEN
export OS_USERNAME=tacker
export OS_PASSWORD=password
export PS1='[\u@\h \W(keystone_tacker)]\$ '
export OS_AUTH_URL=http://192.168.0.159:5000/v2.0
export OS_TENANT_NAME=services
export OS_IDENTITY_API_VERSION=2.0
tackerアカウント用のネットワークを作成する。
# source /root/keystonerc_tacker
# openstack network create net_mgmt
# openstack subnet create net_mgmt_subnet \
--subnet-range 10.0.0.0/24 \
--allocation-pool start=10.0.0.21,end=10.0.0.100 \
--gateway 10.0.0.1 \
--network net_mgmt
# openstack router create net_mgmt_router
# neutron router-gateway-set net_mgmt_router public
# neutron router-interface-add net_mgmt_router net_mgmt_subnet
##4. Tackerの動作確認
実際にTackerを操作し、正常にインストールできたかを確認する。
###4.1 VIM(OpenStack)の登録
TackerとOpenStackが連携できるよう、TackerにVIM(OpenStack)を登録する。
- ダッシュボードにtackerアカウント(パスワードはpassword)でログイン
- NFV→NFV ORCHESTRATION→Register VIMを選択
- ダイアログで以下を入力して「Register VIM」ボタンを押す
- 名前=Default VIM
- 説明=Default VIM
- Auth URL=(KeystoneのURL) ここでは「http://192.168.0.159:5000」
- Username=tacker
- パスワード=password
- プロジェクト名=services
- ドメイン名=default
- Defaultにチェックを入れる
###4.2 VNFDの登録
VNFの定義ファイルとなるVNFDを作成する。
任意の場所でVNFD1.yamlを以下の内容で作成する。
tosca_definitions_version: tosca_simple_profile_for_nfv_1_0_0
description: VNFD1
metadata:
template_name: sample-tosca-vnfd
topology_template:
node_templates:
VDU1:
type: tosca.nodes.nfv.VDU.Tacker
properties:
image: cirros
flavor: m1.tiny
CP1:
type: tosca.nodes.nfv.CP.Tacker
properties:
management: true
anti_spoofing_protection: false
requirements:
- virtualLink:
node: VL1
- virtualBinding:
node: VDU1
VL1:
type: tosca.nodes.nfv.VL
properties:
network_name: net_mgmt
vendor: Tacker
VNF CatalogにてVNFD1.yamlを登録する。
- NFV→VNF MANAGEMENT→VNF Catalogを選択
- 「+Onboard VNF」ボタンを押す
- ダイアログで以下を入力して「OnBoard VNF」ボタンを押す
- 名前=VNFD1
- 説明=VNFD1
- TOSCA Template Source=TOSCA Template Fileを選択
- TOSCA Template File=先ほど作成したVNFD1.yamlを選択
###4.3 VNFインスタンスの作成
作成したVNFDからVNFインスタンスを生成する。
- NFV→VNF MANAGEMENT→VNF Managerを選択
- 「+Deploy VNF」ボタンを押す
- ダイアログで以下を入力して「Deploy VNF」ボタンを押す
- VNF Name=VNF1
- 説明=VNF1
- VNF Catalog Name=VNFD1を選択
- VIM Name=Default VIMを選択
###4.4 VNFの起動確認
生成したVNFインスタンスが正しく起動できたか確認する。
- プロジェクト→コンピュート→インスタンスを選択
- 下図のようにcirrosインスタンスが実行状態になっていればOK