えびサブレ

変なオタクが備忘録を貼り付ける場所

*

OpenStack (Liberty) のデモ環境を作ってみた (RDO)

      2016/11/20

Libertyの情報が少なく、手間取りました。
頭の整理も兼ねて、書いておきます。

参考文献
Nestedの場合はどうすべきか
KVM on ESXi 5.5 – あかぎメモ http://blog.akagi.jp/archives/3749.html
公式のマニュアル(基本これに従っています)
Quickstart – RDO http://www.rdoproject.org/install/quickstart/
いろいろ丁寧に説明しています
OpenStack Juno をCentOS7に… – Qiita http://qiita.com/ksrt/items/34f6a31c7af34da9e471

ESXi上で構築する場合

NovaでKVMやらQEMUやらが動いているので、Nested Virtualizationになります。vSphere ClientとSSHから以下の操作を行ってください。(パス等は適宜読み替えてください)

  1. vSwitchの無差別モードを有効にする
    opstvswitch

  2. Intel VT-xを命令セット仮想化に…
    opstvm3

  3. SSHでESXiにログインし、仮想マシンの.vmxファイルに vhv.enable = “TRUE” 追加する

    # vi /vmfs/volumes/datastore1/VM-NAME/VM-NAME.vmx
    vhv.enable = "TRUE"

マシンとネットワークを用意します

ネットワーク設定は適宜読み替えてください。外部ネットワークに接続されたマシンからHorizonとVMにアクセスできるようにします。

項目
外部ネットワーク 172.16.162.0/24
ゲートウェイ(外部) 172.16.162.1
OpenStack All in Oneノード 172.16.162.70(NIC1枚でやります)
内部ネットワーク 10.0.1.0/24(を作る)

マシンを用意します。今回はNIC1枚のマシンを使います。
CentOS 7を使います。(CentOS-7-x86_64-Minimal-1503-01.iso)
(ハイパーバイザはVMware ESXi 6.0 Update 1)

opstvm1

opstvm2

本題に入ります

適宜読み替えてください。

//から行末まで: コメント(必要に応じて消してください)
#から始まる行: 実行するコマンド(面倒なので全部root権限でやっています)
いきなり始まる行: 出力される文字列(一部しかメモっていません)

まずは準備をします。

//hostsに自分を追加(追加しないとMessage queueが動かない)
vi /etc/hosts
127.0.0.1   $HOSTNAME

//SELinuxをpermissiveにする
# setenforce 0
# vi /etc/selinux/config
SELINUX=permissive

//NetworkManager、firewalldを無効化する
# systemctl stop NetworkManager.service
# systemctl disable NetworkManager.service
# systemctl stop firewalld.service
# systemctl disable firewalld.service

pythonの文字コードをutf-8にします。普通はasciiのままでも問題ないらしい(?)

//pythonをutf-8にする
# vi /lib/python2.7/site-packages/sitecustomize.py
import sys
sys.setdefaultencoding('utf-8')

//utf-8になったことを確認する
# python
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>> exit()

引き続き、準備をします。

//ネットワークの設定を確認する(IPアドレスをstaticにする)
# vi /etc/sysconfig/network-scripts/ifcfg-$IFNAME
TYPE=Ethernet
BOOTPROTO=static
IPV6INIT=no
NAME=ens160
UUID=d06c2232-c82e-48dd-9474-19bc316eaa26
DEVICE=ens160
ONBOOT=yes
IPADDR=172.16.162.70
NETMASK=255.255.255.0
GATEWAY=172.16.162.1
DNS1=172.16.162.1

//OSのアップデートを実施する
# yum -y install deltarpm
# yum -y update

# reboot

RDO Packstackを使います。
ens160はNICの名前に置き換えてください。
ここで外部ネットワークextnetを定義しています。
extnetをbr-exにマッピングして、br-exをens160とブリッジ接続します。

//Packstackをインストールする
# yum -y install https://repos.fedorapeople.org/repos/openstack/openstack-liberty/rdo-release-liberty-2.noarch.rpm
# yum -y install openstack-packstack-7.0.0-0.7.dev1661.gaf13b7e.el7.noarch

//Answerファイルを生成して、編集する
# packstack --gen-answer-file=packstack-ans.txt
# vi packstack-ans.txt

CONFIG_KEYSTONE_ADMIN_PW=abc //adminのpw
CONFIG_PROVISION_DEMO=n //demo環境のプロビジョニングを行わない
CONFIG_NTP_SERVERS=ntp.nict.jp //ntp

CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vxlan,flat,vlan,gre //増やしておく、実際に使うのはflat
CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vxlan,vlan,gre //増やしておく、実際に使うのはvxlan

CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=extnet:br-ex //extnetをbr-exにマッピングする
CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:ens160 //br-exはens160とブリッジ接続する

//Packstackを実行してOpenstackを構築する
#packstack --answer-file=packstack-ans.txt

//インストールが完了したら再起動する
#reboot

今の状態を確認しておきます。
この時点で外部ネットワークからHorizon(http://172.16.162.70/dashboard/)にアクセスできるはずです。

//自動で編集された設定を確認する
# cat /etc/sysconfig/network-scripts/ifcfg-$IFNAME
# cat /etc/sysconfig/network-scripts/ifcfg-br-ex
# ip a
# ovs-vsctl show

ネットワークの設定をします。(Horizonからでも設定できるはずです)

//シェルの設定ファイルを読み込む
# source keystonerc_admin


//publicという名前のexternal_networkを作る、通信はflat(VLANなし)、物理ネットワークextnetにmappingする、外部向けネットワーク、共有する
# neutron net-create external_network --name public --provider:network_type flat --provider:physical_network extnet  --router:external --shared


//public_subnetという名前のサブネットをpublicネットワークの下に作る、CIDRは172.16.162.0/24、dhcpなし、IPアドレスプールは.160から.192まで
# neutron subnet-create public 172.16.162.0/24 --name public_subnet --enable_dhcp=False --allocation-pool=start=172.16.162.160,end=172.16.162.192 --gateway=172.16.162.1


//router-publicという名前のルータを作る
# neutron router-create router-public


//router-publicのゲートウェイをpublicネットワークにする
# neutron router-gateway-set router-public public
Set gateway for router router-public


//privateという名前のprivate_networkを作る
# neutron net-create private_network --name private


//private_subnetという名前のサブネットをprivateネットワークの下に作る CIDRは10.0.1.0/24、dhcpあり、アドレスプールは使えるものすべて
# neutron subnet-create private 10.0.1.0/24 --name private_subnet


//router-publicにprivate_subnetにつながるインターフェイスを追加する
# neutron router-interface-add router-public private_subnet
Added interface b3deee6a-43eb-4c22-82f1-df1a070456de to router router-public.


//cirros0.3.4をダウンロードして、glanceに'cirros image'という名前で登録する、圧縮なし(bare)、ディスクフォーマットはqcow2、共有する(visibility public)
# curl http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img | glance image-create --name='cirros image' --visibility public --container-format=bare --disk-format=qcow2


//router-publicとprivate_subnetのDHCPの存在を確認できる
# ip netns
qdhcp-5776791f-899a-429a-b89a-b6fe607a9d8d
qrouter-f4bcf643-d206-4e4f-a5a0-05cc73e809ed


//router-publicの外部との疎通を確認する
# ip netns exec qrouter-f4bcf643-d206-4e4f-a5a0-05cc73e809ed ping 172.16.162.1 -c 4
PING 172.16.162.1 (172.16.162.1) 56(84) bytes of data.
64 bytes from 172.16.162.1: icmp_seq=1 ttl=255 time=1.27 ms
...


//defaultという名前のセキュリティグループに22/TCP(SSH)を通す(Ingressのみ)
# nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range  | Source Group |
+-------------+-----------+---------+-----------+--------------+
| tcp         | 22        | 22      | 0.0.0.0/0 |              |
+-------------+-----------+---------+-----------+--------------+


//defaultという名前のセキュリティグループにICMPを通す(Ingressのみ)
# nova secgroup-add-rule default icmp 8 0 0.0.0.0/0
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range  | Source Group |
+-------------+-----------+---------+-----------+--------------+
| icmp        | 8         | 0       | 0.0.0.0/0 |              |
+-------------+-----------+---------+-----------+--------------+

adminユーザでHorizonにアクセスすれば、今構築したネットワークが見えるはずです。

cirrosのインスタンスにはユーザ名”cirros”、パスワード”cubswin:)”でログインできます。HorizonのVNCを使う場合、工夫しないとパスワードが打てません(Shift+;がなぜか:にならない)。Floating IPを割り当てれば外部からアクセスできるので、HorizonのVNCを使わずにSSHからアクセスするのが手っ取り早いかもしれません。

 - パソコン ,