install_yamls で作る OpenStack in OpenShift

## はじめに

[install_yamls](https://github.com/openstack-k8s-operators/install_yamls) は、OpenShift を [CRC](https://access.redhat.com/documentation/ja-jp/red_hat_codeready_containers/2.0/html/getting_started_guide/introducing-codeready-containers_gsg) （Red Hat OpenShift Local）でインストールし、その環境下で OpenStack をインストールするスクリプト集です。
ローカルコンピューター１台に KVM を利用し、すべての環境を構築できるようになっています。

本記事は、検証環境での構築検証のまとめです。基本的には install_yamls の README に沿って進められますが、前提条件の記載が不足しているので、補いながらまとめていきます。

:::note warn
本記事は 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56678/958db4c5-5286-0697-c9cf-1d19c8c91710.png)

## 構築手順

[Deploy dev env using CRC, edpm nodes with isolated networks](https://github.com/openstack-k8s-operators/install_yamls?tab=readme-ov-file#deploy-dev-env-using-crc-edpm-nodes-with-isolated-networks) に沿って進めていきます。

### 1. KVMホストをインストールする

CentOS9 Stream を Server GUI でインストールします。

### 2. パッケージをインストールする

インストールに必要なパッケージをインストールします。

```bash
sudo dnf install -y git tar make go-toolset httpd-tools
```

その他、yq も必要なのですが、リポジトリになさそうだったので、 [GitHub](https://github.com/mikefarah/yq) から最新のバイナリをダウンロードします。

```bash
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 をクローンする

```bash
git clone https://github.com/openstack-k8s-operators/install_yamls.git
```

### 4. Pull secret をダウンロードする

以下のページから Pull secret を入手し、 ~/install_yamls/devsetup/pull-secret.txt に配置します。

* https://console.redhat.com/openshift/create/local

### 5. CRC をインストールする

一般ユーザーで実行することに注意します。
なお、CRCのスペックは KVMホストのスペックに合わせて調整します。

```bash
cd install_yamls/devsetup
CPUS=12 MEMORY=25600 DISK=100 make crc
```

Download bundle の処理で 4.33GiB のファイルをダウンロードするのですが、ここで１時間半くらい掛かりました。気長に待ちましょう。
インストールに成功すると、以下のように出力されます。

```bash:実行結果例
(中略)
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 コマンドが使えるようになっています。

```bash:実行結果例
$ 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 にログインします。

```bash
eval $(crc oc-env)
oc login -u kubeadmin -p 12345678 https://api.crc.testing:6443
```

なお、oc コマンドは ~/.crc/ 配下に配置されています。
```bash
$ which oc
~/.crc/bin/oc/oc
```

### 7. libvirt のデフォルトネットワークを crc にアタッチする

このネットワークは、vlanを使用してネットワークを分離するためのvlanトランクとして使用されます。

```bash
make crc_attach_default_interface
```

### 8. EDPMノードを作成する

```bash
EDPM_TOTAL_NODES=2 make edpm_compute
```

インストールに失敗したときは、 `make edpm_compute_cleanup` でインスタンスを削除できます。

### 9. 依存環境を作成する

以下の処理をしているようです:

* PVを12個作成する
* secret/osp-secret を作成する

```bash
cd ..
make crc_storage
make input
```

### 10. kubectl, kustomize をインストールする

※参考: https://kubernetes.io/ja/docs/tasks/tools/install-kubectl/
```bash
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/
```bash
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"  | bash
mv kustomize ~/bin
```

:::note info
2025/06/01追記。
公式の README を見ると、 `make download_tools` という手順が追加されていました。
:::

### 11. openstack-operator をインストールする

```bash
make openstack
```

:::note info
`NETWORK_ISOLATION==true` の場合（デフォルト値です）、nmstate と metallb operator をインストールし、nncp 経由で crc VMのセカンダリインターフェースを設定し、datacentre, internalapi, storage, tenant network の network-attachment-definitions を作成します。metallb l2advertisement と ipaddresspools も作成されます。
:::

:::note warn
2025/06/01追記。
`make openstack` 実行の途中で以下のエラーになってしまいました。
```
error: timed out waiting for the condition on nodenetworkconfigurationpolicies/enp6s0-crc
```
下記のバグに抵触している可能性があります。
* [[BUG] [Fedora40][OKD] OpenShift cluster becomes Unreachable · Issue #4234 · crc-org/crc](https://github.com/crc-org/crc/issues/4234)

一時対処として、dnsmasq を unmask すればよいとのことです。
:::

:::note info
2025/06/01追記。
公式の README を見ると、 `make openstack_init` という手順が追加されていました。この手順で operator がデプロイされるようになったようです。
:::

### 12. コントロールプレーンをデプロイする

```bash
make openstack_deploy
```

### 13. EDPM Computeをデプロイする

少し時間をおかないと `EDPM_OVN_METADATA_AGENT_NOVA_METADATA_HOST` に値が代入されず、エラーになるので、 `oc get pod` を実行して、 pod がすべて起動するまで待ったほうがよさそうです。

```bash
$ 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ノードをデプロイします。
```bash
DATAPLANE_TOTAL_NODES=2 make edpm_wait_deploy
```

インストールは `*-deployment-*` というpodで処理されます。すべて Completed になっていることを確認します。
```bash
$ 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. インストール後、状態を確認する

```bash:実行結果例
$ 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 を実行すると、環境にインスタンスを作ってくれます。

```bash
cd devsetup
make edpm_deploy_instance
```
以下のようにインスタンスが作成されました。
```bash:実行結果例
$ 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 を作成します。

```bash
sudo nmcli con add type vlan ifname virbr0.21 dev virbr0 id 21 ip4 172.18.0.253/24
```

### 2. Cinder用の NFSサーバーを立ち上げる

```bash
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)
```
```bash
sudo systemctl enable --now rpcbind nfs-server
```

Firewallの設定も忘れずに……。
```bash
sudo firewall-cmd --add-service=nfs --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
```

### 3. NFSサーバー接続シークレットを作成する

```bash
mkdir ~/cr
cd ~/cr
vi cinder_nfs.yaml
```
```ini:cinder_nfs.yaml
[nfs]
nas_host=172.18.0.253
nas_share_path=/var/nfs/cinder
```
シークレットを作成します。
```bash
oc create secret generic secret-cinder-nfs --from-file=cinder_nfs.yaml
oc get secret | grep secret-cinder-nfs
```

### 4. CRをコピーし、編集する

install_yamls による OpenStack のインストールで `~/install_yamls/out/openstack/openstack/cr/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml` というファイルができあがっていました。
このファイルを ~/cr にコピーし、編集して適用することにします。

```bash
cp ~/install_yamls/out/openstack/openstack/cr/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml ~/cr
cd ~/cr
vi core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml
diff -u ~/install_yamls/out/openstack/openstack/cr/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml ~/cr/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml 
```
```diff
--- /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/cr/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. 作成した CR を適用する

```bash
oc apply -f core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml 
```

### 6. 動作確認

cinder-volume-nfs-0 が Running になるのを待ちます。

```bash
oc get pod cinder-volume-nfs-0
oc get pod -A | grep cinder
oc describe pod/cinder-volume-nfs-0 -n openstack
```

OpenStack から見ても認識されています。

```bash:実行結果例
$ 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 の設定

```bash
openstack volume type create nfs --description "nfs"
openstack volume type set --property volume_backend_name=nfs nfs
openstack volume type show nfs
```

最後のコマンドの実行結果は以下のようになりました。

```plaintext:実行結果例
$ 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` ができるようになります。

```bash:実行結果例
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 |             |
+--------------------------------------+-------------+-----------+------+-------------+
```