はじめに
install_yamls は、OpenShift を CRC (Red Hat OpenSHift Local)でインストールし、その環境下で OpenStack をインストールするスクリプト集です。
ローカルコンピューター1台に KVM を利用し、すべての環境を構築できるようになっています。
本記事は、検証環境での構築検証のまとめです。基本的には install_yamls の README に沿って進められますが、前提条件の記載が不足しているので、補いながらまとめていきます。
本記事は 2024年3月時点での内容です。 install_yamls や関連の資材は upstream版であり、開発が活発です。仕様や構築手順が変更される可能性があります。READMEと併せてご参照ください。
動作環境
以下のミニPCで動作検証を行いました。
項目 | 内容 |
---|---|
機種 | Minisforum UM790 Pro |
スペック | 16core, 64GB Mem, 1TB Disk |
OS | CentOS9 Stream (Server GUI) |
構築後の構成
以下のKVM guestが作成されました。
ホスト名 | OS | スペック | 役割 |
---|---|---|---|
crc | CoreOS 4.14 | 12core, 24.4GB Mem, 100GB Disk | OpenShift (CRC) |
edpm-compute-0 | CentOS9-stream | 2core, 3.5GB Mem, 20GB Disk | Computeノード#1 |
edpm-compute-1 | CentOS9-stream | 2core, 3.5GB Mem, 20GB Disk | Computeノード#2 |
ネットワーク構成は以下の通りです。(一部省略しています)
構築手順
Deploy dev env using CRC, edpm nodes with isolated networks に沿って進めていきます。
1. KVMホストをインストールする
CentOS9 Stream を Server GUI でインストールします。
2. パッケージをインストールする
インストールに必要なパッケージをインストールします。
sudo dnf install -y git tar make go-toolset httpd-tools
その他、yq も必要なのですが、リポジトリになさそうだったので、 GitHub から最新のバイナリをダウンロードします。
sudo wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && sudo chmod +x /usr/bin/yq
3. install_yamls をクローンする
git clone https://github.com/openstack-k8s-operators/install_yamls.git
4. Pull secret をダウンロードする
以下のページから Pull secret を入手し、 ~/install_yamls/devsetup/pull-secret.txt に配置します。
5. CRC をインストールする
一般ユーザーで実行することに注意します。
なお、CRCのスペックは KVMホストのスペックに合わせて調整します。
cd install_yamls/devsetup
CPUS=12 MEMORY=25600 DISK=100 make crc
Download bundle の処理で 4.33GiB のファイルをダウンロードするのですが、ここで1時間半くらい掛かりました。気長に待ちましょう。
インストールに成功すると、以下のように出力されます。
(中略)
Started the OpenShift cluster.
The server is accessible via web console at:
https://console-openshift-console.apps-crc.testing
Log in as administrator:
Username: kubeadmin
Password: 12345678
Log in as user:
Username: developer
Password: developer
Use the 'oc' command line interface:
$ eval $(crc oc-env)
$ oc login -u developer https://api.crc.testing:6443
Get "http://unix/api/webconsoleurl": dial unix /home/user/.crc/crc-http.sock: connect: no such file or directory
Login successful.
You have access to 65 projects, the list has been suppressed. You can list all projects with 'oc projects'
Using project "default".
Adding router-ca to system certs to allow accessing the crc image registry/tmp/tls.crt
crc コマンドが使えるようになっています。
$ which crc
~/bin/crc
$ crc -h
CRC is a tool that manages a local OpenShift 4.x cluster optimized for testing and development purposes
Usage:
crc [flags]
crc [command]
Available Commands:
bundle Manage CRC bundles
cleanup Undo config changes
completion Generate the autocompletion script for the specified shell
config Modify crc configuration
console Open the OpenShift Web Console in the default browser
delete Delete the instance
help Help about any command
ip Get IP address of the running OpenShift cluster
oc-env Add the 'oc' executable to PATH
podman-env Setup podman environment
setup Set up prerequisites for using CRC
start Start the instance
status Display status of the OpenShift cluster
stop Stop the instance
version Print version information
Flags:
-h, --help help for crc
--log-level string log level (e.g. "debug | info | warn | error") (default "info")
Use "crc [command] --help" for more information about a command.
6. OCP にログインする
インストール後の案内に従い、 OCP にログインします。
eval $(crc oc-env)
oc login -u kubeadmin -p 12345678 https://api.crc.testing:6443
なお、oc コマンドは ~/.crc/ 配下に配置されています。
$ which oc
~/.crc/bin/oc/oc
7. libvirt のデフォルトネットワークを crc にアタッチする
このネットワークは、vlanを使用してネットワークを分離するためのvlanトランクとして使用されます。
make crc_attach_default_interface
8. EDPMノードを作成する
EDPM_TOTAL_NODES=2 make edpm_compute
インストールに失敗したときは、 make edpm_compute_cleanup
でインスタンスを削除できます。
9. 依存環境を作成する
以下の処理をしているようです:
- PVを12個作成する
- secret/osp-secret を作成する
cd ..
make crc_storage
make input
10. kubectl, kustomize をインストールする
※参考: https://kubernetes.io/ja/docs/tasks/tools/install-kubectl/
curl -LO "https://dl.k8s.io/release/$(curl -LS https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
mv kubectl ~/bin
※参考: https://kubectl.docs.kubernetes.io/installation/kustomize/binaries/
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
mv kustomize ~/bin
11. openstack-operator をインストールする
make openstack
NETWORK_ISOLATION==true
の場合(デフォルト値です)、nmstate と metallb operator をインストールし、nncp 経由で crc VMのセカンダリインターフェースを設定し、datacentre, internalapi, storage, tenant network の network-attachment-definitions を作成します。metallb l2advertisement と ipaddresspools も作成されます。
12. コントロールプレーンをデプロイする
make openstack_deploy
13. EDPM Computeをデプロイする
少し時間をおかないと EDPM_OVN_METADATA_AGENT_NOVA_METADATA_HOST
に値が代入されず、エラーになるので、 oc get pod
を実行して、 pod がすべて起動するまで待ったほうがよさそうです。
$ oc get pod
NAME READY STATUS RESTARTS AGE
ceilometer-794f8dfb7-wgm67 3/3 Running 0 3m30s
cinder-api-85bb466b65-xq5k6 2/2 Running 0 2m12s
cinder-db-create-96rpr 0/1 Completed 0 3m30s
cinder-db-sync-nxdrn 0/1 Completed 0 3m20s
cinder-scheduler-0 2/2 Running 0 2m13s
dnsmasq-dns-747796c7cd-qx2pp 1/1 Running 0 15s
glance-db-create-l2jqq 0/1 Completed 0 4m14s
glance-db-sync-dcrbz 0/1 Completed 0 4m4s
glance-external-api-8484dd969b-jx6n5 2/2 Running 0 3m27s
glance-internal-api-747cc8fb6b-v79m9 2/2 Running 0 3m27s
keystone-8698d99d5d-5npvq 1/1 Running 0 3m29s
keystone-bootstrap-kffnc 0/1 Completed 0 3m45s
keystone-db-create-ntp2s 0/1 Completed 0 4m19s
keystone-db-sync-prrr7 0/1 Completed 0 4m9s
memcached-0 1/1 Running 0 6m15s
neutron-7d4886c7-v5hxc 1/1 Running 0 2m30s
neutron-db-create-hxjmp 0/1 Completed 0 3m30s
neutron-db-sync-rrhd2 0/1 Completed 0 3m20s
nova-api-0 2/2 Running 0 36s
nova-api-db-create-ffpj7 0/1 Completed 0 3m3s
nova-cell0-cell-mapping-kg5h9 0/1 Completed 0 100s
nova-cell0-conductor-0 1/1 Running 0 110s
nova-cell0-conductor-db-sync-6v5t2 0/1 Completed 0 2m52s
nova-cell0-db-create-vg5n4 0/1 Completed 0 3m2s
nova-cell1-cell-mapping-bspng 0/1 Completed 0 58s
nova-cell1-conductor-0 1/1 Running 0 83s
nova-cell1-conductor-db-sync-xj8cg 0/1 Completed 0 99s
nova-cell1-db-create-mrkz8 0/1 Completed 0 3m2s
nova-cell1-novncproxy-0 2/2 Running 0 99s
nova-metadata-0 2/2 Running 0 36s
nova-scheduler-0 1/1 Running 0 37s
openstack-cell1-galera-0 1/1 Running 0 6m13s
openstack-galera-0 1/1 Running 0 6m15s
openstackclient 1/1 Running 0 3m5s
ovn-controller-7zv9s 3/3 Running 0 6m13s
ovn-northd-6f67fc7756-5t5bq 1/1 Running 0 4m49s
ovsdbserver-nb-0 1/1 Running 0 6m13s
ovsdbserver-sb-0 1/1 Running 0 6m11s
placement-78899ccf4-fzjqs 1/1 Running 0 2m51s
placement-db-create-xwtfj 0/1 Completed 0 3m31s
placement-db-sync-zs44j 0/1 Completed 0 3m21s
rabbitmq-cell1-server-0 1/1 Running 0 6m13s
rabbitmq-server-0 1/1 Running 0 6m15s
swift-proxy-9dbcf45bc-jgfq8 3/3 Running 0 3m23s
swift-ring-rebalance-qglpw 0/1 Completed 0 6m10s
swift-storage-0 16/16 Running 0 6m10s
EDPM Computeノードをデプロイします。
DATAPLANE_TOTAL_NODES=2 make edpm_wait_deploy
インストールは *-deployment-*
というpodで処理されます。すべて Completed になっていることを確認します。
$ oc get pod |grep deployment
bootstrap-edpm-deployment-5scnj 0/1 Completed 0 15m
configure-network-edpm-deployment-9r7dc 0/1 Completed 0 8m42s
configure-os-edpm-deployment-drbzd 0/1 Completed 0 7m7s
download-cache-edpm-deployment-5fwjz 0/1 Completed 0 13m
install-certs-edpm-deployment-dqf8n 0/1 Completed 0 5m47s
install-os-edpm-deployment-hm2cg 0/1 Completed 0 7m32s
libvirt-edpm-deployment-gxw5p 0/1 Completed 0 4m33s
neutron-metadata-edpm-deployment-qjz5s 0/1 Completed 0 5m3s
nova-custom-edpm-deployment-884b9 0/1 Completed 0 2m49s
ovn-edpm-deployment-9gz6t 0/1 Completed 0 5m38s
reboot-os-edpm-deployment-jqsdv 0/1 Completed 0 6m6s
repo-setup-edpm-deployment-7v584 0/1 Completed 0 16m
run-os-edpm-deployment-467b7 0/1 Completed 0 6m24s
ssh-known-hosts-edpm-deployment-ghv2b 0/1 Completed 0 6m36s
telemetry-edpm-deployment-hslts 0/1 Completed 0 86s
validate-network-edpm-deployment-s2dnn 0/1 Completed 0 7m43s
14. インストール後、状態を確認する
$ oc rsh openstackclient
sh-5.1$ openstack compute service list
+--------------------------------------+----------------+------------------------+----------+---------+-------+----------------------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+--------------------------------------+----------------+------------------------+----------+---------+-------+----------------------------+
| bedc1cfa-66a7-47d0-8c45-3363f414b65e | nova-conductor | nova-cell1-conductor-0 | internal | enabled | up | 2023-09-12T15:18:50.000000 |
| f2167a17-63f9-4446-9945-7eb00421ce81 | nova-compute | edpm-compute-0 | nova | enabled | up | 2023-09-12T15:18:48.000000 |
| 7e66f39c-6531-4d74-981c-276ac4990a87 | nova-compute | edpm-compute-1 | nova | enabled | up | 2023-09-12T15:18:48.000000 |
| 73a97f9b-04ec-4d62-bf16-0b68ebade238 | nova-conductor | nova-cell0-conductor-0 | internal | enabled | up | 2023-09-12T15:18:48.000000 |
| 48ed632a-b256-4e1e-9574-98bf647a6410 | nova-scheduler | nova-scheduler-0 | internal | enabled | up | 2023-09-12T15:18:53.000000 |
+--------------------------------------+----------------+------------------------+----------+---------+-------+----------------------------+
sh-5.1$ openstack network agent list
+--------------------------------------+------------------------------+--------------------+-------------------+-------+-------+----------------+
| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
+--------------------------------------+------------------------------+--------------------+-------------------+-------+-------+----------------+
| 71324b22-e7fd-49e0-b04e-bc4b4e92b7e8 | OVN Controller Gateway agent | crc-mmwz7-master-0 | | :-) | UP | ovn-controller |
| 245e17de-2269-46f9-bd38-455043336a43 | OVN Controller agent | edpm-compute-0 | | :-) | UP | ovn-controller |
| 5033141f-b343-432c-be22-03bef496d6f6 | OVN Controller agent | edpm-compute-1 | | :-) | UP | ovn-controller |
+--------------------------------------+------------------------------+--------------------+-------------------+-------+-------+----------------+
sh-5.1$ openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+-----------------------------------------------------------------------+
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
+----------------------------------+-----------+--------------+--------------+---------+-----------+-----------------------------------------------------------------------+
| 17bf613824ba4d889aa3c11d4b16e5b3 | regionOne | keystone | identity | True | public | https://keystone-public-openstack.apps-crc.testing |
| 2341a3d8d9844dac98243d16fd8d2b8c | regionOne | barbican | key-manager | True | public | https://barbican-public-openstack.apps-crc.testing |
| 3a53e8e58df0437e81a71d0c3b7313bc | regionOne | swift | object-store | True | internal | http://swift-internal.openstack.svc:8080/v1/AUTH_%(tenant_id)s |
| 5589f47425af4b7a9a075688897402a9 | regionOne | keystone | identity | True | internal | http://keystone-internal.openstack.svc:5000 |
| 5aea23cdb2d54bec82d996236439a4a3 | regionOne | swift | object-store | True | public | https://swift-public-openstack.apps-crc.testing/v1/AUTH_%(tenant_id)s |
| 5b625e00b40c4662813c652fedff8342 | regionOne | cinderv3 | volumev3 | True | public | https://cinder-public-openstack.apps-crc.testing/v3 |
| 647ee83fcc5d45c3bbbe4e440ca3227c | regionOne | cinderv3 | volumev3 | True | internal | http://cinder-internal.openstack.svc:8776/v3 |
| 79c75d68cbc743928e02f0008b96fd65 | regionOne | placement | placement | True | public | https://placement-public-openstack.apps-crc.testing |
| 96219caae0bd47d3a7d0438bec5769e9 | regionOne | glance | image | True | public | https://glance-default-public-openstack.apps-crc.testing |
| a92ad7efcb4442bc9159fba870fe7bf8 | regionOne | neutron | network | True | internal | http://neutron-internal.openstack.svc:9696 |
| a95f75f3cd9a4bffb2eca51e71f2d842 | regionOne | nova | compute | True | internal | http://nova-internal.openstack.svc:8774/v2.1 |
| aec6b9fc0d0c4c81ba2115eef484139e | regionOne | neutron | network | True | public | https://neutron-public-openstack.apps-crc.testing |
| cd9ed82a172c4b779a281bc01ac621e5 | regionOne | nova | compute | True | public | https://nova-public-openstack.apps-crc.testing/v2.1 |
| d5c5612834874dc9966edb4bb23c86cc | regionOne | placement | placement | True | internal | http://placement-internal.openstack.svc:8778 |
| e0320b16d48e415fb68d0082e59a6a5a | regionOne | glance | image | True | internal | http://glance-default-internal.openstack.svc:9292 |
| ea16894b5bd940a687958c5842b1a2cc | regionOne | barbican | key-manager | True | internal | http://barbican-internal.openstack.svc:9311 |
+----------------------------------+-----------+--------------+--------------+---------+-----------+-----------------------------------------------------------------------+
15. 動作確認
edpm_deploy_instance を実行すると、環境にインスタンスを作ってくれます。
cd devsetup
make edpm_deploy_instance
以下のようにインスタンスが作成されました。
$ oc rsh openstackclient openstack server list
+--------------------------------------+------+--------+--------------------------------------+--------+----------+
| ID | Name | Status | Networks | Image | Flavor |
+--------------------------------------+------+--------+--------------------------------------+--------+----------+
| 0254c185-6910-40b6-9822-506065e993f0 | test | ACTIVE | private=192.168.0.21, 192.168.122.20 | cirros | m1.small |
+--------------------------------------+------+--------+--------------------------------------+--------+----------+
$ ping -c4 192.168.122.20
PING 192.168.122.20 (192.168.122.20) 56(84) bytes of data.
64 バイト応答 送信元 192.168.122.20: icmp_seq=1 ttl=63 時間=1.10ミリ秒
64 バイト応答 送信元 192.168.122.20: icmp_seq=2 ttl=63 時間=0.924ミリ秒
64 バイト応答 送信元 192.168.122.20: icmp_seq=3 ttl=63 時間=0.445ミリ秒
64 バイト応答 送信元 192.168.122.20: icmp_seq=4 ttl=63 時間=0.441ミリ秒
--- 192.168.122.20 ping 統計 ---
送信パケット数 4, 受信パケット数 4, 0% packet loss, time 3041ms
rtt min/avg/max/mdev = 0.441/0.726/1.096/0.289 ms
(Optional) Cinder backend (NFS) の設定
ここまでの手順では、Cinder backend の設定がされておらず、実質 Cinder が使えません。
ここでは、KVMホストに NFSサーバーを立ち上げ、Cinder backend として利用することにします。
1. KVMホストに virbr0.21 I/F を作成する
VLAN21 が Storageセグメントのようなので、KVMホストに virbr0.21 I/F を作成します。
sudo nmcli con add type vlan ifname virbr0.21 dev virbr0 id 21 ip4 172.18.0.253/24
2. Cinder用の NFSサーバーを立ち上げる
sudo mkdir -p /var/nfs/cinder
sudo chmod 0777 /var/nfs/cinder
sudo vi /etc/exports
/var/nfs/cinder 172.18.0.0/24(rw,async)
sudo systemctl enable --now rpcbind nfs-server
Firewallの設定も忘れずに……。
sudo firewall-cmd --add-service=nfs
sudo firewall-cmd --list-all
3. NFSサーバー接続シークレットを作成する
mkdir ~/crd
cd ~/crd
vi cinder_nfs.yaml
[nfs]
nas_host=172.18.0.253
nas_share_path=/var/nfs/cinder
シークレットを作成します。
oc create secret generic secret-cinder-nfs --from-file=cinder_nfs.yaml
oc get secret | grep secret-cinder-nfs
4. CRDをコピーし、編集する
install_yamls による OpenStack のインストールで ~/install_yamls/out/openstack/openstack/cr/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml
というファイルができあがっていました。
このファイルを ~/crd にコピーし、編集して適用することにします。
cp ~/install_yamls/out/openstack/openstack/cr/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml ~/crd
cd ~/crd
vi core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml
diff -u ~/install_yamls/out/openstack/openstack/cr/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml ~/crd/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml
--- /home/user/install_yamls/out/openstack/openstack/cr/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml 2024-03-16 17:34:27.575978695 +0900
+++ /home/user/crd/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml 2024-03-22 21:29:01.393182865 +0900
@@ -45,10 +45,19 @@
- storage
replicas: 0 # backend needs to be configured
cinderVolumes:
- volume1:
+ nfs:
+ replicas: 1
networkAttachments:
- storage
- replicas: 0 # backend needs to be configured
+ customServiceConfig: |
+ [nfs]
+ volume_backend_name=nfs
+ volume_driver=cinder.volume.drivers.nfs.NfsDriver
+ nfs_snapshot_support=true
+ nas_secure_file_operations=false
+ nas_secure_file_permissions=false
+ customServiceConfigSecrets:
+ - secret-cinder-nfs
glance:
apiOverrides:
default:
5. 作成した CRD を適用する
oc apply -f core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml
6. 動作確認
cinder-volume-nfs-0 が Running になるのを待ちます。
oc get pod cinder-volume-nfs-0
oc get pod -A | grep cinder
oc describe pod/cinder-volume-nfs-0 -n openstack
OpenStack から見ても認識されています。
$ openstack volume service list
+------------------+-------------------------+------+---------+-------+----------------------------+
| Binary | Host | Zone | Status | State | Updated At |
+------------------+-------------------------+------+---------+-------+----------------------------+
| cinder-scheduler | cinder-scheduler-0 | nova | enabled | up | 2024-03-22T12:33:57.000000 |
| cinder-volume | cinder-volume-nfs-0@nfs | nova | enabled | up | 2024-03-22T12:34:05.000000 |
+------------------+-------------------------+------+---------+-------+----------------------------+
7. Cinder volume の設定
openstack volume type create nfs --description "nfs"
openstack volume type set --property volume_backend_name=nfs nfs
openstack volume type show nfs
最後のコマンドの実行結果は以下のようになりました。
$ openstack volume type show nfs
+--------------------+--------------------------------------+
| Field | Value |
+--------------------+--------------------------------------+
| access_project_ids | None |
| description | nfs |
| id | df8ce72e-5f40-4c28-ac41-f9e789c21338 |
| is_public | True |
| name | nfs |
| properties | volume_backend_name='nfs' |
| qos_specs_id | None |
+--------------------+--------------------------------------+
これで openstack volume create
ができるようになります。
sh-5.1$ openstack volume create --size 1 --type nfs test-volume
+---------------------+--------------------------------------+
| Field | Value |
+---------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| consistencygroup_id | None |
| created_at | 2024-03-23T06:18:56.006320 |
| description | None |
| encrypted | False |
| id | 0a1d7dfd-6a48-4277-846a-cce8d818d800 |
| migration_status | None |
| multiattach | False |
| name | test-volume |
| properties | |
| replication_status | None |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| type | nfs |
| updated_at | None |
| user_id | c4db91aeac6341978b03608769eb5cfe |
+---------------------+--------------------------------------+
sh-5.1$ openstack volume list
+--------------------------------------+-------------+-----------+------+-------------+
| ID | Name | Status | Size | Attached to |
+--------------------------------------+-------------+-----------+------+-------------+
| 0a1d7dfd-6a48-4277-846a-cce8d818d800 | test-volume | available | 1 | |
+--------------------------------------+-------------+-----------+------+-------------+