めもめも

このブログに記載の内容は個人の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

Nested KVM環境でRHEL-OSP7をセットアップ

enakai00.hatenablog.com

ちょうど2年前に上記の記事を書いたのですが、同じことをRed Hatの製品版ディストリビューションRHEL-OSP7(Kilo)でやれるようにquickrdoを拡張しました。

Fedoraなどで、Nested KVMが利用できるLinux KVM環境を用意して、その上の3台の仮想マシンで下記のクラスタを構成します。各ノード共通に「eth0」がAPI/管理アクセス用で、「eth1」がVXLAN接続用になっています。コントローラーノードの「eth2」は、テナントネットワークから外部ネットワークに接続するNICになります。Packstackの制限で、VXLAN接続用NICは全ノードで同じ名前のNICデバイスを使用する必要があります。

[Internet]
    |
    |
[物理NIC]
    |(NAT)
    |           external01 192.168.200.0/24
------------------------------------------
  |     |            |            |
  |eth0 |eth2        |eth0        |eth0
--------------  -----------  -----------  
| osp7-00    |  | osp7-01 |  | osp7-02 |
| Controller |  | Compute |  | Compute |
--------------  -----------  -----------
      |eth1          |eth1        |eth1
      |              |            |
------------------------------------------
                internal01 192.168.250.0/24

製品サポート外の構成ですので、デモ、素振り用などに限定してお使いください。

事前準備

IPアドレスとその他のネットワーク構成情報は、次のとおりです。

項目
サブネット 192.168.200.0/24
ゲートウェイ 192.168.200.1
DNSサーバ 192.168.200.1
IPアドレスプール 192.168.200.100〜192.168.200.199
仮想マシン IPアドレス
osp7-00 eht0:192.168.200.90, eth1:192.168.250.90
osp7-01 eth0:192.168.200.91, eth1:192.168.250.91
osp7-02 eth0:192.168.200.92, eth1:192.168.250.92

Nested KVMを有効化した物理ホストに、上記の仮想ネットワーク「external01」と「internal01」を作成した上で、RHEL7を最小構成でインストールした仮想マシン「osp7-00」〜「osp7-02」を用意します。それぞれの仮想マシンには、上記の図にあわせた仮想NICを用意してください。また、ops7-00には、CinderのLVMバックエンドとして使う仮想ディスク「/dev/vdb」を追加で接続しておきます。それぞれのRHEL7は、subscription-managerでRHEL-OSPに必要なサブスクリプションを登録しておいてください。(必要なチャネルの有効化はインストールスクリプトで自動的に行ないます。)

また、Neutronとの相性が悪いので、NetworkManagerは停止しておきます。

# systemctl mask NetworkManager.service

それぞれのNICの設定ファイルを下記の内容で作成して、仮想マシンを再起動すると、network.serviceでネットワークが有効化されます。(下記はコントローラーノードの例です。コンピュートノードはこれを参考に同様に作成してください。)

ifcfg-eth0

TYPE=Ethernet
BOOTPROTO=static
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.200.90
NETMASK=255.255.255.0
GATEWAY=192.168.200.1
DNS1=192.168.200.1
NM_MANAGED=no

ifcfg-eth1

TYPE=Ethernet
BOOTPROTO=static
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.250.90
NETMASK=255.255.255.0
NM_MANAGED=no

ifcfg-eth2

TYPE=Ethernet
BOOTPROTO=none
IPV6INIT=no
DEVICE=eth2
ONBOOT=yes
NM_MANAGED=no

また、/etc/hostsに下記のエントリーを記載しておきます。

192.168.200.90	osp7-00
192.168.200.91	osp7-01
192.168.200.91	osp7-02

コントローラーノードの構成

Cinderのバックエンドとして使うVG「cinder-volumes」を作成します。lvm2のパッケージを追加して、一度、再起動します。

# yum -y install lvm2
# reboot

/dev/vdbを未使用の仮想ディスクとして、これをPVとして、VGを作成します。

# pvcreate /dev/vdb
# vgcreate cinder-volumes /dev/vdb

quickrdoでRHEL-OSP7をインストールします。

# yum -y install git
# git clone https://github.com/enakai00/quickrdo.git
# cd quickrdo
# git checkout osp7-mn
# ./setup.sh
External NIC: eth2  <=== 外部接続用NIC
Private NIC: eth1   <=== トンネル用NIC

完了したら、一度、再起動しておきます。

# reboot

コンピュートノードを追加する前に、ここで先にテナント、仮想ネットワークなどを構成しておきます。config.shを開いて、冒頭のネットワーク設定を必要に応じて編集します。

# cd ~/quickrdo
# vi config.sh

下記は、テナント用仮想ネットワークを「192.168.101.0/24」と「192.168.102.0/24」で2個作る指定になっています。

####
public="192.168.200.0/24"
gateway="192.168.200.1"
nameserver="8.8.8.8"
pool=("192.168.200.100" "192.168.200.199")
private=("192.168.101.0/24" "192.168.102.0/24")
####

構成スクリプトを実行します。

# ./config.sh

コンピュートノードの構成

コントローラーノードからネットワーク経由で構成します。コンピュートノードの外部接続用IPアドレスを指定して実行します。

# cd ~/quickrdo
# ./add_compute.sh 192.168.200.91
...
Are you sure you want to continue connecting (yes/no)? <=== yes [enter]
...
root@192.168.200.91's password: <=== コンピュートノードのroot pw

もうひとつのコンピュートノードも同様に構成します。

# cd ~/quickrdo
# ./add_compute.sh 192.168.200.92
...
Are you sure you want to continue connecting (yes/no)? <=== yes [enter]
...
root@192.168.200.92's password: <=== コンピュートノードのroot pw

ここで最後に、コントローラーノードを再起動すれば完了です。

# reboot

構成されるテナント環境は、下記と同じものになります。

enakai00.hatenablog.com