1ノードRHOSP 16.0(Red Hat OpenStack Platform)構築に少しハマったので構築メモを作っておきます。
RHOSP 16.2をインストールする場合は以下を参照ください。
環境情報
ここでは、vSphere環境に作成したVMで1ノードOSP構成を構築していきます。
項目 | 内容 |
---|---|
OS | RHEL 8.1 |
vCPU | 4コア |
メモリー | 8GB |
HDD | 100GB |
vNIC | 2 |
もし、RHEL8.1のインストールイメージが無い場合は以下からダウンロードしてください。
OSP構築
ホスト名変更
FQDNのホスト名をセットします。
1 2 |
# hostnamectl set-hostname all-in-one.homelab |
hostsの修正
DNSを使用しない場合は /etc/hosts
で名前解決出来るように追加します。
1 2 |
$ vi /etc/hosts |
1 2 |
192.168.10.87 all-in-one.homelab |
stackユーザー作成、sudo設定
構築作業はstackユーザーで実施するためユーザー追加とsudo設定をします。
1 2 3 4 5 |
# useradd stack # passwd stack # echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack # chmod 0440 /etc/sudoers.d/stack |
上記設定後にstackユーザーにスイッチします。
1 2 3 4 |
# su - stack $ whoami stack |
サブスクリプション登録(1)、podmanインストール
1ノードOSPはRHEL8.1が前提となりますが、8.1の状態でインストールできるpodmanでは以下のバグでインスタンス起動時にSELinuxでブロックされ動作しません。
そこで、一旦8.2でサブスクリプションを登録してpodmanをインストールしてから再度8.1で登録し直します。
1 2 3 4 5 6 |
$ sudo subscription-manager register --auto-attach --release=8.2 $ sudo dnf -y install podman $ podman --version podman version 1.9.3 $ sudo subscription-manager unregister |
本来、サブスクリプションを再登録しなくてもreleaseのバージョンを変えるだけでいいのですが、今回の8.1の場合以下のエラーが発生するためです。
もし、1.9.3未満でインストールして動作させる場合は $ sudo setenforce 0
を実行してください。
サブスクリプション登録(2)
サブスクリプション登録をします。
アンダーグラウンドはRHEL8.1にロックします。
1 2 |
$ sudo subscription-manager register --auto-attach --release=8.1 |
必要なリポジトリの有効化
dnf-utils
をインストールした後に必要なリポジトリのみ有効化します。
1 2 3 4 5 6 7 8 9 10 11 |
$ sudo dnf install -y dnf-utils $ sudo subscription-manager repos --disable=* $ sudo subscription-manager repos \ --enable=rhel-8-for-x86_64-baseos-rpms \ --enable=rhel-8-for-x86_64-appstream-rpms \ --enable=rhel-8-for-x86_64-highavailability-eus-rpms \ --enable=ansible-2.8-for-rhel-8-x86_64-rpms \ --enable=openstack-16-for-rhel-8-x86_64-rpms \ --enable=fast-datapath-for-rhel-8-x86_64-rpms \ --enable=rhel-8-for-x86_64-highavailability-rpms |
TripleOインストール
TripleOのコマンドラインツールをインストールします。
1 2 |
$ sudo dnf install -y python3-tripleoclient |
環境構築用の設定ファイル生成
コンテナ用ファイルの生成、設定
以下のコマンドを実行してコンテナ用の設定ファイルを生成します。
1 2 |
$ openstack tripleo container image prepare default --output-env-file $HOME/containers-prepare-parameters.yaml |
生成したファイルを修正します。
1 2 |
$ vi containers-prepare-parameters.yaml |
ContainerImageRegistryCredentials
以下を追加してください。
<USERNAME>
と <PASSWORD>
は registry.redhat.io
にログインできるアカウントのものを指定してください。
1 2 3 4 5 6 7 |
parameter_defaults: (snip) ContainerImageRegistryCredentials: registry.redhat.io: <USERNAME>: "<PASSWORD>" ContainerImageRegistryLogin: true |
スタンドアローン用設定ファイルの生成、設定
管理用NWの設定を環境変数にセットしてから、以下のコマンドを実行してスタンドアローン用の設定ファイルを生成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ export IP=192.168.25.20 $ export NETMASK=24 $ export INTERFACE=ens224 $ cat <<EOF > $HOME/standalone_parameters.yaml parameter_defaults: CloudName: $IP CloudDomain: <CLOUD_DOMAIN> ControlPlaneStaticRoutes: [] Debug: true DeploymentUser: $USER DnsServers: - 1.1.1.1 - 8.8.8.8 DockerInsecureRegistryAddress: - $IP:8787 NeutronPublicInterface: $INTERFACE NeutronDnsDomain: localdomain NeutronBridgeMappings: datacentre:br-ctlplane NeutronPhysicalBridge: br-ctlplane StandaloneEnableRoutedNetworks: false StandaloneHomeDir: $HOME StandaloneLocalMtu: 1500 EOF |
生成したファイルを修正します。
1 2 |
$ vi standalone_parameters.yaml |
<CLOUD_DOMAIN>
を修正し StandaloneExtraConfig
以下を追加します。
1 2 3 4 5 6 7 |
parameter_defaults: CloudName: 192.168.25.20 CloudDomain: all-in-one.homelab (snip) StandaloneExtraConfig: NovaComputeLibvirtType: qemu |
OCPデプロイ準備
OCPをデプロイする前にシステムのアップデートと再起動を実行します。
1 2 3 |
$ sudo dnf -y update $ sudo reboot |
再起動後にstackユーザーでログインします。
1 2 |
$ ssh stack@<IP or FQDN> |
コンテナレジストリにログイン
podmanで registry.redhat.io
にログインします。
1 2 |
$ sudo podman login registry.redhat.io |
OSPデプロイ実行
管理NWの環境変数を設定後にOSPデプロイのコマンドを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ export IP=192.168.25.20 $ export NETMASK=24 $ export INTERFACE=ens224 $ sudo openstack tripleo deploy \ --templates \ --local-ip=$IP/$NETMASK \ -e /usr/share/openstack-tripleo-heat-templates/environments/standalone/standalone-tripleo.yaml \ -r /usr/share/openstack-tripleo-heat-templates/roles/Standalone.yaml \ -e $HOME/containers-prepare-parameters.yaml \ -e $HOME/standalone_parameters.yaml \ --output-dir $HOME \ --standalone |
(マシンスペックによりますが)デプロイに3,40分程度かかるので待ちます。
デプロイが問題なく環境したら以下のメッセージが表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
######################################################## Deployment successful! ######################################################## ########################################################## Useful files: The clouds.yaml file is at ~/.config/openstack/clouds.yaml Use "export OS_CLOUD=standalone" before running the openstack command. ########################################################## Writing the stack virtual update mark file /var/lib/tripleo-heat-installer/update_mark_standalone |
SSHの設定
デプロイ後は、SSHのパスワード、Rootログインが禁止になっているため必要であれば設定変更をします。
1 2 |
$ sudo vi /etc/ssh/sshd_config |
以下のように修正します。
1 2 3 4 5 |
(snip) PasswordAuthentication yes PermitRootLogin yes (snip) |
SSHサービスを再起動します。
1 2 |
$ sudo systemctl restart sshd |
OSP動作確認
Endpointの確認
以下のコマンドを実行してエンドポイントのリストが表示されるか確認します。
1 2 3 4 5 6 7 8 9 10 |
$ export OS_CLOUD=standalone $ openstack endpoint list +----------------------------------+-----------+--------------+--------------+---------+-----------+-------------------------------------------------+ | ID | Region | Service Name | Service Type | Enabled | Interface | URL | +----------------------------------+-----------+--------------+--------------+---------+-----------+-------------------------------------------------+ | 0c3e4c8b4e5e40b58e6c44df4452bf14 | regionOne | cinderv3 | volumev3 | True | public | http://192.168.25.20:8776/v3/%(tenant_id)s | | 0fa0b73fd3d34a6fba3cc1b7b2c2b156 | regionOne | cinderv3 | volumev3 | True | admin | http://192.168.25.20:8776/v3/%(tenant_id)s | | 130c123917ec4280aa3912e76aec2b8c | regionOne | keystone | identity | True | public | http://192.168.25.20:5000 | (snip) |
イメージの作成
ここでは、動作確認用として CirrOS
を使用します。
CirrOSのイメージは以下からダウンロードできます。
イメージをダウンロードして作成します。
1 2 3 |
$ curl -L http://download.cirros-cloud.net/0.5.2/cirros-0.5.2-x86_64-disk.img -O $ openstack image create cirros --public --file cirros-0.5.2-x86_64-disk.img --disk-format qcow2 --container-format bare |
ルーター作成
テスト用のルーターを作成します。
1 2 |
$ openstack router create test |
ネットワーク作成
テスト用のネットワークを作成します。
1 2 3 |
$ openstack network create test-network $ openstack subnet create --network test-network --gateway 192.168.37.1 --subnet-range 192.168.37.0/24 test-subnet |
ルーターにインターフェース追加
ルーターにインターフェースを追加してサブネットを紐付けます。
1 2 |
$ openstack router add subnet test test-subnet |
フレーバー追加
フレーバーを追加します。
1 2 |
$ openstack flavor create small --vcpus 1 --ram 2048 --disk 10 |
VM作成
VMに接続するネットワークIDを確認します。
1 2 3 4 5 6 7 |
$ openstack network list +--------------------------------------+--------------+--------------------------------------+ | ID | Name | Subnets | +--------------------------------------+--------------+--------------------------------------+ | 92475672-a394-4737-a5cf-6daf30d4bc37 | test-network | 121193f6-f8f6-419b-a98c-ed696d52f270 | +--------------------------------------+--------------+--------------------------------------+ |
以下のコマンドを実行してVMを作成します。
1 2 |
[root@controller01 ~]$ openstack server create --flavor small --image cirros --nic net-id=92475672-a394-4737-a5cf-6daf30d4bc37 test-vm |
作成したVMの Status
が ACTIVE
になっていることを確認します。
1 2 3 4 5 6 7 |
$ openstack server list +--------------------------------------+---------+--------+----------------------------+--------+--------+ | ID | Name | Status | Networks | Image | Flavor | +--------------------------------------+---------+--------+----------------------------+--------+--------+ | b450b2bb-eebe-40c2-9455-57e02e21b451 | test-vm | ACTIVE | test-network=192.168.37.86 | cirros | small | +--------------------------------------+---------+--------+----------------------------+--------+--------+ |
VMを削除します。
1 2 |
$ openstack server delete test-vm |
これで、オールインワンOSPの構築は終わりです。
Horizonにアクセスする場合は管理アドレス(ここでは http://192.168.25.20
)にブラウザからアクセスしてください。
パスワードは以下から確認可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ cat .config/openstack/clouds.yaml clouds: standalone: auth: auth_url: http://192.168.25.20:5000 password: cwIuyTWZ2zOUfShU9gwmQmhVA project_domain_name: Default project_name: admin user_domain_name: Default username: admin identity_api_version: '3' region_name: regionOne |