RDO/TripleOでOpenStack rockyをinstallする(VM編)


はじめに

本記事ではRDO Projectで主にパッケージング・開発されているTripleOを使ってOpenStackをインストールする手順について紹介します。

本記事では以下のことを行ないます。

  • VMを3つ作成(Undercloud用 x 1, Controller node用 x 1, Compute node用 x 1)
  • Undercloudを用意されたqcowイメージで起動
  • UndercloudからController/Computeのインストール

TripleOによるOpenStackインストール概要

TripleOではUndercloudとOvercloudの2つのOpenStackをインストールすることになります。

  • Overcloud
    • 実際に使用するOpenStack環境
  • Undercloud
    • Overcloudをインストールするために作成・使用されるOpenStackです。ironic/heatを使用してOvercloudを作成することになります

構成図

今回の構成は以下のようになります。

  • 物理にLinuxがインストールされて、libvirtがインストール
  • Undercloud VMを作成
    • networkは管理用のインターフェイス(default)とOpenStack用のネットワーク(data1)の2つを作成
  • Overcloud-ctrl (Controller node)とOvercloud-Comp01のVMを作成
    • これについてはVM作成のみで起動・OSインストールはしない
    • ネットワークはdata1のみに接続
    • このVMはUndercloudからのDHCP/PXEでブート予定
  • OpenStack用のネットワーク(data1)はIP Masqueradeで外部に接続

前準備

物理マシンにLinuxをインストールして、libvirt(virsh)が使えるようにしているか確認してください。

Network(data1)の作成

OpenStack用のネットワークを作成します。Undercloud VM側でDHCPサーバを動作させるのでDHCPは無効にしておいて下さい。また作成したLinux Bridgeに対してiptablesの設定を追加しておきます。

$ cat > provision.xml << EOF
<network>
  <name>tripleo-provision</name>
  <uuid>b7eadbab-7e95-487b-be00-8fa7fc679436</uuid>
  <bridge name='tripleo1' stp='off' delay='0'/>
  <mac address='52:54:00:ae:42:07'/>
  <ip address='10.1.1.254' netmask='255.255.255.0'>
  </ip>
</network>
EOF
$ virsh net-create provision.xml
$ virsh net-start tripleo-provision
$ virsh net-autostart tripleo-provision
$ iptables -I FORWARD 1 -i tripleo-provision -j ACCEPT
$ iptables -I FORWARD 1 -o tripleo-provision -j ACCEPT

VirtualBMCのインストール

VMの起動等で使われるVirtualBMCをインストールします。

$ yum install centos-release-openstack-rocky
$ yum install python2-virtualbmc

Overcloud-ctrl, Overcloud-comp1のVMを作成

ここではVMの作成だけ行ないます。起動はTripleOから行なうのでこの時点では電源はOffの状態です。PXEで起動する際にMACアドレスが必要なので、設定してメモをしておくといいでしょう。

$ qemu-img create 41G overcloud-ctrl.qcow2
$ /usr/bin/virt-install \
   --name overcloud-ctrl \
   --ram 6144 --vcpus 2 \
   --os-variant centos7.0 \
   overcloud-ctrl.qcow2 \
   --noautoconsole \
   --network network:data1 --mac=52:54:00:c0:87:36 \
   --cpu host \
   --dry-run --print-xml > overcloud-ctrl.xml
$ virsh define --file overcloud-ctrl.xml

$ qemu-img create 41G overcloud-comp1.qcow2
$ /usr/bin/virt-install \
   --name overcloud-comp1 \
   --ram 6144 --vcpus 2 \
   --os-variant centos7.0 \
   overcloud-comp1.qcow2 \
   --noautoconsole \
   --network network:data1 --mac=52:54:00:c0:87:37 \
   --cpu host \
   --dry-run --print-xml > overcloud-comp1.xml
$ virsh define --file overcloud-comp1.xml

Undercloud用のVMイメージの作成

今回はRDOが用意しているundercloudのVMイメージを使用することでCentOSのインストール等を省略します。RDOのイメージがあるサイト(https://images.rdoproject.org/rocky/rdo_trunk/current-tripleo-rdo/)から以下のファイルをダウンロードします。

  • undercloud.qcow2
  • ironic-python-agent.tar

その後以下のコマンドで必要なファイル(overcloud-full.initrd,overcloud-full.vmlinuz)をqcow2から取得します。

$ yum install libguestfs-tools
$ virt-copy-out -a undercloud.qcow2 /home/stack/overcloud-full.initrd /home/stack/overcloud-full.vmlinuz .

その後に起動のために必要な設定(root password, ネットワーク設定)をqcow2に入れ込みます。ここは自分の環境に合わせてファイルを修正して下さい。

$ cat ifcfg-eth1.undercloud 
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.122.2
NETMASK=255.255.255.0
GATEWAY=192.168.122.1
NM_CONTROLLED=no
DNS1=192.168.122.1
$ virt-customize -a undercloud.qcow2 \
         --run-command 'if [ -f /etc/sysconfig/network-scripts/ifcfg-eth0 ] ; then sed -i s/ONBOOT=.*/ONBOOT=\"no\"/g /etc/sysconfig/network-scripts/ifcfg-eth0; fi' \
         --upload ifcfg-eth1.undercloud:/etc/sysconfig/network-scripts/ifcfg-eth1 \
         --hostname undercloud \
         --root-password password:<PASSWORD> \
         --selinux-relabel

Undercloud VMの起動

それが終わったらUndercloudのVMを起動させます。

$ virt-install --ram 49152 --vcpus 16 --os-variant rhel7 \
    --cpu host --cpuset auto \
    --disk path=./images/undercloud.qcow2,device=disk,bus=virtio,format=raw \
    --boot kernel=./overcloud-full.vmlinuz,initrd=./overcloud-full.initrd,kernel_args="root=/dev/vda" --import  \
    --network network:tripleo1-provision --network network:default \
    --name undercloud

VirtualBMCの設定

起動したVMをUndercloudから操作できるようにVirtualBMCの設定を行ないます。

# vbmc add controller-1 --port 6230  --username admin --password password
# vbmc add compute-1 --port 6231  --username admin --password password
# firewall-cmd --zone=public --add-port=6230/udp # --permanent
# firewall-cmd --zone=public --add-port=6231/udp # --permanent
# firewall-cmd --reload
# vbmc start controller-1
# vbmc start compute-1

Undercloudの設定

ここからUndercloudにログインして作業を行ないます。

$ ssh root@<undercloudのip>

作業用アカウントstackがあらかじめ作成されているのでそのアカウントに移動します。その際にパスワードも設定します。

$ passwd stack
 <パスワードを設定>
$ sudo -iu stack
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
$ ssh-copy-id <undercloudのip>

/usr/share/python-tripleoclient/undercloud.conf.sampleを参考にundercloud.confを作成しundercloudの初期化を行ないます。

$ openstack tripleo container image prepare default \
  --local-push-destination \
  --output-env-file containers-prepare-parameter.yaml
$ vi ~/undercloud.conf
  </usr/share/python-tripleoclient/undercloud.conf.sample を参考にundercloud.confを作成する>
$ openstack undercloud install

Overcloudのインストール準備

Overcloud用イメージの設定

ダウンロードしたイメージをUndercloudに設定します。

$ . stackrc
$ openstack overcloud image upload --image-path .

Controller,Computeノードの登録・設定

”VirtualBMCの設定"で指定したユーザー名・パスワード・ポート、VM起動時に設定したMACアドレスを使ってinstackenv.jsonを作成し、openstack overcloud node import instackenv.jsonコマンドで登録します。その後にそれらのVMの環境をundercloudから使えるようにするためにopenstack overcloud node introspect --all-manageable --provideコマンドを実行します。

$ cat > instackenv.json <<EOF
{
  "nodes": [
    {
      "name": "controller-1",
      "pm_type": "ipmi",
      "mac": [
             "52:54:00:c0:87:36"
      ],
      "pm_user": "admin",
      "pm_password": "password",
      "pm_port": "6230",
      "pm_addr": "<HypervisorのIP>"
    },
    {
      "name": "compute-1",
      "pm_type": "ipmi",
      "mac": [
             "52:54:00:a5:16:62"
      ],
      "pm_user": "admin",
      "pm_password": "password",
      "pm_port": "6231",
      "pm_addr": "<HypervisorのIP>"
    }
  ]
}
$ openstack overcloud node import instackenv.json
$ openstack overcloud node introspect --all-manageable --provide

次にVMとインストールするロールを関連付けします。

$ openstack baremetal node set --property capabilities='profile:control,boot_option:local' $(openstack baremetal node list -f json | jq '.[]| select(.Name=="controller-1") |.UUID' -r)
$ openstack baremetal node set --property capabilities='profile:compute,boot_option:local' $(openstack baremetal node list -f json | jq '.[]| select(.Name=="compute-1") |.UUID' -r)

DNSの設定を行ないます。

$ openstack subnet set $(openstack subnet list -f json | jq '.[0].ID' -r) \
        --dns-nameserver 10.10.160.1

UndercloudのSSL証明書をovercloudに設定するためのファイルと、タイムゾーン等の各種の設定ファイルを作成します。

$ cat > inject-trust-anchor-hiera.yaml <<EOF
parameter_defaults:
  # Map containing the CA certs and information needed for deploying them.
  # Type: json
  CAMap:
    undercloud-ca:
      content: |
        -----BEGIN CERTIFICATE-----
        MIIDjTCCAnWgAwIBAgIQOzHkDsEDSimf4HjKQi9HJTANBgkqhkiG9w0BAQsFADBQ
        ... 省略(/etc/pki/ca-trust/source/anchors/cm-local-ca.pemの中身をインデントして記入)
        8vUQFLbdFCSBMJjuh02VVsmLbwII5TtkJ4D6s2wO4vyZgzakGoivPM/mQenuIdA5
        lg==
        -----END CERTIFICATE-----
EOF
$ cat > node_info.yaml <<EOF
parameter_defaults:
  OvercloudControllerFlavor: control
  OvercloudComputeFlavor: compute
  ControllerCount: 1
  ComputeCount: 1
  TimeZone: 'Japan'
EOF

openstack overcloud deployでController,Computeノードのデプロイを行ないます。

$ openstack overcloud deploy --templates /usr/share/openstack-tripleo-heat-templates \
-e /home/stack/containers-prepare-parameter.yaml \
-e /home/stack/inject-trust-anchor-hiera.yaml \
-e /home/stack/node-info.yaml \
--ntp-server pool.ntp.org --libvirt-type kvm \
--log-file overcloud_deployment_0.log