ネットワーク周りの設定で積んでいるのでこの記事は参考程度に御覧ください.
MAAS 2.0 + Juju 2.0 を使って OpenStack を構築した際の覚書.
構成が複数のマシンから成るが,以下説明においてコンソール操作はすべて Controller ノード上で行われる.
構成
必須条件として
- 全ノードが 2 枚のNICを持つ.
- Controller ノード以外のすべてのノードは OS インストール用のストレージに加え,LXDのコンテナイメージを格納するための別のストレージを持ち,それぞれ
/dev/sda
,/dev/sdb
で認識できる.
1. MAAS 導入
1.1. 事前準備
ネットワーク・インタフェースの設定
maas の enp8s0, enp9s0 インターフェースを設定する.
# 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フォワーディング有効化.
# コメントアウトを外す
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
#!/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
# 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
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
を適宜変更する.
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)