🔰 はじめに
Red Hat OpenStack Platform 13(以下、RHOSP13)は、OpenStack QueensベースのRed Hatによる商用ディストリビューションであり、かつてはオンプレミスやプライベートクラウド環境で利用されていました。
現在では、RHOSP16やRHOSP17といったより新しいバージョンが主流となっております。しかし、TripleOによるデプロイメントの時代も終焉を迎えつつあり、Red Hat OpenStack Services on OpenShift(RHOSO)が新たな標準として台頭してきました。
本記事では、あえて時代に逆行し、 RHOSP13を用いた最小構成のOpenStackクラウドを構築する手順 をまとめています。
RHOSP13/16の初期設計構築から携わってきましたが、現在手元にあるのは旧RHOSP13向けの構築用リポジトリ資材しかないため、自宅検証環境ではこの構成でしか再現できないという、切ない事情があるからです 😇
RHOSPパッケージが体験版として自由にダウンロードできた時代もありました。
RHOSP13の構成イメージ図
以下は、RHOSP13を使用した自宅検証環境におけるアーキテクチャ構成図です。
RHOSP13の主要コンポーネント
アンダークラウド(Undercloud)とは?
アンダークラウドは、TripleO(OpenStack on OpenStack)方式において、他のOpenStackノード(オーバークラウド)をデプロイ・管理するための専用OpenStack環境です。
いわば「OpenStackを構築するためのOpenStack」であり、構築専用の制御ノードです。
- 役割:オーバークラウドの構成・導入・初期設定を行う
- コンポーネント:主に ironic(ベアメタルプロビジョニング)、heat(テンプレートベースの構成管理)、nova などの限定的なサービスが動作
- CLIツール:OpenStack Director(ダイレクタ)でオーバークラウド構成・展開操作を実施
オーバークラウド(Overcloud)とは?
オーバークラウドは、ユーザーが実際に利用するOpenStackクラウド環境です。
アンダークラウドを通じて構築され、コントローラー、コンピュート、ストレージ等の役割を持つ複数のノード群で構成されます。
- 役割:仮想マシン、ストレージ、ネットワークなどクラウドとしての機能を提供
- コンポーネント:keystone, nova, neutron, glance, cinder, horizon などが動作
- 利用者:クラウド利用者やアプリケーション開発者が接続して利用
・アンダークラウド自身はあくまでオーバークラウド管理用になります。
・TripleO環境では、Heatテンプレートを駆使してオーバークラウドを定義します。
🧱 構成概要
ノード構成
最小要件をさらに下回る構成ですがなんとか動作可能な範囲です。
CPUとメモリはあればあるだけ安定します。
表1.基本情報
サーバ種別 | CPU (core) | メモリ (GB) | HDD (GB) | ホスト名 |
---|---|---|---|---|
リポジトリサーバ | 1 | 1 | 40 | CentOS7Repo |
KVMホストサーバ (アンダークラウド用) |
3 | 10 | 50 | Undercloud-KVM |
アンダークラウド | 2 | 8 | 40 | undercloud-node |
KVMホストサーバ (オーバークラウド用) |
8 | 24 | 100 | Overcloud-KVM |
コントローラーノード | 1 | 8 | 40 | overcloud-ctrl |
コンピュートノード | 1 | 8 | 40 | overcloud-comp |
表2.ネットワーク情報
サーバ種別 | ホスト接続 IP | プロビ IP | コンテナPull IP |
---|---|---|---|
リポジトリサーバ | 192.168.1.79 | ||
KVMホストサーバ (アンダークラウド用) |
192.168.1.80 | 192.168.100.1 | 192.168.1.82 |
アンダークラウド | 192.168.1.84 | 192.168.100.3 | |
KVMホストサーバ (オーバークラウド用) |
192.168.1.81 | 192.168.100.2 | 192.168.1.83 |
コントローラーノード | 192.168.1.85 | 192.168.100.5 | |
コンピュートノード | 192.168.1.x | 192.168.100.x |
1. リポジトリサーバの作成
RHOSP13用のパッケージを提供するリポジトリサーバを構築します。
インターネット経由でRedHatリポジトリに接続してRHOSPをセットアップする方法もありますが、今回はオフライン環境用としてセットアップします。
1.1 仮想マシン作成
VMware Workstation Playerを使用して、以下の仮想マシンを作成します。
リポジトリサーバ
- ホスト名:CentOS7Repo
- OS:CentOS 7 Minimalインストール
- ブリッジNIC(ens33):IP 192.168.1.79/24:GW/DNS 192.168.1.1
- CPU/メモリ/HDD:1core/1GB/40GB
1.2 YUM リポジトリの設定
以下の内容で /etc/yum.repos.d/CentOS-Base.repo を設定します。
cat <<EOF > /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://vault.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://vault.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://vault.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
EOF
システム更新とDockerレジストリにサービスをインストールします。
# システムを最新状態に更新
yum clean all
yum update -y
# Dockerレジストリのインストール
yum install docker-distribution
# Dockerレジストリサービスの起動と自動起動設定
systemctl start docker-distribution.service
ystemctl enable docker-distribution.service
レジストリ設定ファイル /etc/docker-distribution/registry/config.yml を以下のように設定します。
version: 0.1
log:
fields:
service: registry
storage:
cache:
layerinfo: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
1.3 Docker イメージ資材の展開
事前に RHOSP13 リポジトリ資材をオンラインから取得して docker.tar.gz に圧縮しています。
これを /root に転送後、以下の手順で展開・配置します。
# 事前に準備したDockerイメージ資材を展開
tar xzf docker.tar.gz
# レジストリの保存ディレクトリに配置
cp -pr docker /var/lib/registry/
# レジストリが正しく動作しているかを確認
curl http://localhost:5000/v2/_catalog
Apache HTTP リポジトリの構築
# VMware Toolsのインストール
yum -y install open-vm-tools
# ローカルYUMリポジトリツールのインストール
yum -y install httpd createrepo
# Firewalld停止・無効化
systemctl stop firewalld
systemctl disable firewalld
# SELinux無効化(再起動後に有効)
sed -i s/SELINUX=enforcing/SELINUX=disabled/ /etc/selinux/config
リポジトリディレクトリの作成と権限設定
mkdir -p /var/www/repos
chmod -R 755 /var/www/repos
リポジトリ資材の展開
# 不要となったDocker資材アーカイブを削除
rm docker.tar.gz
# 各種リポジトリ資材を /var/www/repos に展開
tar xzf rhel-ha-for-rhel-7-server-rpms.tgz -C /var/www/repos
tar xzf rhel-7-server-extras-rpms.tgz -C /var/www/repos
tar xzf rhel-7-server-rh-common-rpms.tgz -C /var/www/repos
tar xzf rhel-7-server-rpms.tgz -C /var/www/repos
tar xzf rhel-7-server-openstack-13-rpms.tgz -C /var/www/repos
createrepo によるメタデータ生成
# 各リポジトリディレクトリに対して createrepo を実行
createrepo /var/www/repos/rhel-7-server-extras-rpms/
createrepo /var/www/repos/rhel-7-server-openstack-13-rpms/
createrepo /var/www/repos/rhel-7-server-rh-common-rpms/
createrepo /var/www/repos/rhel-7-server-rpms/
createrepo /var/www/repos/rhel-ha-for-rhel-7-server-rpms/
1.4 Apache の設定
/etc/httpd/conf.d/repos.conf を作成
Alias /repos /var/www/repos
<directory /var/www/repos>
Options +Indexes
Require all granted
</directory>
Apache サービスの起動と自動起動設定
systemctl restart httpd
systemctl enable httpd
この構成により、内部ネットワーク上で RHOSP13 向けのローカル YUM リポジトリと Docker レジストリを提供できます。
2. KVMホストの作成
2.1 仮想マシンのOSインストール
VMware Workstation Playerを使用して、以下の仮想マシンを作成します。
KVMホストサーバ(アンダークラウド用)
- ホスト名:Undercloud-KVM
- OS:Red Hat Enterprise Linux 7.6 Minimalインストール
- ブリッジNIC(ens33):IP 192.168.1.80/24:GW/DNS 192.168.1.1
- ブリッジNIC(ens34):後に設定
- ブリッジNIC(ens35):後に設定
- CPU/メモリ/HDD:3core/10GB/50GB
- Intel VT-x 有効化
KVMホストサーバ(オーバークラウド用)
- ホスト名:Overcloud-KVM
- OS:Red Hat Enterprise Linux 7.6 Minimalインストール
- ブリッジNIC(ens33):IP 192.168.1.81/24:GW/DNS 192.168.1.1
- ブリッジNIC(ens34):後に設定
- ブリッジNIC(ens35):後に設定
- CPU/メモリ/HDD:8core/24GB/100GB
- Intel VT-x 有効化
2.2 KVMホストサーバのセットアップ(共通設定)
# RHEL登録(事前にアカウント登録)
subscription-manager register
# SELinux無効化(再起動後に有効)
sed -i s/SELINUX=enforcing/SELINUX=disabled/ /etc/selinux/config
# VMware Toolsインストール(VM環境用)
yum -y install open-vm-tools
# Firewalld停止・無効化
systemctl stop firewalld
systemctl disable firewalld
# 仮想化パッケージのインストール
yum install -y qemu-kvm libvirt virt-install virt-manager bridge-utils
systemctl start libvirtd
systemctl enable libvirtd
2.3 ローカルYUMリポジトリ設定(共通設定)
cat <<EOF > /etc/yum.repos.d/rhosp13.repo
[rhel-7-server-extras-rpms]
name=rhel-7-server-extras-rpms
baseurl=http://192.168.1.79/repos/rhel-7-server-extras-rpms/
gpgcheck=0
enabled=1
[rhel-7-server-openstack-13-rpms]
name=rhel-7-server-openstack-13-rpms
baseurl=http://192.168.1.79/repos/rhel-7-server-openstack-13-rpms/
gpgcheck=0
enabled=1
[rhel-7-server-rh-common-rpms]
name=rhel-7-server-rh-common-rpms
baseurl=http://192.168.1.79/repos/rhel-7-server-rh-common-rpms/
gpgcheck=0
enabled=1
[rhel-7-server-rpms]
name=rhel-7-server-rpms
baseurl=http://192.168.1.79/repos/rhel-7-server-rpms/
gpgcheck=0
enabled=1
[rhel-ha-for-rhel-7-server-rpms]
name=rhel-ha-for-rhel-7-server-rpms
baseurl=http://192.168.1.79/repos/rhel-ha-for-rhel-7-server-rpms/
gpgcheck=0
enabled=1
EOF
2.4 KVM Nested Virtualization設定(共通設定)
KVMでは、Nested Virtualizationを有効にすることで、仮想マシンの中でさらに仮想マシンを動かすことができます。この設定がないとコンピュートノード上でVM作成が失敗します。
設定ファイルを作成する
モジュールロード時に自動でNestedオプションが適用されるように設定ファイルを作成
echo "options kvm_intel nested=1" > /etc/modprobe.d/kvm-nested.conf
モジュールを再読み込みする
設定を即時反映するために、kvm_intelモジュールを一度アンロードして再ロードします。
実行中の仮想マシンがある場合は、事前にすべて停止しておいてください。
modprobe -r kvm_intel
modprobe kvm_intel
設定が反映されたか確認する
Nested Virtualizationが有効になったかを確認するには、次のコマンドを実行します。
出力が Y(Yes)になっていれば、設定成功です。
cat /sys/module/kvm_intel/parameters/nested
2.5 ネットワークブリッジ設定(Undercloud-KVM)
Undercloud-KVMにて、KVMマシン用のネットワークブリッジ設定をします。
プロビジョニングネットワーク設定(ens34 → br-provi)
アンダークラウドのPXEブートやDHCPに使用
cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-ens34
TYPE=Ethernet
BOOTPROTO=none
DEVICE=ens34
ONBOOT=yes
BRIDGE=br-provi
EOF
cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-br-provi
TYPE=Bridge
BOOTPROTO=static
DEVICE=br-provi
ONBOOT=yes
IPADDR=192.168.100.1
NETMASK=255.255.255.0
EOF
管理ネットワーク設定(ens35 → br-mgr)
コンテナPullやリモートアクセス
cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-ens35
TYPE=Ethernet
BOOTPROTO=none
DEVICE=ens35
ONBOOT=yes
BRIDGE=br-mgr
EOF
cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-br-mgr
TYPE=Bridge
BOOTPROTO=static
DEVICE=br-mgr
ONBOOT=yes
IPADDR=192.168.1.82
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
EOF
ネットワーク再読み込みと確認
nmcli connection reload
systemctl restart network
brctl show
2.5 ネットワークブリッジ構成(Overcloud-KVM)
Overcloud-KVMにて、KVMマシン用のネットワークブリッジ設定をします。
プロビジョニングネットワーク設定(ens34 → br-provi)
アンダークラウドのPXEブートやDHCPに使用
cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-ens34
TYPE=Ethernet
BOOTPROTO=none
DEVICE=ens34
ONBOOT=yes
BRIDGE=br-provi
EOF
cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-br-provi
TYPE=Bridge
BOOTPROTO=static
DEVICE=br-provi
ONBOOT=yes
IPADDR=192.168.100.2
NETMASK=255.255.255.0
EOF
管理ネットワーク設定(ens35 → br-mgr)
コンテナPullやリモートアクセス
cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-ens35
TYPE=Ethernet
BOOTPROTO=none
DEVICE=ens35
ONBOOT=yes
BRIDGE=br-mgr
EOF
cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-br-mgr
TYPE=Bridge
BOOTPROTO=static
DEVICE=br-mgr
ONBOOT=yes
IPADDR=192.168.1.83
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
EOF
ネットワーク再読み込みと確認
nmcli connection reload
systemctl restart network
brctl show
3. アンダークラウド仮想環境構築(KVM)
ISOファイルを配置
/tmp/rhel-server-7.6-x86_64-dvd.iso
必要なパッケージをインストール
yum -y install pykickstart
仮想ディスクの作成
qemu-img create -f qcow2 /var/lib/libvirt/images/undercloud-node.qcow2 40G
アンダークラウド Kickstartファイルの作成
ここでは、Red Hat OpenStack Platform(RHOSP)環境におけるアンダークラウド構築用のkickstartファイルを作成します。
以下に、基本的なkickstartファイルの例を示します。必要に応じてカスタマイズしてください。
cat <<EOF > /var/lib/libvirt/images/undercloud-node.cfg
#version=RHEL7
install
cdrom
text
cmdline
skipx
lang en_US.UTF-8
keyboard --vckeymap=jp106 --xlayouts=jp
timezone Asia/Tokyo --isUtc --nontp
# ネットワーク設定
network --bootproto=static --ip=192.168.100.3 --netmask=255.255.255.0 --device=eth0 --onboot=on --activate
network --bootproto=static --ip=192.168.1.84 --netmask=255.255.255.0 --gateway=192.168.1.1 --nameserver=8.8.8.8 --device=eth1 --onboot=on --activate
# パーティション設定
zerombr
bootloader --location=mbr
clearpart --all --initlabel
part / --fstype=xfs --grow --size=1 --asprimary --label=root
rootpw --plaintext vmware
user --name=user --password=vmware
#selinux --disabled
firewall --disabled
firstboot --disable
# パッケージセクション
%packages
%end
# リブート前にDVDを排出する
reboot --eject
EOF
アンダークラウド仮想マシンの作成・起動
virt-install \
--name undercloud-node \
--ram 8192 \
--vcpus 2 \
--os-variant rhel7 \
--disk path=/var/lib/libvirt/images/undercloud-node.qcow2,size=40 \
--location '/tmp/rhel-server-7.6-x86_64-dvd.iso' \
--network bridge=br-provi,model=virtio \
--network bridge=br-mgr,model=virtio \
--initrd-inject /var/lib/libvirt/images/undercloud-node.cfg \
--graphics none \
--extra-args "ks=file:/undercloud-node.cfg console=ttyS0,115200"
※仮想マシン作成後のログインコンソールはCtrl+]で抜けることができる
virsh autostart undercloud-node
3. オーバークラウド仮想環境構築(KVM + VBMC)
ISOファイルを配置
/tmp/rhel-server-7.6-x86_64-dvd.iso
必要なパッケージをインストール
yum -y install pykickstart
仮想ディスクの作成
qemu-img create -f qcow2 /var/lib/libvirt/images/overcloud-ctrl.qcow2 40G
qemu-img create -f qcow2 /var/lib/libvirt/images/overcloud-comp.qcow2 40G
オーバークラウドノードの作成(PXEブート)
各オーバークラウドノードはPXEブートでインストールされるため、起動時にディスクは存在しますがOSは未導入の状態です。
メモリは8GBは欲しい。6GBだとデプロイが処理落ちで失敗することがある。
HDD容量はフレーバーイメージ(40GB)より大きいサイズにしている。
# 仮想マシン作成(コントローラーノード)
virt-install \
--name overcloud-ctrl \
--ram 8192 \
--vcpus 1 \
--os-variant rhel7 \
--disk path=/var/lib/libvirt/images/overcloud-ctrl.qcow2,size=40 \
--network bridge=br-provi,model=virtio,mac=52:54:00:ab:cd:01 \
--network bridge=br-mgr,model=virtio \
--pxe \
--noautoconsole
# 仮想マシン作成(コンピュートノード)
virt-install \
--name overcloud-comp \
--ram 8192 \
--vcpus 2 \
--cpu host-passthrough \
--os-variant rhel7 \
--disk path=/var/lib/libvirt/images/overcloud-comp.qcow2,size=40 \
--network bridge=br-provi,model=virtio,mac=52:54:00:ab:cd:02 \
--network bridge=br-mgr,model=virtio \
--pxe \
--noautoconsole
【なぜ cpu mode='host-passthrough' が必要なのか?】
KVM上に立てたコンピュートノードは「仮想マシン上の仮想マシン」を作ろうとします(Nested Virtualization)。
このとき、コンピュートノードのlibvirt設定で CPUをホストCPUそのまま渡す(host-passthrough) にしておかないと、ゲストVMから見ると仮想化機能(VMX, SVM)が見えず、VMの起動に失敗します。
仮想マシンの自動起動設定
オーバークラウドノード(コントローラ/コンピュート)がホスト起動時に自動起動するよう設定します。
virsh autostart overcloud-ctrl
virsh autostart overcloud-comp
Virtual BMC(VBMC)の設定
仮想マシンに対して IPMI 経由の管理操作を可能にするため、Virtual BMC を設定します。
# 必要なパッケージをインストール
yum -y install python2-virtualbmc python-setuptools ipmitool
それぞれのノードに対して、仮想BMCを登録・起動します。
# Virtual BMC の登録
vbmc add overcloud-ctrl --port 6232 --username admin --password password --address 192.168.100.2
vbmc add overcloud-comp --port 6233 --username admin --password password --address 192.168.100.2
# Virtual BMC の起動
vbmc start overcloud-ctrl
vbmc start overcloud-comp
# 状態確認
vbmc list
上記コマンド実行時に出力される「Exception TypeError: "'NoneType' object is not callable" in ignored」のエラーは無視しても良いです。
後作業のデプロイなどでvbmcがエラーを出力して停止になることがあります。
その時はvbmc startで再起動してください。
アンダークラウド環境セットアップ
リポジトリ設定(アンダークラウド用)
アンダークラウドで使用するリポジトリを、リポジトリサーバ参照用に設定します。
cat <<EOF > /etc/yum.repos.d/rhosp13.repo
[rhel-7-server-extras-rpms]
name=rhel-7-server-extras-rpms
baseurl=http://192.168.1.79/repos/rhel-7-server-extras-rpms/
gpgcheck=0
enabled=1
[rhel-7-server-openstack-13-rpms]
name=rhel-7-server-openstack-13-rpms
baseurl=http://192.168.1.79/repos/rhel-7-server-openstack-13-rpms/
gpgcheck=0
enabled=1
[rhel-7-server-rh-common-rpms]
name=rhel-7-server-rh-common-rpms
baseurl=http://192.168.1.79/repos/rhel-7-server-rh-common-rpms/
gpgcheck=0
enabled=1
[rhel-7-server-rpms]
name=rhel-7-server-rpms
baseurl=http://192.168.1.79/repos/rhel-7-server-rpms/
gpgcheck=0
enabled=1
[rhel-ha-for-rhel-7-server-rpms]
name=rhel-ha-for-rhel-7-server-rpms
baseurl=http://192.168.1.79/repos/rhel-ha-for-rhel-7-server-rpms/
gpgcheck=0
enabled=1
EOF
# キャッシュのクリア
yum clean all
アンダークラウド環境の初期設定
# ホスト名の設定
cat <<EOF > /etc/hostname
undercloud-node.localdomain
EOF
# stack ユーザの作成と sudo 権限付与(パスワードは任意)
useradd stack
passwd stack
echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack
chmod 0440 /etc/sudoers.d/stack
次に stack ユーザーでログインし、作業用ディレクトリを準備&システムを更新します。
su - stack
mkdir ~/images ~/templates
sudo yum update -y
sudo reboot
TripleO クライアントのインストール
アンダークラウドの構成とデプロイを行うために、TripleO クライアントをインストールします。
su - stack
sudo yum install -y python-tripleoclient
python-tripleoclient は、openstack undercloud install や openstack overcloud deploy コマンドなどを提供する TripleO のフロントエンドです。
undercloud.conf の作成
undercloud.conf は、アンダークラウドの構成内容を定義する設定ファイルを作成します。
cat <<EOF > undercloud.conf
[DEFAULT]
# Provisioning ネットワーク(ctlplane)で使用する IP アドレスとインターフェース
local_ip = 192.168.100.3/24
local_interface = eth0
# 管理ネットワークのインターフェース。
undercloud_admin_host = 192.168.1.84
# DNS/NTP 設定
undercloud_nameservers = 8.8.8.8
undercloud_ntp_servers = time.google.com
# インスペクション時の詳細情報収集やUEFI対応
inspection_extras = true
inspection_enable_uefi = true
# オーバークラウド構築で使用するBMC通信のIPMI有効化。
enabled_hardware_types = ipmi
# デバッグログ有効化(任意)
undercloud_debug = true
# インストール中のパッケージ更新
undercloud_update_packages = true
[ctlplane-subnet]
# ctlplane(プロビジョニングネットワーク)の範囲と割り当て範囲
cidr = 192.168.100.0/24
dhcp_start = 192.168.100.10
dhcp_end = 192.168.100.20
inspection_iprange = 192.168.100.21,192.168.100.31
gateway = 192.168.100.3
masquerade = true
EOF
OpenStack Director(ダイレクタ) を構成
以下のコマンドを実行して、Directorを構成します。
LANG=en_US.UTF-8 openstack undercloud install
インストール後、stack ユーザーとしてログインし、環境変数を読み込みます。
exec su -l stack
source ~/stackrc
オーバークラウドのデプロイセットアップ
オーバークラウドイメージの展開
アンダークラウドのstackユーザとして、オーバークラウド用のイメージを準備してアップロードします。
# 必要なパッケージをインストール
sudo yum -y install rhosp-director-images rhosp-director-images-ipa
# イメージの展開ディレクトリを作成・移動
cd ~/images
# tar ファイルを展開
for i in /usr/share/rhosp-director-images/overcloud-full-latest-13.0.tar /usr/share/rhosp-director-images/ironic-python-agent-latest-13.0.tar; do tar -xvf $i; donefor i in /usr/share/rhosp-director-images/*.tar; do tar -xvf $i; done
# オーバークラウドイメージをアップロード
openstack overcloud image upload --image-path /home/stack/images/openstack overcloud image upload --image-path ~/images/
# カレントディレクトリ移動
cd
ノード定義ファイルの作成
オーバークラウドノードのハードウェア情報や BMC(IPMI)設定を記述した定義ファイル instackenv.json を作成します。
cat <<EOF > instackenv.json
{
"nodes": [
{
"name": "overcloud-ctrl",
"pm_type": "ipmi",
"pm_user": "admin",
"pm_password": "password",
"pm_addr": "192.168.100.2",
"pm_port": "6232",
"mac": [
"52:54:00:ab:cd:01"
],
"cpu": "1",
"memory": "8192",
"disk": "40"
},
{
"name": "overcloud-comp",
"pm_type": "ipmi",
"pm_user": "admin",
"pm_password": "password",
"pm_addr": "192.168.100.2",
"pm_port": "6233",
"mac": [
"52:54:00:ab:cd:02"
],
"cpu": "2",
"memory": "8192",
"disk": "40"
}
]
}
EOF
PXEブート用のDHCPサーバは アンダークラウドにより提供されます。
そのため、DHCPサーバ(例:192.168.1.1)が存在する場合は、次のイントロスペクション~デプロイの間だけ一時的に無効化にしてください。
※今回は自宅の家庭用ルータのDHCPサーバ機能を無効にしています。
ノードのインポートとイントロスペクション(ハードウェア検出)
定義ファイルを使ってノードを登録し、ハードウェア情報の収集(イントロスペクション)を実施します。
# ノードをインポート
openstack overcloud node import ~/instackenv.json
# イントロスペクションを実行(--provide により イントロスペクション後に管理状態へ)
openstack overcloud node introspect --all-manageable --provide
各ノードの UUID を確認し、プロパティを設定
# 各ノードの UUID を確認
openstack baremetal node show overcloud-ctrl | grep uuid
openstack baremetal node show overcloud-comp | grep uuid
取得した UUID を使って、各ノードにプロパティを設定します。
# Controller ノードのプロパティを設定
openstack baremetal node set --property capabilities='node:controller-0,profile:control,boot_option:local' <overcloud-ctrlのUUID>
# Compute ノードのプロパティを設定
openstack baremetal node set --property capabilities='node:compute-0,profile:compute,boot_option:local' <overcloud-compのUUID>
テンプレート配置
デプロイ用のテンプレートを配置します。
/home/stack/templates/net-software-config/controller.yaml
heat_template_version: queens
description: >
Software Config to drive os-net-config for the controller role.
parameters:
ControlPlaneIp:
default: ''
description: IP address/subnet on the ctlplane network
type: string
ControlPlaneSubnetCidr:
default: '24'
description: The subnet CIDR of the control plane network.
type: string
ControlPlaneInterfaceDefaultRoute:
default: ''
description: Default route for the control plane network.
type: string
InternalApiIpSubnet:
default: ''
description: IP address/subnet on the internal_api network.
type: string
InternalApiInterfaceDefaultRoute:
default: ''
description: Default route for the internal API network.
type: string
resources:
OsNetConfigImpl:
type: OS::Heat::SoftwareConfig
properties:
group: script
config:
str_replace:
template: { get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh }
params:
$network_config:
network_config:
- type: interface
name: eth0
use_dhcp: false
onboot: true
addresses:
- ip_netmask:
list_join:
- /
- - get_param: ControlPlaneIp
- get_param: ControlPlaneSubnetCidr
routes:
- ip_netmask: 0.0.0.0/0
next_hop: 192.168.100.3
- type: interface
name: eth1
use_dhcp: false
onboot: true
addresses:
- ip_netmask:
get_param: InternalApiIpSubnet
outputs:
OS::stack_id:
description: The OsNetConfigImpl resource.
value: { get_resource: OsNetConfigImpl }
/home/stack/templates/net-software-config/compute.yaml
heat_template_version: queens
description: >
Software Config to drive os-net-config for the controller role.
parameters:
ControlPlaneIp:
default: ''
description: IP address/subnet on the ctlplane network
type: string
ControlPlaneSubnetCidr:
default: '24'
description: The subnet CIDR of the control plane network.
type: string
ControlPlaneInterfaceDefaultRoute:
default: ''
description: Default route for the control plane network.
type: string
InternalApiIpSubnet:
default: ''
description: IP address/subnet on the internal_api network.
type: string
InternalApiInterfaceDefaultRoute:
default: ''
description: Default route for the internal API network.
type: string
resources:
OsNetConfigImpl:
type: OS::Heat::SoftwareConfig
properties:
group: script
config:
str_replace:
template: { get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh }
params:
$network_config:
network_config:
- type: interface
name: eth0
use_dhcp: false
onboot: true
addresses:
- ip_netmask:
list_join:
- /
- - get_param: ControlPlaneIp
- get_param: ControlPlaneSubnetCidr
routes:
- ip_netmask: 0.0.0.0/0
next_hop: 192.168.100.3
- type: interface
name: eth1
use_dhcp: false
onboot: true
addresses:
- ip_netmask:
get_param: InternalApiIpSubnet
outputs:
OS::stack_id:
description: The OsNetConfigImpl resource.
value: { get_resource: OsNetConfigImpl }
/home/stack/templates/custom-env.yaml
parameter_defaults:
GlanceBackend: file
/home/stack/templates/firstboot.yaml
resource_registry:
OS::TripleO::NodeUserData: /usr/share/openstack-tripleo-heat-templates/firstboot/userdata_root_password.yaml
/home/stack/templates/network_data.yaml
# List of networks, used for j2 templating of enabled networks
#
# Supported values:
#
# name: Name of the network (mandatory)
# name_lower: lowercase version of name used for filenames
# (optional, defaults to name.lower())
# service_net_map_replace: if name_lower is set to a custom name this should be set
# to original default (optional). This field is only necessary when
# changing the default network names, not when adding a new custom network.
# enabled: Is the network enabled (optional, defaults to true)
# NOTE: False will use noop.yaml for unused legacy networks to support upgrades.
# vlan: vlan for the network (optional)
# vip: Enable creation of a virtual IP on this network
# ip_subnet: IP/CIDR, e.g. '192.168.24.0/24' or '2001:db8:fd00:1000::/64'
# (optional, may use parameter defaults instead)
# allocation_pools: IP range list e.g. [{'start':'10.0.0.4', 'end':'10.0.0.250'}]
# gateway_ip: gateway for the network (optional, may use parameter defaults)
# ipv6_subnet: Optional, sets default IPv6 subnet if IPv4 is already defined.
# ipv6_allocation_pools: Set default IPv6 allocation pools if IPv4 allocation pools
# are already defined.
# ipv6_gateway: Set an IPv6 gateway if IPv4 gateway already defined.
# ipv6: If ip_subnet not defined, this specifies that the network is IPv6-only.
# NOTE: IP-related values set parameter defaults in templates, may be overridden,
# either by operators, or e.g in environments/network-isolation-v6.yaml where we
# set some default IPv6 addresses.
# compat_name: for existing stack you may need to override the default
# transformation for the resource's name.
#
# Example:
# - name Example
# vip: false
# ip_subnet: '10.0.2.0/24'
# allocation_pools: [{'start': '10.0.2.4', 'end': '10.0.2.250'}]
# gateway_ip: '10.0.2.254'
#
# To support backward compatility, two versions of the network definitions will
# be created, network/<network>.yaml and network/<network>_v6.yaml. Only
# one of these files may be used in the deployment at a time, since the
# parameters used for configuration are the same in both files. In the
# future, this behavior may be changed to create only one file for custom
# networks. You may specify IPv6 addresses for ip_subnet, allocation_pools,
# and gateway_ip if no IPv4 addresses are used for a custom network, or set
# ipv6: true, and the network/<network>.yaml file will be configured as IPv6.
#
# For configuring both IPv4 and IPv6 on the same interface, use two separate
# networks, and then assign both IPs to the same interface in a custom NIC
# configuration templates.
#
# The ordering of the networks below will determine the order in which NICs
# are assigned in the network/config/multiple-nics templates, beginning with
# NIC2, Control Plane is always NIC1.
- name: Storage
vip: true
vlan: 30
name_lower: storage
ip_subnet: '172.16.1.0/24'
allocation_pools: [{'start': '172.16.1.4', 'end': '172.16.1.250'}]
ipv6_subnet: 'fd00:fd00:fd00:3000::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3000::10', 'end': 'fd00:fd00:fd00:3000:ffff:ffff:ffff:fffe'}]
- name: StorageMgmt
name_lower: storage_mgmt
vip: true
vlan: 40
ip_subnet: '172.16.3.0/24'
allocation_pools: [{'start': '172.16.3.4', 'end': '172.16.3.250'}]
ipv6_subnet: 'fd00:fd00:fd00:4000::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4000::10', 'end': 'fd00:fd00:fd00:4000:ffff:ffff:ffff:fffe'}]
- name: InternalApi
name_lower: internal_api
vip: true
vlan: 20
ip_subnet: '172.16.2.0/24'
allocation_pools: [{'start': '172.16.2.4', 'end': '172.16.2.250'}]
ipv6_subnet: 'fd00:fd00:fd00:2000::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2000::10', 'end': 'fd00:fd00:fd00:2000:ffff:ffff:ffff:fffe'}]
- name: Tenant
vip: false # Tenant network does not use VIPs
name_lower: tenant
vlan: 50
ip_subnet: '172.16.0.0/24'
allocation_pools: [{'start': '172.16.0.4', 'end': '172.16.0.250'}]
ipv6_subnet: 'fd00:fd00:fd00:5000::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:5000::10', 'end': 'fd00:fd00:fd00:5000:ffff:ffff:ffff:fffe'}]
- name: External
vip: true
name_lower: external
vlan: 10
ip_subnet: '10.0.0.0/24'
allocation_pools: [{'start': '10.0.0.4', 'end': '10.0.0.250'}]
gateway_ip: '10.0.0.1'
ipv6_subnet: '2001:db8:fd00:1000::/64'
ipv6_allocation_pools: [{'start': '2001:db8:fd00:1000::10', 'end': '2001:db8:fd00:1000:ffff:ffff:ffff:fffe'}]
gateway_ipv6: '2001:db8:fd00:1000::1'
- name: Management
# Management network is enabled by default for backwards-compatibility, but
# is not included in any roles by default. Add to role definitions to use.
enabled: true
vip: false # Management network does not use VIPs
name_lower: management
vlan: 60
ip_subnet: '10.0.1.0/24'
allocation_pools: [{'start': '10.0.1.4', 'end': '10.0.1.250'}]
ipv6_subnet: 'fd00:fd00:fd00:6000::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:6000::10', 'end': 'fd00:fd00:fd00:6000:ffff:ffff:ffff:fffe'}]
/home/stack/templates/network-environment.yaml
resource_registry:
OS::TripleO::Controller::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api_from_pool.yaml
OS::TripleO::Network::InternalApi: /usr/share/openstack-tripleo-heat-templates/network/internal_api.yaml
OS::TripleO::Controller::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api.yaml
OS::TripleO::Compute::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api.yaml
OS::TripleO::Network::Ports::InternalApiVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api.yaml
OS::TripleO::Controller::Net::SoftwareConfig: /home/stack/templates/net-software-config/controller.yaml
OS::TripleO::Compute::Net::SoftwareConfig: /home/stack/templates/net-software-config/compute.yaml
OS::TripleO::Network::Ports::RedisVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml
parameter_defaults:
# ctlplane - プロビジョニングネットワーク
ControlPlaneIpSubnet: 192.168.100.0/24
ControlPlaneSubnetCidr: 24
ControlPlaneInterfaceDefaultRoute: 192.168.100.3
ControlFixedIPs: [{'ip_address':'192.168.100.5'}]
# internal_api - 内部APIネットワーク
InternalApiNetCidr: 192.168.1.0/24
InternalApiIpSubnet: 192.168.1.0/24
InternalApiAllocationPools: []
InternalApiVirtualFixedIPs: [{'ip_address':'192.168.1.85'}]
InternalApiInterfaceDefaultRoute: 192.168.1.84
# コントローラIPマッピング
ControllerIPs:
ctlplane:
- 192.168.100.40
internal_api:
- 192.168.1.43
ComputeIPs:
ctlplane:
- 192.168.100.44
internal_api:
- 192.168.1.44
/home/stack/templates/node-info.yaml
parameter_defaults:
ControllerCount: 1
ComputeCount: 1
ControllerSchedulerHints:
'capabilities:node': 'controller-%index%'
ComputeSchedulerHints:
'capabilities:node': 'compute-%index%'
NtpServer: []
HostnameMap:
overcloud-controller-0: overcloud-ctrl
overcloud-compute-0: overcloud-comp
NovaSchedulerDefaultFilters: "RetryFilter, AvailabilityZoneFilter, ComputeFilter, RamFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, AggregateCoreFilter"
ManageFirewall: False
SshServerOptions:
PasswordAuthentication: 'yes'
GSSAPIAuthentication: 'no'
GSSAPICleanupCredentials: 'no'
/home/stack/templates/nova.yaml
heat_template_version: queens
description: >
Heat template to enable root login with a custom password.
parameters:
NodeRootPassword:
type: string
description: Root password for the node.
resources:
userdata:
type: OS::Heat::MultipartMime
properties:
parts:
- config: {get_resource: enable_root_config}
enable_root_config:
type: OS::Heat::CloudConfig
properties:
cloud_config:
disable_root: false
chpasswd:
list:
- str_replace:
template: "root:PASSWORD"
params:
PASSWORD: {get_param: NodeRootPassword}
expire: false
/home/stack/templates/overcloud_images.yaml
# Generated with the following on 2020-02-19T21:57:45.966382
#
# openstack overcloud container image prepare --namespace=registry.access.redhat.com/rhosp13 --push-destination=192.168.1.79:5000 --prefix=openstack- --tag-from-label {version}-{release} --output-env-file=/home/stack/templates/overcloud_images.yaml --output-images-file /home/stack/local_registry_images.yaml
#
parameter_defaults:
DockerAodhApiImage: 192.168.1.79:5000/rhosp13/openstack-aodh-api:13.0-98.1580118196
DockerAodhConfigImage: 192.168.1.79:5000/rhosp13/openstack-aodh-api:13.0-98.1580118196
DockerAodhEvaluatorImage: 192.168.1.79:5000/rhosp13/openstack-aodh-evaluator:13.0-98.1580118194
DockerAodhListenerImage: 192.168.1.79:5000/rhosp13/openstack-aodh-listener:13.0-97.1580118194
DockerAodhNotifierImage: 192.168.1.79:5000/rhosp13/openstack-aodh-notifier:13.0-100.1580118203
DockerCeilometerCentralImage: 192.168.1.79:5000/rhosp13/openstack-ceilometer-central:13.0-95.1580118162
DockerCeilometerComputeImage: 192.168.1.79:5000/rhosp13/openstack-ceilometer-compute:13.0-97.1580118161
DockerCeilometerConfigImage: 192.168.1.79:5000/rhosp13/openstack-ceilometer-central:13.0-95.1580118162
DockerCeilometerNotificationImage: 192.168.1.79:5000/rhosp13/openstack-ceilometer-notification:13.0-97.1580118156
DockerCinderApiImage: 192.168.1.79:5000/rhosp13/openstack-cinder-api:13.0-104.1580118160
DockerCinderConfigImage: 192.168.1.79:5000/rhosp13/openstack-cinder-api:13.0-104.1580118160
DockerCinderSchedulerImage: 192.168.1.79:5000/rhosp13/openstack-cinder-scheduler:13.0-105.1580118158
DockerCinderVolumeImage: 192.168.1.79:5000/rhosp13/openstack-cinder-volume:13.0-103.1580118158
DockerClustercheckConfigImage: 192.168.1.79:5000/rhosp13/openstack-mariadb:13.0-101.1580117974
DockerClustercheckImage: 192.168.1.79:5000/rhosp13/openstack-mariadb:13.0-101.1580117974
DockerCrondConfigImage: 192.168.1.79:5000/rhosp13/openstack-cron:13.0-106.1580117945
DockerCrondImage: 192.168.1.79:5000/rhosp13/openstack-cron:13.0-106.1580117945
DockerGlanceApiConfigImage: 192.168.1.79:5000/rhosp13/openstack-glance-api:13.0-101.1580118157
DockerGlanceApiImage: 192.168.1.79:5000/rhosp13/openstack-glance-api:13.0-101.1580118157
DockerGnocchiApiImage: 192.168.1.79:5000/rhosp13/openstack-gnocchi-api:13.0-101.1580118213
DockerGnocchiConfigImage: 192.168.1.79:5000/rhosp13/openstack-gnocchi-api:13.0-101.1580118213
DockerGnocchiMetricdImage: 192.168.1.79:5000/rhosp13/openstack-gnocchi-metricd:13.0-100.1580118214
DockerGnocchiStatsdImage: 192.168.1.79:5000/rhosp13/openstack-gnocchi-statsd:13.0-99.1580118214
DockerHAProxyConfigImage: 192.168.1.79:5000/rhosp13/openstack-haproxy:13.0-103.1580117971
DockerHAProxyImage: 192.168.1.79:5000/rhosp13/openstack-haproxy:13.0-103.1580117971
DockerHeatApiCfnConfigImage: 192.168.1.79:5000/rhosp13/openstack-heat-api-cfn:13.0-96.1580118201
DockerHeatApiCfnImage: 192.168.1.79:5000/rhosp13/openstack-heat-api-cfn:13.0-96.1580118201
DockerHeatApiConfigImage: 192.168.1.79:5000/rhosp13/openstack-heat-api:13.0-97.1580118195
DockerHeatApiImage: 192.168.1.79:5000/rhosp13/openstack-heat-api:13.0-97.1580118195
DockerHeatConfigImage: 192.168.1.79:5000/rhosp13/openstack-heat-api:13.0-97.1580118195
DockerHeatEngineImage: 192.168.1.79:5000/rhosp13/openstack-heat-engine:13.0-95.1580118204
DockerHorizonConfigImage: 192.168.1.79:5000/rhosp13/openstack-horizon:13.0-100.1580118136
DockerHorizonImage: 192.168.1.79:5000/rhosp13/openstack-horizon:13.0-100.1580118136
DockerInsecureRegistryAddress:
- 192.168.1.79:5000
DockerIscsidConfigImage: 192.168.1.79:5000/rhosp13/openstack-iscsid:13.0-98.1580117946
DockerIscsidImage: 192.168.1.79:5000/rhosp13/openstack-iscsid:13.0-98.1580117946
DockerKeystoneConfigImage: 192.168.1.79:5000/rhosp13/openstack-keystone:13.0-96.1580118159
DockerKeystoneImage: 192.168.1.79:5000/rhosp13/openstack-keystone:13.0-96.1580118159
DockerMemcachedConfigImage: 192.168.1.79:5000/rhosp13/openstack-memcached:13.0-100.1580117977
DockerMemcachedImage: 192.168.1.79:5000/rhosp13/openstack-memcached:13.0-100.1580117977
DockerMysqlClientConfigImage: 192.168.1.79:5000/rhosp13/openstack-mariadb:13.0-101.1580117974
DockerMysqlConfigImage: 192.168.1.79:5000/rhosp13/openstack-mariadb:13.0-101.1580117974
DockerMysqlImage: 192.168.1.79:5000/rhosp13/openstack-mariadb:13.0-101.1580117974
DockerNeutronApiImage: 192.168.1.79:5000/rhosp13/openstack-neutron-server:13.0-105.1580118143
DockerNeutronConfigImage: 192.168.1.79:5000/rhosp13/openstack-neutron-server:13.0-105.1580118143
DockerNeutronDHCPImage: 192.168.1.79:5000/rhosp13/openstack-neutron-dhcp-agent:13.0-105.1580118157
DockerNeutronL3AgentImage: 192.168.1.79:5000/rhosp13/openstack-neutron-l3-agent:13.0-104.1580118160
DockerNeutronMetadataImage: 192.168.1.79:5000/rhosp13/openstack-neutron-metadata-agent:13.0-106.1580118160
DockerNovaApiImage: 192.168.1.79:5000/rhosp13/openstack-nova-api:13.0-105.1580118157
DockerNovaComputeImage: 192.168.1.79:5000/rhosp13/openstack-nova-compute:13.0-119.1580135596
DockerNovaConductorImage: 192.168.1.79:5000/rhosp13/openstack-nova-conductor:13.0-104.1580118156
DockerNovaConfigImage: 192.168.1.79:5000/rhosp13/openstack-nova-api:13.0-105.1580118157
DockerNovaConsoleauthImage: 192.168.1.79:5000/rhosp13/openstack-nova-consoleauth:13.0-103.1580118160
DockerNovaLibvirtConfigImage: 192.168.1.79:5000/rhosp13/openstack-nova-compute:13.0-119.1580135596
DockerNovaLibvirtImage: 192.168.1.79:5000/rhosp13/openstack-nova-libvirt:13.0-123.1580117946
DockerNovaMetadataImage: 192.168.1.79:5000/rhosp13/openstack-nova-api:13.0-105.1580118157
DockerNovaPlacementConfigImage: 192.168.1.79:5000/rhosp13/openstack-nova-placement-api:13.0-104.1580118162
DockerNovaPlacementImage: 192.168.1.79:5000/rhosp13/openstack-nova-placement-api:13.0-104.1580118162
DockerNovaSchedulerImage: 192.168.1.79:5000/rhosp13/openstack-nova-scheduler:13.0-105.1580135210
DockerNovaVncProxyImage: 192.168.1.79:5000/rhosp13/openstack-nova-novncproxy:13.0-106.1580118158
DockerOpenvswitchImage: 192.168.1.79:5000/rhosp13/openstack-neutron-openvswitch-agent:13.0-105.1580118161
DockerPankoApiImage: 192.168.1.79:5000/rhosp13/openstack-panko-api:13.0-98.1580118197
DockerPankoConfigImage: 192.168.1.79:5000/rhosp13/openstack-panko-api:13.0-98.1580118197
DockerRabbitmqConfigImage: 192.168.1.79:5000/rhosp13/openstack-rabbitmq:13.0-102.1580117973
DockerRabbitmqImage: 192.168.1.79:5000/rhosp13/openstack-rabbitmq:13.0-102.1580117973
DockerRedisConfigImage: 192.168.1.79:5000/rhosp13/openstack-redis:13.0-103.1580118137
DockerRedisImage: 192.168.1.79:5000/rhosp13/openstack-redis:13.0-103.1580118137
DockerSwiftAccountImage: 192.168.1.79:5000/rhosp13/openstack-swift-account:13.0-96.1580118159
DockerSwiftConfigImage: 192.168.1.79:5000/rhosp13/openstack-swift-proxy-server:13.0-98.1580118159
DockerSwiftContainerImage: 192.168.1.79:5000/rhosp13/openstack-swift-container:13.0-99.1580118162
DockerSwiftObjectImage: 192.168.1.79:5000/rhosp13/openstack-swift-object:13.0-96.1580118155
DockerSwiftProxyImage: 192.168.1.79:5000/rhosp13/openstack-swift-proxy-server:13.0-98.1580118159
/home/stack/templates/passwords-environment.yaml
parameter_defaults:
MysqlRootPassword: "password"
NodeRootPassword: "password"
/home/stack/templates/roles_data.yaml
###############################################################################
# File generated by TripleO
###############################################################################
###############################################################################
# Role: Controller #
###############################################################################
- name: Controller
description: |
Controller role that has all the controler services loaded and handles
Database, Messaging and Network functions.
CountDefault: 1
tags:
- primary
- controller
networks:
- InternalApi
# For systems with both IPv4 and IPv6, you may specify a gateway network for
# each, such as ['ControlPlane', 'External']
HostnameFormatDefault: '%stackname%-controller-%index%'
# Deprecated & backward-compatible values (FIXME: Make parameters consistent)
# Set uses_deprecated_params to True if any deprecated params are used.
uses_deprecated_params: True
deprecated_param_extraconfig: 'controllerExtraConfig'
deprecated_param_flavor: 'OvercloudControlFlavor'
deprecated_param_image: 'controllerImage'
deprecated_nic_config_name: 'controller.yaml'
disable_upgrade_deployment: 'True'
ServicesDefault:
- OS::TripleO::Services::Aide
- OS::TripleO::Services::AuditD
- OS::TripleO::Services::CACerts
- OS::TripleO::Services::CertmongerUser
- OS::TripleO::Services::CinderApi
- OS::TripleO::Services::CinderBackendDellPs
- OS::TripleO::Services::CinderBackendDellSc
- OS::TripleO::Services::CinderBackendDellEMCUnity
- OS::TripleO::Services::CinderBackendDellEMCVMAXISCSI
- OS::TripleO::Services::CinderBackendDellEMCVNX
- OS::TripleO::Services::CinderBackendDellEMCXTREMIOISCSI
- OS::TripleO::Services::CinderBackendNetApp
- OS::TripleO::Services::CinderBackendPure
- OS::TripleO::Services::CinderBackendScaleIO
- OS::TripleO::Services::CinderBackendVRTSHyperScale
- OS::TripleO::Services::CinderBackup
- OS::TripleO::Services::CinderHPELeftHandISCSI
- OS::TripleO::Services::CinderScheduler
- OS::TripleO::Services::CinderVolume
- OS::TripleO::Services::Clustercheck
- OS::TripleO::Services::Collectd
- OS::TripleO::Services::Congress
- OS::TripleO::Services::Docker
- OS::TripleO::Services::Etcd
- OS::TripleO::Services::ExternalSwiftProxy
- OS::TripleO::Services::Fluentd
- OS::TripleO::Services::GlanceApi
- OS::TripleO::Services::GlanceRegistry
- OS::TripleO::Services::HAproxy
- OS::TripleO::Services::HeatApi
- OS::TripleO::Services::HeatApiCloudwatch
- OS::TripleO::Services::HeatApiCfn
- OS::TripleO::Services::HeatEngine
- OS::TripleO::Services::Horizon
- OS::TripleO::Services::IpaClient
- OS::TripleO::Services::Ipsec
- OS::TripleO::Services::IronicApi
- OS::TripleO::Services::IronicConductor
- OS::TripleO::Services::IronicPxe
- OS::TripleO::Services::Keepalived
- OS::TripleO::Services::Kernel
- OS::TripleO::Services::Keystone
- OS::TripleO::Services::LoginDefs
- OS::TripleO::Services::ManilaApi
- OS::TripleO::Services::ManilaBackendCephFs
- OS::TripleO::Services::ManilaBackendIsilon
- OS::TripleO::Services::ManilaBackendNetapp
- OS::TripleO::Services::ManilaBackendUnity
- OS::TripleO::Services::ManilaBackendVNX
- OS::TripleO::Services::ManilaBackendVMAX
- OS::TripleO::Services::ManilaScheduler
- OS::TripleO::Services::ManilaShare
- OS::TripleO::Services::Memcached
- OS::TripleO::Services::MetricsQdr
- OS::TripleO::Services::MistralApi
- OS::TripleO::Services::MistralEngine
- OS::TripleO::Services::MistralExecutor
- OS::TripleO::Services::MistralEventEngine
- OS::TripleO::Services::MongoDb
- OS::TripleO::Services::MySQL
- OS::TripleO::Services::MySQLClient
- OS::TripleO::Services::NeutronApi
- OS::TripleO::Services::NeutronBgpVpnApi
- OS::TripleO::Services::NeutronSfcApi
- OS::TripleO::Services::NeutronCorePlugin
- OS::TripleO::Services::NeutronDhcpAgent
- OS::TripleO::Services::NeutronL2gwAgent
- OS::TripleO::Services::NeutronL2gwApi
- OS::TripleO::Services::NeutronL3Agent
- OS::TripleO::Services::NeutronLbaasv2Agent
- OS::TripleO::Services::NeutronLbaasv2Api
- OS::TripleO::Services::NeutronLinuxbridgeAgent
- OS::TripleO::Services::NeutronMetadataAgent
- OS::TripleO::Services::NeutronML2FujitsuCfab
- OS::TripleO::Services::NeutronML2FujitsuFossw
- OS::TripleO::Services::NeutronOvsAgent
- OS::TripleO::Services::NeutronVppAgent
- OS::TripleO::Services::NovaApi
- OS::TripleO::Services::NovaConductor
- OS::TripleO::Services::NovaConsoleauth
- OS::TripleO::Services::NovaIronic
- OS::TripleO::Services::NovaPlacement
- OS::TripleO::Services::NovaScheduler
- OS::TripleO::Services::NovaVncProxy
# - OS::TripleO::Services::Ntp
- OS::TripleO::Services::ContainersLogrotateCrond
- OS::TripleO::Services::OctaviaApi
- OS::TripleO::Services::OctaviaDeploymentConfig
- OS::TripleO::Services::OctaviaHealthManager
- OS::TripleO::Services::OctaviaHousekeeping
- OS::TripleO::Services::OctaviaWorker
- OS::TripleO::Services::OpenDaylightApi
- OS::TripleO::Services::OpenDaylightOvs
- OS::TripleO::Services::OVNDBs
- OS::TripleO::Services::OVNController
- OS::TripleO::Services::Pacemaker
- OS::TripleO::Services::RabbitMQ
- OS::TripleO::Services::Redis
- OS::TripleO::Services::Rhsm
- OS::TripleO::Services::RsyslogSidecar
- OS::TripleO::Services::SaharaApi
- OS::TripleO::Services::SaharaEngine
- OS::TripleO::Services::Securetty
- OS::TripleO::Services::SensuClient
- OS::TripleO::Services::SkydiveAgent
- OS::TripleO::Services::SkydiveAnalyzer
- OS::TripleO::Services::Snmp
- OS::TripleO::Services::Sshd
# - OS::TripleO::Services::SwiftProxy
# - OS::TripleO::Services::SwiftDispersion
# - OS::TripleO::Services::SwiftRingBuilder
# - OS::TripleO::Services::SwiftStorage
- OS::TripleO::Services::Tacker
- OS::TripleO::Services::Timezone
- OS::TripleO::Services::TripleoFirewall
- OS::TripleO::Services::TripleoPackages
- OS::TripleO::Services::Tuned
- OS::TripleO::Services::Vpp
- OS::TripleO::Services::Zaqar
- OS::TripleO::Services::Ptp
###############################################################################
# Role: Compute #
###############################################################################
- name: Compute
description: |
Basic Compute Node role
CountDefault: 1
networks:
- InternalApi
HostnameFormatDefault: '%stackname%-compute-%index%'
RoleParametersDefault:
TunedProfileName: "virtual-host"
# Deprecated & backward-compatible values (FIXME: Make parameters consistent)
# Set uses_deprecated_params to True if any deprecated params are used.
uses_deprecated_params: True
deprecated_param_image: 'NovaImage'
deprecated_param_extraconfig: 'NovaComputeExtraConfig'
deprecated_param_metadata: 'NovaComputeServerMetadata'
deprecated_param_scheduler_hints: 'NovaComputeSchedulerHints'
deprecated_param_ips: 'NovaComputeIPs'
deprecated_server_resource_name: 'NovaCompute'
deprecated_nic_config_name: 'compute.yaml'
disable_upgrade_deployment: True
update_serial: 25
ServicesDefault:
- OS::TripleO::Services::Aide
- OS::TripleO::Services::AuditD
- OS::TripleO::Services::CACerts
- OS::TripleO::Services::CephClient
- OS::TripleO::Services::CephExternal
- OS::TripleO::Services::CertmongerUser
- OS::TripleO::Services::Collectd
- OS::TripleO::Services::ComputeNeutronCorePlugin
- OS::TripleO::Services::ComputeNeutronL3Agent
- OS::TripleO::Services::ComputeNeutronMetadataAgent
- OS::TripleO::Services::ComputeNeutronOvsAgent
- OS::TripleO::Services::Docker
- OS::TripleO::Services::Fluentd
- OS::TripleO::Services::IpaClient
- OS::TripleO::Services::Ipsec
- OS::TripleO::Services::Iscsid
- OS::TripleO::Services::Kernel
- OS::TripleO::Services::LoginDefs
- OS::TripleO::Services::MetricsQdr
- OS::TripleO::Services::MySQLClient
- OS::TripleO::Services::NeutronBgpVpnBagpipe
- OS::TripleO::Services::NeutronLinuxbridgeAgent
- OS::TripleO::Services::NeutronVppAgent
- OS::TripleO::Services::NovaCompute
- OS::TripleO::Services::NovaLibvirt
- OS::TripleO::Services::NovaLibvirtGuests
- OS::TripleO::Services::NovaMigrationTarget
# - OS::TripleO::Services::Ntp
- OS::TripleO::Services::ContainersLogrotateCrond
- OS::TripleO::Services::OpenDaylightOvs
- OS::TripleO::Services::Rhsm
- OS::TripleO::Services::RsyslogSidecar
- OS::TripleO::Services::Securetty
- OS::TripleO::Services::SensuClient
- OS::TripleO::Services::SkydiveAgent
- OS::TripleO::Services::Snmp
- OS::TripleO::Services::Sshd
- OS::TripleO::Services::Timezone
- OS::TripleO::Services::TripleoFirewall
- OS::TripleO::Services::TripleoPackages
- OS::TripleO::Services::Tuned
- OS::TripleO::Services::Vpp
- OS::TripleO::Services::OVNController
- OS::TripleO::Services::OVNMetadataAgent
- OS::TripleO::Services::Ptp
- OS::TripleO::Services::CinderBackendVRTSHyperScale
# - OS::TripleO::Services::CinderVolume
/usr/share/openstack-tripleo-heat-templates/network/ports/internal_api_from_pool.yaml
heat_template_version: 2015-10-15
description: >
Returns an IP from a network mapped list of IPs
parameters:
InternalApiNetName:
description: Name of the internal API network
default: internal_api
type: string
PortName:
description: Name of the port
default: ''
type: string
ControlPlaneIP: # Here for compatibility with noop.yaml
description: IP address on the control plane
default: ''
type: string
IPPool:
default: {}
description: A network mapped list of IPs
type: json
NodeIndex:
default: 0
description: Index of the IP to get from Pool
type: number
InternalApiNetCidr:
default: '172.16.2.0/24'
description: Cidr for the internal API network.
type: string
outputs:
ip_address:
description: internal API network IP
value: {get_param: [IPPool, {get_param: InternalApiNetName}, {get_param: NodeIndex}]}
ip_address_uri:
description: internal API network IP (for compatibility with internal_api_v6.yaml)
value: {get_param: [IPPool, {get_param: InternalApiNetName}, {get_param: NodeIndex}]}
ip_subnet:
description: IP/Subnet CIDR for the internal API network IP
value:
list_join:
- ''
- - {get_param: [IPPool, {get_param: InternalApiNetName}, {get_param: NodeIndex}]}
- '/'
- {str_split: ['/', {get_param: InternalApiNetCidr}, 1]}
node-info.yaml:ノードの割り当て
network-environment.yaml:各ネットワークのIPレンジやサブネット定義
roles_data.yaml:コントローラやコンピュートのロール構成
デプロイコマンド
openstack overcloud deploy --templates \
-e ~/templates/node-info.yaml \
-e ~/templates/overcloud_images.yaml \
-e ~/templates/network-environment.yaml \
-e ~/templates/passwords-environment.yaml \
-e ~/templates/firstboot.yaml \
-e ~/templates/custom-env.yaml \
-r ~/templates/roles_data.yaml \
-n ~/templates/network_data.yaml
数時間後、Completeと出力されたら成功です。
後は、openstackコマンドを活用してオーバークラウド環境を設定してVMを利用できるようにするだけです。
参考:デプロイ失敗したときに使うコマンド集
# オーバークラウド削除処理(Heatスタックおよび関連リソースの削除)
openstack stack delete --yes --wait overcloud # Heat スタックとしての overcloud を削除
openstack overcloud delete overcloud # overcloud 環境を削除(簡易コマンド)
# ベアメタルノードのメンテナンスモード設定(削除前の準備)と削除
openstack baremetal node maintenance set overcloud-ctrl # メンテナンスモードに設定
openstack baremetal node delete overcloud-ctrl overcloud-ctrl # ベアメタルノードの削除
# KVMベースの仮想マシン管理操作
virsh start overcloud-ctrl # 仮想マシン起動
virsh console overcloud-ctrl # 仮想マシンのコンソールへ接続
virsh shutdown overcloud-ctrl # 仮想マシンの停止
virsh destroy overcloud-ctrl # 仮想マシンの強制停止(シャットダウンではない)
virsh undefine overcloud-ctrl # 仮想マシンの定義を削除(ディスクは削除されない)
参考:オーバークラウド環境設定コマンド集
. overcloudrc
sudo yum -y install wget
sudo wget http://download.cirros-cloud.net/0.6.3/cirros-0.6.3-x86_64-disk.img
openstack image create "cirros" --file cirros-0.6.3-x86_64-disk.img --disk-format qcow2 --container-format bare --public
# フレーバー登録
openstack flavor create --id 0 --vcpus 1 --ram 512 --disk 10 m1.small
# ネットワーク作成
openstack network create --no-share --internal --provider-physical-network datacentre --provider-network-type flat sharednet
openstack subnet create --network sharednet --no-dhcp --allocation-pool start=192.168.200.150,end=192.168.200.180 --gateway 192.168.200.1 --subnet-range 192.168.200.0/24 sharedsubnet
おわりに
以上、RHOSP13を利用した自宅検証環境の解説でした。
RHOSPの不満点
・不要なErrorやWarningが多すぎる
構築や保守の過程で何度も悩まされた。本当に抑止すべきものと、無視してよいものの線引きが曖昧すぎる。
・構成変更=基本はオーバークラウド再デプロイ
冪等性の思想は分かるが、わずかな修正でも全体再デプロイを要求されるのは厳しい。
万が一デプロイが失敗したら? …環境ごと吹き飛ぶぞ。
・トラブルシュートが難解すぎる
ログからの調査が一苦労。とりえあず No valid host was found.
のエラーを出しておけばいいと思っているでしょ?
・マイナーな存在であるがゆえにニッチな分野
OpenStack関連の案件は非常に少ない、有識者も限られ、技術情報も乏しい。
RHOSPの良いところ
・多くの技術に触れられてやりがいがある
- OVS / OVN(仮想ネットワーク)
- Python / Ansible(自動化・構成管理)
- MariaDB / Galera Cluster(分散DB)
- Apache / HAProxy / Pacemaker(Web・LB・冗長化)
- QEMU / KVM / libvirt(仮想化基盤)
- Nova / Neutron / Keystone / Glance(OpenStackコンポーネント)
さらに、既存ネットワーク、ストレージの接続やコンピュート上で作成するVM作成、詳細なOS設定も考える必要があるぞ!
・AWS、vSphereなどが素晴らしく見えてくる
まさに相対性理論の証明である。