4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

install_yamls で作る OpenStack in OpenShift

Last updated at Posted at 2024-03-23

はじめに

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

ネットワーク構成は以下の通りです。(一部省略しています)

oco_nw.png

構築手順

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
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 |             |
+--------------------------------------+-------------+-----------+------+-------------+
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?