Nutanix CSI Driver の PV として Nutanix Volumes の Volume Group(VG)を使用していると、Kubernetes ノードの強制削除などの際に、プロビジョニングされた VG が残ってしまうことがあります。Nutanix CSI Driver では VG の Description に Kubernetes 関連の情報が記載されるので、VG 整理のために Nutanix v4 API で取得してみます。
今回の内容です。
Nutanix CSI Driver の動的プロビジョニングによる VG の様子
Nutanix CSI Driver で動的プロビジョニングされた VG は、PVC と同名(pvc-~)になっています。

そして VG の Description には、PV に関連する Kubernetes の情報が記載されます。

v4 API(Nutanix Volumes APIs)での VG 情報取得
API リファレンスは、下記のあたりです。ちなみに今回の Prism Central では、v4.2 には未対応なので、v4.0 を使用します。
今回は、Linux マシンの curl を使用します。まず、コマンドをコピー & ペーストで実行しやすいように、Prism Central への接続情報を変数に格納しておきます。
USER=admin PASS='パスワード' PC="Prism Central のアドレス"
curl コマンドで情報を取得し、jq コマンドでフィルタリングします。
curl -k -s -X GET \ --url "https://$PC:9440/api/volumes/v4.0/config/volume-groups" \ -H 'Accept: application/json' \ -u "$USER:$PASS" | jq -r .data[] | jq -r '.| {name:.name, "extId":.extId, "description":.description}'
実際に実行すると、下記のようになります。description にある Kubernetes のリソース名を手掛かりとして、不要になった VG を識別することになります。
$ curl -k -s -X GET \ --url "https://$PC:9440/api/volumes/v4.0/config/volume-groups" \ -H 'Accept: application/json' \ -u "$USER:$PASS" | jq -r .data[] | jq -r '.| {name:.name, "extId":.extId, "description":.description}' { "name": "pvc-2ea82de2-cc64-4e95-b0aa-bd8b2215fe87", "extId": "1ee97388-d49f-448b-abcd-df41178b3357", "description": "FS:ext4, PVC:prometheus-k8s-db-prometheus-k8s-0, NS:ntnx-system, POD:prometheus-k8s-0, SA:prometheus-k8s" } { "name": "pvc-ba227b7b-83fc-4ab5-904d-766bb97a63e0", "extId": "6751101e-4a91-4ac2-aa7e-dbc092825853", "description": "FS:ext4, PVC:cape, NS:ntnx-base, POD:cape-d4c89c577-7zd5k, SA:pgo-pg" } { "name": "pvc-3142aec2-06e4-4dce-b08c-868d2a6b8aed", "extId": "072d7c90-5f5e-4932-a920-64000032a178", "description": "FS:ext4, PVC:cape-pgbr-repo, NS:ntnx-base, POD:cape-backrest-shared-repo-d8f6dbb89-4mhxn, SA:pgo-default" } { "name": "pvc-46559a0c-fa53-4d9b-b696-7486874238f9", "extId": "d89af827-d762-4c2f-8413-036753bdf38e", "description": "FS:ext4, PVC:objects-lite-volume-objects-lite-0, NS:pc-platform-nci, POD:objects-lite-0, SA:default" } { "name": "pvc-431ad1c5-cb2b-44fa-ba45-fb6174b83af4", "extId": "fed2a3d7-0698-43cf-a30e-b9edadef04a6", "description": "FS:ext4, PVC:prometheus-k8s-db-prometheus-k8s-0, NS:ntnx-system, POD:prometheus-k8s-0, SA:prometheus-k8s" } { "name": "pvc-cbfeff5f-b0b4-4191-bbb8-4085f2d18e30", "extId": "d45a1c8e-26e1-4d60-90c9-9cc4559fb2e2", "description": "FS:ext4, PVC:cape, NS:ntnx-base, POD:cape-6994dc84dc-89wqk, SA:pgo-pg" } ・・・
ちなみに フィルタリングしていない VG 1件の情報は、下記のようになっています。
$ curl -k -s -X GET \ --url "https://$PC:9440/api/volumes/v4.0/config/volume-groups" \ -H 'Accept: application/json' \ -u "$USER:$PASS" | jq -r .data[] | jq -r '. | jq -r .data[-1] { "$reserved": { "$fv": "v4.r0" }, "$objectType": "volumes.v4.config.VolumeGroup", "extId": "31a89ea5-d1d0-44e7-6920-44c5f6e022f8", "links": [ { "$reserved": { "$fv": "v1.r0" }, "$objectType": "common.v1.response.ApiLink", "href": "https://Prism Central IP:9440/api/volumes/v4.0/config/volume-groups/31a89ea5-d1d0-44e7-6920-44c5f6e022f8", "rel": "volume_group" } ], "name": "pvc-5c6e3fcf-c888-47f8-bb2a-97329aed4b22", "description": "FS:ext4, CSI StorageClass nutanix-volume for nkpm01, PVC:rook-ceph-mon-b, NS:kommander, POD:rook-ceph-mon-b-7d89b86f79-78xnv, SA:rook-ceph-default", "shouldLoadBalanceVmAttachments": true, "sharingStatus": "NOT_SHARED", "targetName": "ntnx-k8s-31a89ea5-d1d0-44e7-6920-44c5f6e022f8", "clusterReference": "00062fab-44c3-94c9-0000-00000000f22a", "storageFeatures": { "$reserved": { "$fv": "v4.r0" }, "$objectType": "volumes.v4.config.StorageFeatures", "flashMode": { "$reserved": { "$fv": "v4.r0" }, "$objectType": "volumes.v4.config.FlashMode", "isEnabled": false } }, "isHidden": false }
参考:API バージョンの調整
Volumes API は、v4 API でも新しめなので、Prism Central のバージョンが古いと未対応で、下記のようなエラーになります。この場合は、API の実装タイミングをもとに URL にある API バージョンを 「/api/volumes/v4.2/~」→「/api/volumes/v4.0/~」のように下げると実行できたりします。
"message": "The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again."
以上。
