VMware Engine で NFS ボリュームを vSphere データストアとして使用する
このドキュメントでは、VMware Engine API または Google Cloud CLI を使用して、Filestore インスタンス、Google Cloud NetApp Volumes ボリューム、またはサードパーティの NFS 共有を基盤とする NFS データストアを作成して管理し、VMware Engine で NFS ボリュームを vSphere データストアとして使用する方法について説明します。API エンドポイントは vmwareengine.googleapis.com です。Datastore の作成、更新、削除、マウント、マウント解除を行う API と gcloud CLI のオペレーションは非同期です。これらのオペレーションのいずれかを開始すると、VMware Engine はリクエストのステータスを追跡するために使用できるオペレーション オブジェクトを返します。
オペレーションをポーリングする
オペレーションのステータスを追跡するには、GET リクエストまたは gcloud CLI を使用します。
API
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。LOCATION: オペレーションのロケーション。OPERATION_ID: トラッキング対象のオペレーションの ID。
gcloud
gcloud vmware operations describe OPERATION_ID --location=LOCATION --project=PROJECT_ID
次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。LOCATION: オペレーションのロケーション。OPERATION_ID: トラッキング対象のオペレーションの ID。
NFS データストアを作成する
Filestore インスタンス、Google Cloud NetApp Volumes ボリューム、またはサードパーティの NFS 共有によってバックアップされる Datastore を作成するには、gcloud CLI を使用するか、次の POST リクエストを行います。
POST https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datastores?datastoreId=DATASTORE_ID
次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。LOCATION: Datastore のロケーション。DATASTORE_ID: Datastore の名前。
リクエストの本文は、データストアをバックアップする NFS ボリュームの詳細を含む JSON オブジェクトにする必要があります。
description:(省略可)Datastore の簡単な説明。nfs_datastore:(必須)NFS Datastore 構成のコンテナ。
Filestore
以降のセクションでは、API または gcloud CLI を使用して Filestore を基盤とする Datastore を作成する方法について説明します。
API
Filestore でバックアップされた Datastore の場合は、google_file_service で次の情報を指定します。
filestore_instance:(必須)Filestore インスタンスの完全なリソース名(projects/{project}/locations/{location}/instances/{instance}形式)。
リクエスト本文の例:
{
"description": "Filestore Datastore example",
"nfs_datastore": {
"google_file_service": {
"filestore_instance": "projects/FILESTORE_PROJECT_ID/locations/LOCATION/instances/INSTANCE_NAME"
}
}
}
次のように置き換えます。
FILESTORE_PROJECT_ID: Filestore インスタンスが存在するプロジェクト ID。LOCATION: Filestore インスタンスのロケーション。これは、リクエスト URL で指定されたデータストアのロケーションと同じにする必要があります。INSTANCE_NAME: Filestore インスタンスの名前。
gcloud
gcloud vmware datastores create DATASTORE_ID \
--location=LOCATION --project=PROJECT_ID \
--filestore=projects/FILESTORE_PROJECT_ID/locations/LOCATION/instances/INSTANCE_NAME
次のように置き換えます。
DATASTORE_ID: Datastore の名前。LOCATION: Datastore と Filestore インスタンスのロケーション。PROJECT_ID: 実際の Google Cloud プロジェクト ID。FILESTORE_PROJECT_ID: Filestore インスタンスが存在するプロジェクト ID。INSTANCE_NAME: Filestore インスタンスの名前。
Google Cloud NetApp Volumes
以降のセクションでは、API または gcloud CLI を使用して、Google Cloud NetApp Volumes を基盤とする Datastore を作成する方法について説明します。
API
Google Cloud NetApp Volumes でバックアップされたデータストアの場合は、google_file_service に次の情報を指定します。
netapp_volume:(必須)projects/{project}/locations/{location}/volumes/{volume}形式の Google Cloud NetApp Volumes ボリュームの完全なリソース名。
リクエスト本文の例:
{
"description": "NetApp Volumes Datastore example",
"nfs_datastore": {
"google_file_service": {
"netapp_volume": "projects/NETAPP_PROJECT_ID/locations/LOCATION/volumes/VOLUME_NAME"
}
}
}
次のように置き換えます。
NETAPP_PROJECT_ID: Google Cloud NetApp Volumes ボリュームが存在するプロジェクト ID。LOCATION: Google Cloud NetApp Volumes ボリュームのロケーション。これは、リクエスト URL で指定されたデータストアのロケーションと同じにする必要があります。VOLUME_NAME: Google Cloud NetApp Volumes ボリュームの名前。
gcloud
gcloud vmware datastores create DATASTORE_ID \
--location=LOCATION --project=PROJECT_ID \
--netapp=projects/NETAPP_PROJECT_ID/locations/LOCATION/volumes/VOLUME_NAME
次のように置き換えます。
DATASTORE_ID: Datastore の名前。LOCATION: Datastore と Google Cloud NetApp Volumes ボリュームのロケーション。PROJECT_ID: 実際の Google Cloud プロジェクト ID。NETAPP_PROJECT_ID: Google Cloud NetApp Volumes ボリュームが存在するプロジェクト ID。VOLUME_NAME: Google Cloud NetApp Volumes ボリュームの名前。
サードパーティの NFS
以降のセクションでは、API または gcloud CLI を使用して、サードパーティの NFS 共有を基盤とする Datastore を作成する方法について説明します。
API
サードパーティの NFS 共有でバックアップされた Datastore の場合は、nfs_datastore に次の情報を指定します。
third_party_nfs:(必須)サードパーティの NFS の構成が含まれます。network:projects/{project}/global/networks/{network}形式の VPC ネットワーク名。file_share: ファイル共有名。servers: サーバー IP アドレスのリスト。
リクエストの本文は次のようになります。
{
"description": "Third-party NFS Datastore example",
"nfs_datastore": {
"third_party_nfs": {
"network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
"file_share": "FILE_SHARE_NAME",
"servers": ["SERVER_ADDRESS_1"]
}
}
}
次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。NETWORK_NAME: サードパーティの NFS データストアの VPC ネットワークの名前。FILE_SHARE_NAME: サードパーティの NFS Datastore のファイル共有名。SERVER_ADDRESS_1: サードパーティの NFS Datastore のサーバー IP アドレス。必要に応じて、リストにアドレスを追加します。
gcloud
gcloud vmware datastores create DATASTORE_ID \
--third-party-nfs-network=NETWORK_NAME \
--third-party-nfs-file-share=FILE_SHARE_NAME \
--third-party-nfs-servers=SERVER_ADDRESSES \
--location=LOCATION --project=PROJECT_ID
次のように置き換えます。
DATASTORE_ID: Datastore の名前。NETWORK_NAME: サードパーティの NFS データストアの VPC ネットワーク名。FILE_SHARE_NAME: サードパーティの NFS Datastore のファイル共有名。SERVER_ADDRESSES: サードパーティの NFS データストアのサーバー IP アドレスのカンマ区切りのリスト。LOCATION: Datastore のロケーション。PROJECT_ID: 実際の Google Cloud プロジェクト ID。
データストアの一覧表示または取得
特定のプロジェクトとロケーションのすべての Datastore を一覧表示するには、gcloud CLI を使用するか、GET リクエストを送信します。
API
指定されたプロジェクトとロケーションのすべての Datastore を一覧表示するには、GET リクエストを行います。
GET https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datastores
特定の Datastore の詳細を取得するには、GET リクエストを行います。
GET https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datastores/DATASTORE_ID
次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。LOCATION: Datastore のロケーション。DATASTORE_ID: Datastore の名前。
gcloud
特定のプロジェクトとロケーションのすべてのデータストアを一覧表示するには、gcloud vmware datastores list コマンドを使用します。
gcloud vmware datastores list \
--location=LOCATION --project=PROJECT_ID
特定のデータストアの詳細を取得するには、gcloud vmware datastores describe コマンドを使用します。
gcloud vmware datastores describe DATASTORE_ID \
--location=LOCATION --project=PROJECT_ID
次のように置き換えます。
LOCATION: Datastore のロケーション。PROJECT_ID: 実際の Google Cloud プロジェクト ID。DATASTORE_ID: Datastore の名前。
Datastore をマウントする
Datastore リソースを作成したら、vSphere クラスタにマウントして、ESXi ホストで使用できるようにする必要があります。NFS Datastore をマウントするには、gcloud CLI を使用するか、ターゲット クラスタに POST リクエストを行います。
API
POST https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/privateClouds/PRIVATE_CLOUD_ID/clusters/CLUSTER_ID:mountDatastore
リクエスト本文の例:
{
"datastore_mount_config": {
"datastore": "projects/PROJECT_ID/locations/LOCATION/datastores/DATASTORE_ID",
"datastore_network": {
"subnet": "projects/PROJECT_ID/locations/LOCATION/privateClouds/PRIVATE_CLOUD_ID/subnets/SERVICE_SUBNET_NAME",
"connection_count": 4
},
"access_mode": "READ_WRITE",
"nfs_version": "NFS_V3"
}
}
datastore: マウントする Datastore のリソース名。subnet: NFS トラフィックに使用するサービス サブネットのリソース名。connection_count:(省略可)接続数。デフォルトは4です。access_mode:(省略可)アクセスモード(READ_WRITEまたはREAD_ONLY)。デフォルトはREAD_WRITEです。nfs_version:(省略可)NFS バージョン。デフォルトはNFS_V3です。
次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。LOCATION: リソースのロケーション。PRIVATE_CLOUD_ID: プライベート クラウドの名前。CLUSTER_ID: クラスタの名前。DATASTORE_ID: マウントする Datastore の名前。SERVICE_SUBNET_NAME: NFS トラフィックに使用するサービス サブネットの名前。
gcloud
gcloud vmware private-clouds clusters mount-datastore CLUSTER_ID \
--location=LOCATION --project=PROJECT_ID \
--private-cloud=PRIVATE_CLOUD_ID \
--datastore=projects/PROJECT_ID/locations/LOCATION/datastores/DATASTORE_ID \
--subnet=SERVICE_SUBNET_NAME
または、--datastore-network フラグを使用して JSON ファイルでネットワーク構成の詳細を指定することもできます。
gcloud vmware private-clouds clusters mount-datastore CLUSTER_ID \
--location=LOCATION --project=PROJECT_ID \
--private-cloud=PRIVATE_CLOUD_ID \
--datastore=projects/PROJECT_ID/locations/LOCATION/datastores/DATASTORE_ID \
--datastore-network=network-config.json
network-config.json の内容は次のとおりです。
{
"subnet": "SERVICE_SUBNET_NAME",
"mtu": 1500,
"connection-count": 4
}
次のように置き換えます。
CLUSTER_ID: クラスタの名前。LOCATION: リソースのロケーション。PROJECT_ID: 実際の Google Cloud プロジェクト ID。PRIVATE_CLOUD_ID: プライベート クラウドの名前。DATASTORE_ID: マウントする Datastore の名前。SERVICE_SUBNET_NAME: NFS トラフィックに使用するサービス サブネットの名前。
マウント オペレーションが正常に完了すると、クラスタ リソースにマウントされた Datastore 構成が表示されます。クラスタ リソースには、マウントに対応する DatastoreMountConfig エントリが含まれます。次に例を示します。
...
datastoreMountConfig:
- accessMode: READ_WRITE
datastore: projects/PROJECT_ID/locations/LOCATION/datastores/DATASTORE_ID
datastoreNetwork:
connectionCount: 4
mtu: 1500
networkPeering: projects/PROJECT_ID/locations/global/networkPeerings/PEERING_NAME
subnet: projects/PROJECT_ID/locations/LOCATION/privateClouds/PRIVATE_CLOUD_ID/subnets/SUBNET_NAME
fileShare: FILE_SHARE_NAME
nfsVersion: NFS_V3
servers:
- SERVER_IP
...
マウント オペレーションが正常に完了すると、Datastore リソースの clusters リストが更新されます。Datastore の説明を取得して、どのクラスタにマウントされているかを確認できます。
API
GET https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datastores/DATASTORE_ID
gcloud
gcloud vmware datastores describe DATASTORE_ID --location=LOCATION --project=PROJECT_ID
Datastore を記述したら、レスポンスの clusters フィールドで、Datastore がマウントされているクラスタを確認します。次の出力例は、1 つのクラスタにマウントされたデータストアを示しています。
{
"name": "projects/PROJECT_ID/locations/LOCATION/datastores/DATASTORE_ID",
...
"clusters": [
"projects/PROJECT_ID/locations/LOCATION/privateClouds/PRIVATE_CLOUD_ID/clusters/CLUSTER_ID"
],
...
}
データストアを更新する
更新できるのは、Datastore の description フィールドのみです。Datastore を更新するには、gcloud CLI を使用するか、PATCH リクエストを行います。
API
PATCH https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datastores/DATASTORE_ID
リクエスト本文の例:
{
"description": "New datastore description"
}
次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。LOCATION: Datastore のロケーション。DATASTORE_ID: Datastore の ID。
gcloud
gcloud vmware datastores update DATASTORE_ID \
--location=LOCATION --project=PROJECT_ID \
--description="DESCRIPTION"
次のように置き換えます。
DATASTORE_ID: Datastore の名前。LOCATION: Datastore のロケーション。PROJECT_ID: 実際の Google Cloud プロジェクト ID。DESCRIPTION: Datastore の説明。
データストアをマウント解除する
クラスタから NFS Datastore をマウント解除するには、gcloud CLI を使用するか、POST リクエストを行います。
API
POST https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/privateClouds/PRIVATE_CLOUD_ID/clusters/CLUSTER_ID:unmountDatastore
リクエスト本文の例:
{
"datastore": "projects/PROJECT_ID/locations/LOCATION/datastores/DATASTORE_ID"
}
次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。LOCATION: リソースのロケーション。PRIVATE_CLOUD_ID: プライベート クラウドの名前。CLUSTER_ID: クラスタの名前。DATASTORE_ID: マウント解除する Datastore の名前。
gcloud
gcloud vmware private-clouds clusters unmount-datastore CLUSTER_ID \
--location=LOCATION --project=PROJECT_ID \
--private-cloud=PRIVATE_CLOUD_ID \
--datastore=projects/PROJECT_ID/locations/LOCATION/datastores/DATASTORE_ID
次のように置き換えます。
CLUSTER_ID: クラスタの名前。LOCATION: リソースのロケーション。PROJECT_ID: 実際の Google Cloud プロジェクト ID。PRIVATE_CLOUD_ID: プライベート クラウドの名前。DATASTORE_ID: マウント解除する Datastore の名前。
データストアを削除する
Datastore リソースを削除するには、gcloud CLI を使用するか、DELETE リクエストを行います。Datastore をクラスタにマウントしてはなりません。
API
DELETE https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datastores/DATASTORE_ID
次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。LOCATION: Datastore のロケーション。DATASTORE_ID: 削除するデータストアの名前。
gcloud
gcloud vmware datastores delete DATASTORE_ID \
--location=LOCATION --project=PROJECT_ID
次のように置き換えます。
DATASTORE_ID: 削除するデータストアの名前。LOCATION: Datastore のロケーション。PROJECT_ID: 実際の Google Cloud プロジェクト ID。
トラブルシューティング
次の表に、Datastore の作成とマウント時に発生する一般的なエラーを示します。
Datastore エラーを作成する
次の表に、データストアの作成時に発生する可能性のあるエラーを示します。
| エラー メッセージ | 原因 | 解決策 |
|---|---|---|
| filestore NFS ファイル サーバー インスタンスを空にすることはできません。 | リクエスト本文の filestore_instance フィールドが空です。 |
Filestore インスタンスの完全なリソース名を指定します。 |
| netapp NFS ファイル サーバー ボリュームは空にできません。 | リクエスト本文の netapp_volume フィールドが空です。 |
Google Cloud NetApp Volumes ボリュームの完全なリソース名を指定します。 |
| フィールド タイプ filestore_instance のフィールド形式が無効です | filestore_instance フィールドが必須の形式に準拠していません。 |
リソース名が projects/{project}/locations/{location}/instances/{instance} の形式であることを確認します。 |
| フィールド タイプ netapp_volume のフィールド形式が無効です… | netapp_volume フィールドが必須の形式に準拠していません。 |
リソース名が projects/{project}/locations/{location}/volumes/{volume} の形式であることを確認します。 |
| Datastore と NFS ボリュームが異なるロケーションにある。 | Filestore インスタンスまたは Google Cloud NetApp Volumes ボリュームが、作成しようとしている Datastore とは異なるロケーションにある。 | NFS ボリュームとデータストアの両方が同じ場所にあることを確認します。 |
| ユーザーに必要な権限「file.instances.get」がない | サービス アカウントに、Filestore インスタンスにアクセスするために必要な IAM 権限がありません。 | VMware Engine サービス エージェントに roles/file.viewer ロールを付与します。 |
| リソースで権限「netapp.volumes.get」が拒否されました | サービス アカウントに、Google Cloud NetApp Volumes ボリュームにアクセスするために必要な IAM 権限がありません。 | VMware Engine サービス エージェントに roles/netapp.viewer ロールを付与します。 |
| Filestore インスタンス ... は存在しません。 | 指定された Filestore インスタンスが見つかりませんでした。 | Filestore インスタンスが存在し、リソース名が正しいことを確認します。 |
| Netapp ボリューム ... が存在しません。 | 指定された Google Cloud NetApp Volumes ボリュームが見つかりませんでした。 | Google Cloud NetApp Volumes ボリュームが存在し、リソース名が正しいことを確認します。 |
| Filestore インスタンスにサポートされていない階層がある | Filestore インスタンスが、この機能でサポートされていない階層を使用している。 | サポートされているティア(ゾーンまたはリージョン)を使用して、新しい Filestore インスタンスを作成します。 |
| Filestore インスタンスにサポートされていない NFS バージョンがある | Filestore インスタンスでサポートされていない NFS バージョンが使用されている。 | NFS バージョン 3 を使用して新しい Filestore インスタンスを作成します。 |
| Netapp ボリューム ... に、サポートされていない NFS バージョン ... があります | Google Cloud NetApp Volumes ボリュームがサポートされていない NFS バージョンを使用している。 | NFS バージョン 3 を使用して、新しい Google Cloud NetApp Volumes ボリュームを作成します。 |
| Netapp ボリューム ... で削除保護が無効になっています。 | Google Cloud NetApp Volumes ボリュームで削除保護が無効になっている。 | Google Cloud NetApp Volumes ボリュームで削除保護を有効にします。 |
| Datastore を作成できません。同じ構成のリソースがすでに存在します。 | 同じ名前と構成のデータストアがすでに存在します。 | Datastore の別の名前を選択するか、構成を変更します。 |
Datastore のマウントとマウント解除のエラー
次の表に、データストアのマウントまたはマウント解除時に発生する可能性のあるエラーを示します。
| エラー メッセージ | 原因 | 解決策 |
|---|---|---|
| DatastoreFormat の検証に失敗しました。 | 指定された Datastore 形式がサポートされていないか、無効です。 | データストアの形式が VMware Engine と互換性があることを確認します(NFSv3 など)。 |
| MTU の範囲が無効です。1,300 ~ 9,000 の範囲で指定してください | データストア ネットワークに指定された MTU(最大伝送単位)の値が、許容範囲(1,300 ~ 9,000)外です。 | MTU 値を 1,300 ~ 9,000 の範囲で指定します。 |
| Datastore プロジェクトがクラスタ プロジェクトと等しくない | Datastore の Google Cloud プロジェクト ID が vSphere クラスタの Google Cloud プロジェクト ID と一致しません。 | Datastore とクラスタが同じ Google Cloud プロジェクトに属していることを確認します。 |
| MTU が無効です。MTU は、クラスタ内の既存のマウントされた Datastore の MTU と一致している必要があります | 新しいデータストア ネットワークの MTU が、同じクラスタにすでにマウントされている他の NFS データストアの MTU と一致していません。 | 新しい Datastore の MTU を、クラスタ内の既存のマウント済み Datastore の MTU と一致させます。 |
| データストアが存在し、準備完了状態である必要があります | 指定された Datastore リソースが存在しないか、READY 状態ではありません。 |
Get または List Datastore API を使用して、Datastore が正常に作成され、ステータスが READY であることを確認します。 |
| ファースト パーティの場合、参照される Filestore または NetApp が存在し、準備完了状態である必要があります | 基盤となる Filestore インスタンスまたは Google Cloud NetApp Volumes ボリュームが存在しないか、READY 状態になっていません。 |
参照されている NFS ボリュームが存在し、その Google Cloud プロジェクトで READY 状態であることを確認します。 |
| ファイル共有 VPC とクラスタのプライベート クラウドの VMware Engine ネットワークの間に、アクティブ状態のネットワーク ピアリングが存在する必要があります | NFS ボリュームが存在する VPC ネットワークとプライベート クラウドの VMware Engine ネットワークの間に VPC ネットワーク ピアリング接続が必要です。この接続がないか、ACTIVE 状態になっていません。 |
ファイル共有の VPC とプライベート クラウドの VMware Engine ネットワークの間にアクティブな VPC ネットワーク ピアリング接続が存在することを確認します。 |
| レガシー ネットワークでマウント オペレーションが失敗する | 以前のネットワークの場合、NFS ボリュームのテナント プロジェクトへのプライベート接続がないか、非アクティブです。 | Datastore をマウントする前に、テナント プロジェクトへのアクティブなプライベート接続が存在することを確認してください。マウントされた Datastore が使用しているプライベート接続は削除しないでください。 |
| ファーストパーティの場合、マウントに使用される PC サブネットを許可するエクスポート オプションを追加する必要があります | NFS ボリュームのエクスポート ポリシーに、アクセス用のプライベート クラウドのサービス サブネットが含まれていない。 | マウントに使用されるプライベート クラウドのサービス サブネットからのアクセスを許可するように、NFS ボリュームのエクスポート ポリシーを変更します。 |
| サブネットが存在し、有効な IP CIDR が構成されている必要があります | Datastore ネットワークに指定されたサービス サブネットが存在しないか、有効な IP CIDR 範囲が構成されていません。 | 指定されたサービス サブネットが存在し、クラスタ内のすべての ESXi ホストに IP を割り振るのに十分な IP CIDR 範囲が適切に構成されていることを確認します。 |
| 無効なデータストア形式 | 指定された Datastore リソース名の形式が認識されないか、正しくないため、マウント解除オペレーションが実行されません。 | マウント解除リクエストで指定された Datastore リソース名が正確で、projects/{project}/locations/{location}/datastores/{datastore_id} 形式に従っていることを確認します。 |
| データストアがクラスタにマウントされていない | マウント解除しようとしている Datastore が、指定されたクラスタにマウントされていません。 | マウント解除を試みる前に、データストアがターゲット vSphere クラスタにマウントされていることを確認します。 |