NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix Volumes VG の Description を v4 API で取得してみる。

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."

 

以上。

©2025 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。