Ubuntu MAAS/Juju 2.0 で OpenStack Mitaka 構築 (その1)


ネットワーク周りの設定で積んでいるのでこの記事は参考程度に御覧ください.

MAAS 2.0 + Juju 2.0 を使って OpenStack を構築した際の覚書.
構成が複数のマシンから成るが,以下説明においてコンソール操作はすべて Controller ノード上で行われる.

構成

必須条件として

  • 全ノードが 2 枚のNICを持つ.
  • Controller ノード以外のすべてのノードは OS インストール用のストレージに加え,LXDのコンテナイメージを格納するための別のストレージを持ち,それぞれ /dev/sda, /dev/sdb で認識できる.

1. MAAS 導入

1.1. 事前準備

ネットワーク・インタフェースの設定

maas の enp8s0, enp9s0 インターフェースを設定する.

/etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto enp8s0
iface enp8s0 inet dhcp

# The secondary network interface
auto enp9s0
iface enp9s0 inet static
  address 10.1.0.1
  network 10.1.0.0
  netmask 255.255.255.0
  broadcast 10.1.0.255

Controller ノードのゲートウェイ化

Controller ノード maas を MAAS 管理下物理マシンのネットワークゲートウェイとして用いる.
※ 本来は Private Network から Public Network へのゲートウェイを別で設けるべき. MAAS ノードは各ノードからのログの収集なども行い、トラフィックが多いため.

IPv4フォワーディング有効化.

/etc/sysctl.conf
# コメントアウトを外す
net.ipv4.ip_forward=1

IPマスカレードを有効化.

$ sudo iptables -t nat -A POSTROUTING -s 10.1.0.0/255.255.255.0 -j MASQUERADE
$ sudo iptables-save -c > iptables.rules && sudo mv iptables.rules /etc/iptables.rules
$ sudo vi /etc/network/if-pre-up.d/iptables_start
/etc/network/if-pre-up.d/iptables_start
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.rules
exit 0
$ sudo chmod +x /etc/network/if-pre-up.d/iptables_start
$ sudo reboot

1.2. MAAS 2.0 のインストール

apt で最新の maas をインストールする.

$ sudo apt-add-repository -y ppa:maas/stable
$ sudo apt update
$ sudo apt install maas

ユーザを作成する.

$ sudo maas createadmin

http://<your.maas.ip>:5240/MAAS/ が開けることを確認.

1.3. MAAS の設定

MAAS でプライベートネットワーク (10.1.0.0/24)において DHCP サーバを提供するための設定を行う.

MAAS Web GUI にてログイン後,プライベートネットワークの "untagged" をクリックし, VLAN Summary を開く.

右上の「Take action」の欄から「Provide DHCP」を選び,適宜設定を入力して「Provide DHCP」を押す.

1.4. Juju Controller 用の KVM インストール

qemu-kvm インストール

$ sudo apt install qemu-kvm libvirt0 libvirt-bin virt-manager bridge-utils

ブリッジネットワーク br0 を作るために設定を行う.

$ sudo vim /etc/network/interfaces
/etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto enp8s0
iface enp8s0 inet dhcp

# The secondary network interface
auto enp9s0
#iface enp9s0 inet static
#  address 10.1.0.1
#  network 10.1.0.0
#  netmask 255.255.255.0
#  broadcast 10.1.0.255
iface enp9s0 inet manual

# Bridge br0
auto br0
iface br0 inet static
  address 10.1.0.1
  network 10.1.0.0
  netmask 255.255.255.0
  broadcast 10.1.0.255
  gateway 10.1.0.1
  dns-nameservers 10.1.0.1 8.8.8.8
  bridge_ports enp9s0
  bridge_stp off

virt-manager を使って仮想マシンを作成する.

Virtual Machine Manager を起動する.

$ virt-manager

PXE ブートする VM を juju-controller という名前で作成.

maas ユーザに virsh 操作の権限を与える.

$ sudo adduser maas libvirtd

1.5. MAAS へのマシンの登録

各ノード juju-controller(KVM), neutron, mountainlion, mountainlion-2, cl5 を順に電源投入し, Web GUI の Nodes に現れることを確認.
適宜名前を変更する.

すべてのノードに対し, Power type の設定欄を正しく設定し, Commission を行う.
Storage の情報が取得されるまで Commission の操作を繰り返し行う. (最低2回は必要だった)
注意: Commission の操作は, ノードの電源が OFF の状態でないと正しく行われない.

なお,KVM の Power 欄は以下のように設定する.

項目 設定値
Power type Virsh (virtual systems)
Power address qemu:///system
Power ID juju-controller
Power password (optional) (空)

※ MAAS サーバと KVM ホストが同一マシンでない場合は MAAS | Add Nodes を参照

最終的にこんな感じになる.

2. Juju 導入

2.1. Juju 2.0 導入

Controller ノードへ apt にて Juju 2.0 を導入する.

$ sudo apt-add-repository -y ppa:juju/stable
$ sudo apt update
$ sudo apt install juju-2.0

2.2. Juju に MAAS Cloud を追加

適当な場所に読み込む設定ファイルを作る.

$ vi ~/maas-clouds.yaml
~/maas-clouds.yaml
clouds:
   my-maas:
      type: maas
      auth-types: [oauth1]
      endpoint: http://fqdn.of.maas:5240/MAAS

クラウド環境 my-maas を Juju に追加する.

$ juju add-cloud my-maas ~/maas-clouds.yaml
$ juju list-clouds

my-maas 用の認証設定を追加する.

$ juju add-credential my-maas
Enter credential name: my-maas
Using auth-type "oauth1".
Enter maas-oauth:
Credentials added for cloud my-maas.

※ Apiキーは MAAS 管理画面の アカウント > ユーザ設定 のページから取得できる.

2.3. Juju Bootstrap

クラウド環境 my-maas に OpenStack 用のコントローラを作る.

$ juju bootstrap my-maas openstack-controller

2.4. Juju GUI

juju-controller ノード上で juju-gui が動いているので, URL を確認する.

$ juju gui --no-browser
https://10.1.0.2:17070/gui/.../

Controller ノード上でポートフォワーディングを設定する.

$ sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination 10.1.0.2:17070
$ sudo iptables-save -c > iptables.rules && sudo mv iptables.rules /etc/iptables.rules

http://<your.maas.ip>:17070/gui/... にアクセスして Juju GUI が開けることを確認.

なお, 一応ユーザを作っておく.

$ juju add-user hoge
$ juju grant hoge admin default
$ juju change-user-password hoge

3. OpenStack Mitaka 構築

openstack-base-48 の Juju Charm をデプロイすることで,my-maas 上に OpenStack を構築する.

3.1. MAAS にてタグと NIC の設定

openstack-base-48 のデプロイの際に neutron-gateway のデプロイ先が neutron ノードに成るよう、 MAAS にてタグを設定する.

また, neutron ノードおよび compute ノードのネットワークインターフェース名を openstack-base-48 で用いられる設定と合わせ,以下のように設定する.

インタフェース名 ネットワーク
eth0 プライベートネットワーク (10.1.0.0/24)
eth1 パブリックネットワーク (133.68.xxx.0/24)

3.2. Juju Charm の編集

openstack base | Juju のサイトより,cs:bundle/openstack-base-48 の archive を落としてくる.

$ wget https://api.jujucharms.com/charmstore/v5/openstack-base/archive
$ mv archive archive.zip
$ unzip archive.zip

bundle.yaml を適宜変更する.

bundle.yaml
machines:
  '0':
    constraints: arch=amd64
    series: xenial
    tags: gateway # 追加
...

※ 本来はこの constraint で十分なはずだが,2度目以降のデプロイで何故か tags constraint が無視されるようになったため,mem の項目を追加して意図的に neutron が machine 0 に割り当てられるようにした.

3.3. Juju Charm デプロイ

2.3 節で bootstrap した openstack-controller が選択されていることを確認.

$ juju switch
openstack-controller:admin/default

openstack-base の charm をデプロイ.

$ juju deploy bundle.yaml

しばらくするとデプロイが完了する.

OpenStack ダッシュボードを公開する.

$ juju expose openstack-dashboard

上に記載されている通り,プライベートネットワーク内の
 http://10.1.0.16/horizon
にアクセスして、ユーザ名 admin , パスワード openstack でログインができることを確認.

あとは apache 等でリバースプロキシを建てるなりしてパブリックネットワークからも OpenStack ダッシュボードへアクセスできるようにするなどできる.

続く→ Ubuntu MAAS/Juju 2.0 で OpenStack Mitaka 構築 (その2)

参考文献