OpenStack環境構築

OpenStack All In One構築手順書(簡易版)
Okinawa Open Laboratory
Index
1.  OpenStack All-In-One Deployment with Package
2.  OpenStack All-In-One Deployment with Chef
3.  テナントの作成〜インスタンスの起動まで
1.  CLI版
2.  Horizon版
4.  Exercise
1.  インスタンスへVNCアクセスを試す
2.  OpenStack間のネットワーク接続を試す
5.  Knowhow
Okinawa Open Laboratory
2
Environment
n 
OpenStack All in One
External Network
192.168.252.0/24
eth1
Controller
Supporting Service
Database
MySQL
Message
RabbitMQ
Compute
Basic Service
Compute
Nova with KVM
Basic Service
Identity
Keystone
Image
Glance
Compute
Nova
Networking
Neutron
Dashboard
Horizon
Management Network
10.30.1.0/24
Okinawa Open Laboratory
eth0
Network
Basic Service
Networing
ML2-Plugin
OVS-Agent
L3 Agent
DHCP-Agent
eth2
Internal Network
10.1.10.0/24
3
本紙の記述について
緑字は補足です
# description
“$”/”#”は、プロンプト
$ commands
# commands
“#”は、管理者ユーザ(root権限あり)で実行
“赤字”は、入力時に変更する箇所
# commands xxxxx
コマンド入力時の改行は” \”(バックスラッシュ)で資料上は表記しています
# keystone service-create --name keystone --type identity \
--description "OpenStack Identity"
“Check”については、確認することをおすすめします。
Check!!
“Reference”については、補足説明が記載されています。
Reference!!
Okinawa Open Laboratory
4
コマンドリファレンス
viコマンドによるテキスト編集(本書で使う基本操作)
コマンド
動作
i
入力モード
:w
上書き
:q
終了
yy
行をコピー
p
貼り付け
/hogehoge
hogehogeを検索(“N” or “Shift N”で移動)
esc
現在のモードを終了
sedコマンドによる文字列置換
文字列の全置換、抽出、削除、テキスト処理のできるコマンドです。
## sample.txtのファイル内の文字列「before」を「after」に置換するサンプル記述
$ sed -i 's/hogehoge/aftor/’ sample.txt
EOF(End of File) を利用しコマンドをまとめて(<< EOF から EOFまで)入力します
##DBに接続後にcreate~grant設定まで実行するサンプル記述
$ mysql -u root -p << EOF
create database glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'<Management-IP>' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'password';
EOF
Okinawa Open Laboratory
5
OpenStack All-In-One Deployment
with Package
Okinawa Open Laboratory
To configure prerequisites
OpenStack Configサンプルのダウンロード
$ sudo su # 管理者ユーザ(root権限あり)に変更
# apt-get -y install git
## git cloneはファイルなどをgithubからダウンロードします
# git clone https://github.com/matakichi/openstack-deploy.git ディレクトリ構成
openstack-deploy
-  all-in-one
-  keystone
-  glance
-  nova
-  neutron
-  horizon
-  tools
Okinawa Open Laboratory
# この構成については今後変更になる可能性があります
# All-In-One構成のための各サービスの設定ファイルが格納されています
7
To configure prerequisites
ネットワークの設定
# vi /etc/sysctl.conf
…(省略)…
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
…(省略)…
# sysctl -p
#追加
#追加
#追加
#上記ファイルの設定を反映させる(反映結果が表示される)
Junoリポジトリの登録
# echo "deb http://ubuntu-cloud.archive.canonical.com/ubuntu trusty-updates/juno main" >> \
/etc/apt/sources.list.d/ubuntu-cloud-archive-juno-trusty.list
# apt-get -y install ubuntu-cloud-keyring
# apt-get update && apt-get -y dist-upgrade #選択画面が表示された場合は、デフォルトで<Enter>
Okinawa Open Laboratory
8
Deploy Supporting Service
MySQL インストール
# apt-get -y install python-mysqldb mysql-server
※ここで、“root”の初期パスワード入力が求められます。パスワードはhandsonに設定してください。
MySQLの設定
# vi /etc/mysql/my.cnf
…(省略)…
[mysqld]
bind-address = 0.0.0.0
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
…(省略)…
#変更
#追加
#追加
#追加
#追加
#追加
# service mysql restart
Message Queueのインストール
# apt-get -y install rabbitmq-server
Reference!!
[Appendix] Message Queueを参照
Okinawa Open Laboratory
9
Deploy Identity Services(Keystone)
Horizon
(Dashboard)
各種API
Neutron
仮想ネットワーク制御
仮想ルータ、仮想L2
仮想ロードバランサ
Nova
ハイパーバイザー制御
仮想サーバ作成・削除
Ironic
ベアメタル
プロビジョニング
Glance
イメージ
スナップショット管理
仮想マシンのテンプレート
設定済みイメージのスナップショット
Cinder
ブロックストレージ制
御
仮想ボリューム
Swift
オブジェクト
ストレージ
Keystone
統合認証
Okinawa Open Laboratory
物理サーバ
ReST入出力ファイルストア
レプリケーション、遠隔地分散
10
Keystone
データベースの作成
# mysql -u root -p << EOF
create database keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'<Management-IP>' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'password';
EOF
Enter password:
#パスワードはhandson
Keystoneのインストール
# apt-get install -y keystone python-keystoneclient
Reference!!
[Appendix] MySQLを参照
Config ~ DB同期
# cp ~/openstack-deploy/all-in-one/keystone/keystone.conf /etc/keystone/keystone.conf
# sed -i 's/##management-ip##/<Management-IP>/' /etc/keystone/keystone.conf
# su -s /bin/sh -c "keystone-manage db_sync" keystone # DB同期(この時テーブルが作成される)
Check!!
DB同期前と同期後でテーブルを確認してみよう!
$mysql -u keystone -p keystone(pass:password)
> show tables;
Okinawa Open Laboratory
11
Keystone
コンフィグファイルの適用(サービス再起動)
# rm /var/log/keystone/*
# rm -f /var/lib/keystone/keystone.db
# service keystone restart
Okinawa Open Laboratory
# サービス再起動前にログを削除する
# 今回は、SQLiteは使わないため削除する
# keystone サービス再起動
12
Keystone
認証スクリプトの活用
# vi ~/openstack-deploy/tools/credentials
endpoint="<Management-IP>”
os_token=”admin"
※他の項目は適宜変更すること
# less /etc/keystone/keystone.conf
admin_tokenの設定値に変更する
> Credentialsについて
各種APIで使用しているKeystone 認証のため以下の様な環境変数を設定している
export OS_SERVICE_ENDPOINT=http://192.168.1.1:35357/v2.0
export OS_USERNAME=”admin"
Positional arguments:
secret
特殊認証を使う
tenant
user/passwordを使った認証
Credentials options:
--token <admin-token>
特殊認証用のtokenを設定
--tenant <auth-tenant-name> 認証対象のテナントの指定
--user <auth-username>
認証対象のユーザーの指定
--pass <auth-password>
認証対象のパスワード指定
--endpoint <auth-endpoint>
認証用のendpointの指定
Other options:
--help
使用方法
※2015/05/21時点
*環境変数の詳細については、こちらを参照
http://docs.openstack.org/ja/user-guide/content/cli_openrc.html
Okinawa Open Laboratory
13
Keystone
Keystone実行のために管理者トークンを読み込む
# source ~/openstack-deploy/tools/credentials secret
Admin(管理者)のテナント、ユーザ、ロール(権限)の作成、付与
## テナントの作成
# keystone tenant-create --name admin --description "Admin Tenant"
## 新しいユーザの作成
# keystone user-create --name admin --pass admin
## 新しい権限の作成
# keystone role-create --name admin
# keystone role-create --name _member_
## ユーザーに権限を付与
# keystone user-role-add --user admin --tenant admin --role admin
# keystone user-role-add --user admin --tenant admin --role _member_
Check!!
コマンドの結果を確認する
各サービス用のテナントを作成
# keystone tenant-create --name service --description "Service Tenant"
Okinawa Open Laboratory
14
Keystone
エンドポイントの登録
## keystone認証のサービスを登録
# keystone service-create --name keystone --type identity \
--description "OpenStack Identity"
##エンドポイントの作成
# keystone endpoint-create \
--service-id $(keystone service-list | awk '/ identity / {print $2}') \
--publicurl http://<Management-IP>:5000/v2.0 \
--internalurl http://<Management-IP>:5000/v2.0 \
--adminurl http://<Management-IP>:35357/v2.0 \
--region regionOne
Reference!!
[Appendix]Endpointを参照
Check!!
コマンドの結果を確認する
Okinawa Open Laboratory
15
Keystone
Keystone 登録情報の確認(登録した情報と一致しているか確認しておく)
# source ~/openstack-deploy/tools/credentials tenant --tenant admin # 管理者ユーザに切り替える
# keystone tenant-list
# keystone user-list
Okinawa Open Laboratory
※参考
16
Keystone
Keystone 登録情報の確認(登録した情報と一致しているか確認しておく)
# keystone service-list
# keystone endpoint-list
Okinawa Open Laboratory
対応
※参考
17
Deploy Image Services(Glance)
Horizon
(Dashboard)
各種API
Neutron
仮想ネットワーク制御
仮想ルータ、仮想L2
仮想ロードバランサ
Nova
ハイパーバイザー制御
仮想サーバ作成・削除
Ironic
ベアメタル
プロビジョニング
Glance
イメージ
スナップショット管理
仮想マシンのテンプレート
設定済みイメージのスナップショット
Cinder
ブロックストレージ制
御
仮想ボリューム
Swift
オブジェクト
ストレージ
Keystone
統合認証
Okinawa Open Laboratory
物理サーバ
ReST入出力ファイルストア
レプリケーション、遠隔地分散
18
Glance
データベースの作成
# mysql -u root -p << EOF
create database glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'<Management-IP>' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'password';
EOF
Enter password:
#パスワードはhandson
glanceユーザーの作成、ロール設定
# keystone user-create --name glance --pass glance
# keystone user-role-add --user glance --tenant service --role admin
エンドポイントの登録
# keystone service-create --name glance --type image \
--description "OpenStack Image Service”
#keystone endpoint-create \
--service-id $(keystone service-list | awk '/ image / {print $2}') \
--publicurl http://<Management-IP>:9292 \
--internalurl http://<Management-IP>:9292 \
--adminurl http://<Management-IP>:9292 \
--region regionOne
Okinawa Open Laboratory
19
Glance
Glanceのインストール
# apt-get -y install glance python-glanceclient
Glanceの設定変更
# cp ~/openstack-deploy/all-in-one/glance/glance-api.conf /etc/glance/glance-api.conf
# cp ~/openstack-deploy/all-in-one/glance/glance-registry.conf /etc/glance/glance-registry.conf
# sed -i "s/##management-ip##/<Management-IP>/" /etc/glance/glance-api.conf
# sed -i "s/##management-ip##/<Management-IP>/" /etc/glance/glance-registry.conf
# su -s /bin/sh -c "glance-manage db_sync" glance
# rm /var/log/glance/*
Check!!
# rm -f /var/lib/glance/glance.sqlite
DB同期前と同期後でテーブルを確認してみよう!
$ mysql -u glance -p glance (pass:password)
サービスの再起動
> show tables;
# service glance-registry restart
# service glance-api restart
Okinawa Open Laboratory
20
Glance
動作確認
# glance image-list
# コマンド結果は0件
# glance image-create --name="cirros-0.3.4-x86_64" --disk-format=qcow2 \
--container-format=bare --is-public=true \
--copy-from http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
# glance image-list
Check!!
"cirros-0.3.4-x86_64"が
登録されていること
Okinawa Open Laboratory
21
Deploy Compute Services(Nova)
Horizon
(Dashboard)
各種API
Neutron
仮想ネットワーク制御
仮想ルータ、仮想L2
仮想ロードバランサ
Nova
ハイパーバイザー制御
仮想サーバ作成・削除
Ironic
ベアメタル
プロビジョニング
Glance
イメージ
スナップショット管理
仮想マシンのテンプレート
設定済みイメージのスナップショット
Cinder
ブロックストレージ制
御
仮想ボリューム
Swift
オブジェクト
ストレージ
Keystone
統合認証
Okinawa Open Laboratory
物理サーバ
ReST入出力ファイルストア
レプリケーション、遠隔地分散
22
Nova
データベースの作成
# mysql -u root -p << EOF
create database nova;
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'<Management-IP>' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'password';
EOF
Enter password:
#パスワードはhandson
novaのインストール
# apt-get install -y nova-api nova-cert nova-conductor nova-consoleauth \
nova-novncproxy nova-scheduler python-novaclient nova-compute sysfsutils KVMデフォルトネットワークの削除
# virsh net-destroy default
# virsh net-autostart default --disable
192.168.122.0/24のネットワークが自動で
作成されるため、削除しておく
novaの設定変更
# cp ~/openstack-deploy/all-in-one/nova/nova.conf /etc/nova/nova.conf
# sed -i 's/##management-ip##/<Management-IP>/' /etc/nova/nova.conf
# su -s /bin/sh -c "nova-manage db sync" nova
Check!!
# rm /var/lib/nova/nova.sqlite
DB同期前と同期後でテーブルを確認してみよう!
# rm /var/log/nova/*
# mysql -u nova -p nova (pass:password)
> show tables;
Okinawa Open Laboratory
23
Nova
novaユーザーの作成
# keystone user-create --name=nova --pass=nova
# keystone user-role-add --user=nova --tenant=service --role=admin
エンドポイントの登録
# keystone service-create --name=nova --type=compute \
--description="OpenStack Compute"
# keystone endpoint-create \
--service-id=$(keystone service-list | awk '/ compute / {print $2}') \
--publicurl=http://<Management-IP>:8774/v2/%\(tenant_id\)s \
--internalurl=http://<Management-IP>:8774/v2/%\(tenant_id\)s \
--adminurl=http://<Management-IP>:8774/v2/%\(tenant_id\)s
サービスの再起動
# service nova-api restart
# service nova-cert restart
# service nova-consoleauth restart
# service nova-scheduler restart
# service nova-conductor restart
# service nova-novncproxy restart
# service nova-compute restart
Okinawa Open Laboratory
24
Nova
動作確認
# nova service-list
Check!!
Stateが“up”となっていることを確認
Okinawa Open Laboratory
25
Deploy Network Services(Neutron)
Horizon
(Dashboard)
各種API
Neutron
仮想ネットワーク制御
仮想ルータ、仮想L2
仮想ロードバランサ
Nova
ハイパーバイザー制御
仮想サーバ作成・削除
Ironic
ベアメタル
プロビジョニング
Glance
イメージ
スナップショット管理
仮想マシンのテンプレート
設定済みイメージのスナップショット
Cinder
ブロックストレージ制
御
仮想ボリューム
Swift
オブジェクト
ストレージ
Keystone
統合認証
Okinawa Open Laboratory
物理サーバ
ReST入出力ファイルストア
レプリケーション、遠隔地分散
26
Neutron
データベースの作成
# mysql -u root -p << EOF
create database neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron’@' <Management-IP>' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'password';
EOF
Enter password:
#パスワードはhandson
neutronユーザー作成
# keystone user-create --name neutron --pass neutron
# keystone user-role-add --user neutron --tenant service --role admin
エンドポイントの登録
# keystone service-create --name neutron --type network --description "OpenStack Networking"
# keystone endpoint-create \
--service-id $(keystone service-list | awk '/ network / {print $2}') \
--publicurl http://<Management-IP>:9696 \
--adminurl http://<Management-IP>:9696 \
--internalurl http://<Management-IP>:9696
Okinawa Open Laboratory
27
Neutron
neutronのインストール
# apt-get install -y neutron-server neutron-plugin-ml2 python-neutronclient \
neutron-plugin-openvswitch-agent neutron-l3-agent neutron-dhcp-agent
設定ファイルの書き換え
#cp ~/openstack-deploy/all-in-one/neutron/dhcp_agent.ini /etc/neutron/dhcp_agent.ini
#cp ~/openstack-deploy/all-in-one/neutron/dnsmasq-neutron.conf /etc/neutron/dnsmasq-neutron.conf
#cp ~/openstack-deploy/all-in-one/neutron/l3_agent.ini /etc/neutron/l3_agent.ini
#cp ~/openstack-deploy/all-in-one/neutron/metadata_agent.ini /etc/neutron/metadata_agent.ini
#cp ~/openstack-deploy/all-in-one/neutron/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.ini
#cp ~/openstack-deploy/all-in-one/neutron/neutron.conf /etc/neutron/neutron.conf
# keystone tenant-list
# Service Tenant のIDを確認
# sed -i 's/##management-ip##/<Management-IP>/' /etc/neutron/neutron.conf
# sed -i 's/##management-ip##/<Management-IP>/' /etc/neutron/metadata_agent.ini
# sed -i 's/##nova_admin_tenant_id##/Service Tenant ID/' /etc/neutron/neutron.conf
下記の様なIDが表示される
$ keystone tenant-get service
+-------------+-----------------------------------------------------+
| Property |
Value
|
+-------------+-----------------------------------------------------+
| description |
Service Tenant
|
| enabled |
True
|
|
id
| f727b5ec2ceb4d71bad86dfc414449bf |
| name |
service
|
+-------------+-----------------------------------------------------+
Okinawa Open Laboratory
28
Neutron
DB投入
# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
--config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade juno" neutron
# rm /var/lib/neutron/neutron.sqlite
OVSの設定
# service openvswitch-switch restart
# ovs-vsctl add-br br-ex
# ovs-vsctl add-port br-ex eth0
Okinawa Open Laboratory
Check!!
DB同期前と同期後でテーブルを確認してみよう!
# mysql -u neutron -p neutron(pass:password)
> show tables;
29
Neutron
Network Interfaceの設定変更
# vi /etc/network/interfaces
…(省略)…
#auto eth0
#iface eth0 inet dhcp
#コメントアウト
#コメントアウト
auto eth0
iface eth0 inet manual
up ip link set dev $IFACE up
down ip link set dev $IFACE down
auto br-ex
iface br-ex inet static
address
<<External IPアドレス>>
network
192.168.252.0
netmask
255.255.255.0
broadcast
192.168.252.255
gateway
192.168.252.1
dns-nameservers 8.8.8.8
...(省略)…
# ifconfig eth0 0.0.0.0 up
# ifup br-ex
Okinawa Open Laboratory
30
Note
br-exのMACアドレスがeth0(External-IP)と異なる場合、eth0(External-IP)のMAC ADDRESSにあわせる。
Ifconfigを入力し、br-exとeth0(External-IP)のMACアドレスを確認する
(下図参照)
対処法
以下のコマンドで変更
# ovs-vsctl set bridge br-ex other-config:hwaddr=eth0(External-IP)のMACアドレス
# ifconfig
…(省略)…
br-ex
Link encap:Ethernet HWaddr fa:16:3e:71:e3:45
inet addr:192.168.252.13 Bcast:192.168.252.255 Mask:255.255.255.0
inet6 addr: fe80::94f2:60ff:fe70:a1cb/64 Scope:Link
UP BROADCAST RUNNING MTU:1500 Metric:1
…(省略)…
eth0
Link encap:Ethernet HWaddr fa:16:3e:71:e3:45
inet6 addr: fe80::f816:3eff:fe71:e345/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:64184 errors:0 dropped:0 overruns:0 frame:0
TX packets:63910 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:12434085 (12.4 MB) TX bytes:9498356 (9.4 MB)
…(省略)…
Okinawa Open Laboratory
31
Neutron
コンフィグの適用(サービス再起動)
# rm /var/log/neutron/*
# service nova-api restart
# service nova-scheduler restart
# service nova-conductor restart
# service neutron-server restart
※最後はneutron(server)の再起動
# service neutron-plugin-openvswitch-agent restart
# service neutron-l3-agent restart
# service neutron-dhcp-agent restart
# service neutron-metadata-agent restart
# service nova-compute restart ※最後はnova(compute)の再起動
Okinawa Open Laboratory
32
Neutron
動作確認
# neutron agent-list
Check!!
4つのagentが表示され
Jマークが表示されてればOK
Okinawa Open Laboratory
33
Deploy Dashboard(Horizon)
Horizon
(Dashboard)
各種API
Neutron
仮想ネットワーク制御
仮想ルータ、仮想L2
仮想ロードバランサ
Nova
ハイパーバイザー制御
仮想サーバ作成・削除
Ironic
ベアメタル
プロビジョニング
Glance
イメージ
スナップショット管理
仮想マシンのテンプレート
設定済みイメージのスナップショット
Cinder
ブロックストレージ制
御
仮想ボリューム
Swift
オブジェクト
ストレージ
Keystone
統合認証
Okinawa Open Laboratory
物理サーバ
ReST入出力ファイルストア
レプリケーション、遠隔地分散
34
Horizon
パッケージインストール
# apt-get install -y openstack-dashboard apache2 libapache2-mod-wsgi \
memcached python-memcache
#DefaultでUbuntu用テーマが適用される。OpenStack標準テーマを利用する場合は削除(任意)
# apt-get remove -y openstack-dashboard-ubuntu-theme
設定ファイルの書き換え
# cp ~/openstack-deploy/all-in-one/openstack-dashboard/local_settings.py \
/etc/openstack-dashboard/local_settings.py
# sed -i 's/##management-ip##/<Management-IP>/' /etc/openstack-dashboard/local_settings.py
# service apache2 restart
確認
ブラウザから以下のアドレスにアクセスし
ログイン画面が表示されるか確認
http://外部接続用IP/horizon
Okinawa Open Laboratory
35
Service components to verify
# nova service-list
↑5つのサービスが’up’となっていることを確認する
# neutron agent-list
↑4つのエージェントが’J’となっていることを確認する
Okinawa Open Laboratory
36
お疲れさまです。
これで構築完了です。
Next Step(〜インスタンスの起動まで)
これであなたもOpenStacker
Okinawa Open Laboratory
37
OpenStack All-In-One
Deployment with Chef
Okinawa Open Laboratory
事前準備
Chef をオムニバスインストーラでインストール
$ sudo su # apt-get -y install curl git autoconf
# curl -L https://www.opscode.com/chef/install.sh | bash
berkshelf をインストール
いくつかwarningが出るが気にしない
# /opt/chef/embedded/bin/gem install berkshelf --no-ri --no-rdoc
必要なパッケージのインストール
# apt-get -y install build-essential zlib1g-dev libssl-dev libreadline-dev ruby-dev libxml2-dev libxslt-dev g++
設定の変更
# sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
# sed -i 's/#net.ipv4.conf.default.rp_filter=0/net.ipv4.conf.default.rp_filter=0/' /etc/sysctl.conf
# sed -i 's/#net.ipv4.conf.all.rp_filter=0/net.ipv4.conf.all.rp_filter=0/' /etc/sysctl.conf
# sysctl -p
Okinawa Open Laboratory
39
デプロイ
allinone.jsonの作成
# sed -i 's/##management-ip##/Management-IP/’ ~/handson-allinone.json
# sed -i 's/##internal-ip##/Internal-IP/’ ~/handson-allinone.json
Interface = ethxx
# sed -i ‘s/##internal-interface##/Internal-Interface/’ ~/handson-allinone.json
# sed -i ‘s/##external-interface##/External-Interface/’ ~/handson-allinone.json
# sed -i ‘s/##management-interface##/Managemet-Interface/’ ~/handson-allione.json
# vi handson-allinone.json
#ファイルの中に##xxxxxx-xxxxx##の名前がないことを確認
# mv ~/handson-allinone.json ~/openstack-chef-repo/environments
デプロイ
# cd ~/openstack-chef-repo #必ずここのディレクトリに移動する
# chef-client -z
# knife node -z run_list add Hostname 'role[allinone-compute]'
# chef-client -z -E handson-allinone
Okinawa Open Laboratory
40
Note
br-exの設定後に外部通信が切れるため、エラーで終了する
原因:eth0がbr-exにブリッジされることによってeth0のIPアドレス経由で通信ができなくなります
対処法
# vi /etc/network/interfaces
…(省略)…
# The primary network interface
auto eth0
#iface eth0 inet dhcp
iface eth0 inet manual
up ip link set dev $IFACE up
down ip link set dev $IFACE down
…(省略)…
auto br-ex
iface br-ex inet static
address
<<eth0のIPアドレス>>
network
192.168.252.0
netmask
255.255.255.0
broadcast
192.168.252.255
gateway
192.168.252.1
dns-nameservers 8.8.8.8
# ifconfig eth0 0.0.0.0 up
# ifup br-ex
# chef-client -z -E handson-allinone
Okinawa Open Laboratory
#再度実行
41
Note
br-exのMACアドレスがeth0と異なる場合、eth0のMAC ADDRESSにあわせる。
Ifconfigを入力し、br-exとeth0のMACアドレスを確認する(下図参照)
対処法
以下のコマンドで変更
# ovs-vsctl set bridge br-ex other-config:hwaddr=eth0のMACアドレス
# ifconfig
…(省略)…
br-ex
Link encap:Ethernet HWaddr fa:16:3e:71:e3:45
inet addr:192.168.252.13 Bcast:192.168.252.255 Mask:255.255.255.0
inet6 addr: fe80::94f2:60ff:fe70:a1cb/64 Scope:Link
UP BROADCAST RUNNING MTU:1500 Metric:1
…(省略)…
eth0
Link encap:Ethernet HWaddr fa:16:3e:71:e3:45
inet6 addr: fe80::f816:3eff:fe71:e345/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:64184 errors:0 dropped:0 overruns:0 frame:0
TX packets:63910 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:12434085 (12.4 MB) TX bytes:9498356 (9.4 MB)
…(省略)…
Okinawa Open Laboratory
42
インスタンスの起動
Next Step(〜インスタンス起動まで
CLI (p44〜49)
Horizon (p50〜72)
Okinawa Open Laboratory
43
テナント作成~インスタンスの起動まで
with CLI
Okinawa Open Laboratory
44
テナントの作成〜ユーザの作成
## テナントを作成(テナント名:handson)
# keystone tenant-create –name handson
## ユーザを作成(ユーザ名:handson-user/パスワード:handson)
# keystone user-create --name handson-user --pass handson
## ユーザをテナントに所属(ユーザ(handson-user)をテナント(handson)に”_member_”権限で所属させる)
# keystone user-role-add --user handson-user --tenant handson --role _member_
## テナントの確認
# keystone tenant-get handson
## ユーザの確認
# keystone user-get handson-user
## 権限の確認
# keystone user-role-list --user handson-user --tenant handson
## テナントとユーザを切り替えます
# source ~/openstack-deploy/tools/credentials tenant --tenant handson
## 以下のコマンドが実行後handsonテナントのみ表示されれば変更完了です
# keystone tenant-list
Okinawa Open Laboratory
45
仮想ネットワークの作成
## ネットワークの作成
# neutron net-create internal1
## サブネットの作成(ネットワークとの対応付け)
# neutron subnet-create internal1 -name internal1-subnet 192.168.10.0/24 --no-gateway
## ネットワークの確認
# neutron net-show internal1
## サブネットの確認
# neutron subnet-show internal1-subnet
それぞれの出力結果(id)から
相互に対応していることが確認できます。
Okinawa Open Laboratory
46
セキュリティグループの設定
## ICMPを許可
# neutron security-group-rule-create --protocol icmp --direction ingress default
## 22(SSH)を許可
# neutron security-group-rule-create --protocol tcp --port-range-min 22 --port-range-max 22 --direction
ingress default
セキュルティグループとは、外部からのアクセスを制限をする
ファイアウォールのようなものです。
Okinawa Open Laboratory
47
インスタンスの起動
## インスタンスの起動
# nova boot --flavor m1.tiny --image cirros-0.3.4-x86_64 --nic net-id=internal1ネットワークID \
--security-group default internal1-host
## 起動の確認
# nova list
Okinawa Open Laboratory
Glanceの動作確認時に登録した
イメージを指定
# neutron net-show internal1
の出力結果を参照
48
インスタンスの疎通確認
ACTIVE/RUNNINGであればOK
#nova list
# ip netns list
#以下のように表示されるqdhcp-xxx-xxx-xxx-xxx-xxxxを一行分コピーします。
ip netnsについては
Openflow編で紹介します
# ip netns exec <上記でコピーしたqdhcp> ping <インスタンス起動時に確認したIPアドレス>
#ip netns exec <上記でコピーしたqdhcp> ssh <インスタンス起動時に確認したIPアドレス> -l cirros
Password: ccubswin:)
$ifconfig
#IPアドレスがinternal1-hostのIPアドレスかを確認
今回はcirrosというOSを使って起動しています。
Username: cirros
Password: cubswin:)
※疎通が可能となるまで(OSが起動するまでの間)しばらく時間を要します
Okinawa Open Laboratory
49
テナント作成~インスタンスの起動まで
with Horizon
Okinawa Open Laboratory
ログイン手順
Openstackにwebブラウザからログイン (アドレス: http://外部接続用IPアドレス/horizon)
Username: admin
Password: admin
Okinawa Open Laboratory
51
テナントの作成(1)
①
ユーザー管理 → プロジェクトをクリック ②ネットワークの作成をクリック
Okinawa Open Laboratory
52
テナントの作成(2)
③
名前「handson」 を入力し、プロジェクトメンバータブをクリック Okinawa Open Laboratory
53
テナントの作成(3)
④すべてのユーザーからadminユーザー右側の+ボタンを押し
プロジェクトメンバーに追加します。 Okinawa Open Laboratory
54
テナントの作成(4)
⑤
をクリック後、
adminをクリックしadminユーザーをプロジェクトメンバーに追加する ⑥「プロジェクトの作成」をクリック
Okinawa Open Laboratory
55
テナントの作成(5)
⑦
プロジェクト「handson」が作成されたことを確認し一度ログアウトします Okinawa Open Laboratory
56
テナントの作成(6)
⑧再度ログイン(user: admin/pass: admin)後
プロジェクト「admin」をクリックすると、プロジェクト一覧が表示されます。
「handson」をクリックし、プロジェクトをadminからhandsonへ変更します。 Okinawa Open Laboratory
57
テナントの作成(7)
⑨
プロジェクトが「handson」となったことを確認 Okinawa Open Laboratory
58
セキュリティグループの追加(1)
①
メニューからコンピュート → アクセスとセキュリティーをクリック ②ルールの管理をクリック
Okinawa Open Laboratory
59
セキュリティグループの追加(2)
③ルールの追加をクリック
Okinawa Open Laboratory
60
セキュリティグループの追加(3)
④ルールから「ssh」を選択し追加をクリック
⑤同様の手順でルールから「All ICMP」を
選択し追加をクリック
61
Okinawa Open Laboratory
61
セキュリティグループの追加(4)
⑥ICMPとSSHが追加されたことを確認
Okinawa Open Laboratory
62
ネットワークの作成(1)
①左側メニューから
プロジェクト → ネットワークをクリック ②ネットワークの作成をクリック
Okinawa Open Laboratory
63
ネットワークの作成(2)
③ネットワーク名「internal1」を入力し、次へをクリック
Okinawa Open Laboratory
64
ネットワークの作成(3)
④サブネット名「internal1-subnet」入力
⑤ネットワークアドレス「192.168.10/24」
を入力
⑥「ゲートウェイなし」にチェックし、次をクリック
Okinawa Open Laboratory
65
ネットワークの作成(4)
⑦DHCP有効にチェック
⑧作成ボタン押下
ネットワークが作成されました。
Okinawa Open Laboratory
66
インスタンス作成(1)
②インスタンスの起動をクリック
①左側メニューのプロジェクトからインスタンスをクリック
Okinawa Open Laboratory
67
インスタンス作成(2)
インスタンス(仮想マシン)の作成 詳細タブ
③インスタンス名「internal1-host」を入力
④以下の通りに選択し、
「アクセスとセキュリティー」タブをクリック
・フレーバー: m1.tiny
・インスタンス数: 1
・インスタンスのブートソース: イメージから起動
・イメージ名: cirros-0.3.4-x86_64(12.7MB)
Okinawa Open Laboratory
68
インスタンス作成(3)
インスタンス(仮想マシン)の作成 アクセスとセキュリティータブ
⑤defaultにチェックが入っていることを確認
Okinawa Open Laboratory
69
インスタンス作成(4)
インスタンス(仮想マシン)の作成 ネットワークタブ
⑦起動をクリック
⑥先ほど作成した「internal1」が
選択済みネットワークに入っていることを確認
入っていない場合は「利用可能なネットワークの欄から選択する
Okinawa Open Laboratory
70
インスタンス作成(5)
インスタンス(仮想マシン)の作成 作成の完了
稼働中になればOK!
次ページで使うので
控えておいてください
Internal1-host IPアドレス: 192.168.10.___
Okinawa Open Laboratory
71
インスタンス(仮想マシン)の疎通確認
ここからコマンドラインの操作に戻ります。
ACTIVE/RUNNINGであればOK
#nova list
# ip netns list
#以下のように表示されるqdhcp-xxx-xxx-xxx-xxx-xxxxを一行分コピーします。
ip netnsについては
Openflow編で紹介します
# ip netns exec <上記でコピーしたqdhcp> ping <インスタンス起動時に確認したIPアドレス>
#ip netns exec <上記でコピーしたqdhcp> ssh <インスタンス起動時に確認したIPアドレス> -l cirros
Password: cubswin:)
$ifconfig
#IPアドレスがinternal1-hostのIPアドレスかを確認
今回はcirrosというOSを使って起動しています。
Username: cirros
Password: cubswin:)
※疎通が可能となるまで(OSが起動するまでの間)しばらく時間を要します
Okinawa Open Laboratory
72
OpenStack上でインスタンスが
起動することが確認できました!
Okinawa Open Laboratory
73
Exercise!!
Okinawa Open Laboratory
Horizonからvncアクセスするためには
nova.confの設定を確認し、異なれば修正します。
# vi /etc/nova/nova.conf
[DEFAULT]
novncproxy_host=ホストのインターネット側IPアドレス
novncproxy_port=6080
vncserver_listen = ローカルIP
vncserver_proxyclient_address = ローカルIP
novncproxy_base_url=http://ホストの外部接続用IPアドレス:6080/vnc_auto.html
仕組み
1. リクエスト
2. get vnc console
nova-api
5. URL with token
4. authorize console
compute
3. token作成依頼
6. ブラウズ URL
with token
7. tokenの確認
browser
Okinawa Open Laboratory
8. Proxy開始
nova-consoleauth
libvirt driver
75
OpenStack間のネットワークを接続(VPNaaS)
パッケージインストール
# apt-get install openswan neutron-plugin-vpn-agent
注)ここで neutron-l3-agentはremoveされます。
設定ファイルの書き換え
# cat /etc/neutron/vpn_agent.ini
[DEFAULT]
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
[vpnagent]
vpn_device_driver=neutron.services.vpn.device_drivers.ipsec.OpenSwanDriver
[ipsec]
ipsec_status_check_interval=60
Okinawa Open Laboratory
76
Appendix
Okinawa Open Laboratory
Endpointについて
OpenStackの各サービスは、
REST API(HTTPによるリクエスト)を実装しており
サービス間のやりとりはもちろんのこと
ユーザからも実行することで、GUIに頼らない
操作が可能となっています。
REST API
http://****:8774 http://****:9696 Public/Admin
Public/Admin
Nova
Neutron
http://****:9292 Public/Admin
Public/Admin
Public/Admin
Public/Admin
Glance
Horizon
Etc...
Etc...
Okinawa Open Laboratory
78
Message Queueについて
各種APIからのRESTを介した要求などは基本的にMessage Queueを介して
メッセージのやりとりが行われます。
Message Queueを介すことで各モジュール間がより疎結合な構成になるようになっています。
一般的なRPC(リモートプロシージャコール)といわれるもので
各要求の用途に応じて要求先の結果を待ち受けたり、非同期で実行したりといったことも行っています。
scheduler
*-api
Queue
compute
compute.*
network-*
neutron
※メッセージの宛先、送受信、ルーティング等の詳細については割愛します。
Okinawa Open Laboratory
79
MySQL(GRANT)
DBのユーザに対して、権限を設定します。
## The GRANT statement grants privileges to MySQL user accounts.
## GRANT permisson ON database-name.table-name TO user-name INDENTIFIED BY 'password'
# mysql -u root -p << EOF (MySQLインストール時に入力したパスワード)
create database keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'10.10.10.10' IDENTIFIED BY 'hoge';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'hoge';
EOF
基本的には、下記の構文から成り立っています。
## 全体
GRANT 権限 ON *.* TO user;
## DB単位
GRANT 権限 ON db_name.* TO user;
## テーブル単位
GRANT 権限 ON db_name.table_name TO user;
Okinawa Open Laboratory
権限とパスワードをまとめて
設定している。
80
Know How
Okinawa Open Laboratory
• 
Logging
各コンフィグファイル(/etc/コンポーネント/*)のロギングレベルを設定し、サービス再起動します。
debug = True
verbose = True
log_dir=<このパスに出力される>
• 
API
各API実行時に”--debug”オプションを付与することでより詳細なコンソールログが出力される。
# nova --debug list
# neutron --debug net-list
Okinawa Open Laboratory
82
• 
Networking(Neutron)
## Open vSwitchの確認
# ovs-vsctl show
# ovs-dpctl show
# ovs-dpctl dump-flows
# ovs-ofctl dump-flows br-tun
# ovs-ofctl dump-flows br-int
## パケット確認
# ip link add name snooper0 type dummy
# ip link set dev snooper0 up
# tcpdump -i <Internal Network Interface> -n ip proto gre
# ovs-vsctl -- set Bridge br-tun mirrors=@m -- --id=@snooper0 \
get Port snooper0 -- --id=@patch-int get Port patch-int \
-- --id=@m create Mirror name=mymirror select-dst-port=@patch-int \
select-src-port=@patch-int output-port=@snooper0
## Network Namespace内の確認
# ip netns show
# ip netns exec **-***** ip a
# ip netns exec **-***** ip link
# ip netns exec **-***** route -n
# ip netns exec **-***** iptables -L -t nat
# ip netns exec **-***** tcpdump -nn -i qr-***** -t icmp
Okinawa Open Laboratory
83
OpenStack構築マニュアル(参考)
本書執筆にあたり参考にしたURL
http://docs.openstack.org/juno/install-guide/install/apt/openstack-install-guide-apt-juno.pdf
Okinawa Open Laboratory
84