在 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。用于创建、更新、删除、装载和卸载数据存储区的 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 的名称。

请求正文必须是一个 JSON 对象,其中包含将支持 Datastore 的 NFS 卷的详细信息。

  • description:(可选)Datastore 的简要说明。
  • nfs_datastore:(必需)用于存放 NFS 数据存储区配置的容器。

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 实例的位置。此值必须与请求网址中指定的 Datastore 位置相同。
  • 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 支持的 Datastore,请在 google_file_service 中提供以下信息:

  • netapp_volume:(必需)Google Cloud NetApp Volumes 卷的完整资源名称,格式为 projects/{project}/locations/{location}/volumes/{volume}

请求正文示例

{
  "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 卷的位置。此值必须与请求网址中指定的 Datastore 位置相同。
  • 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 数据存储区的文件共享名称。
  • SERVER_ADDRESS_1:第三方 NFS 数据存储区的服务器 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 数据存储区的文件共享名称。
  • SERVER_ADDRESSES:第三方 NFS 数据存储区的服务器 IP 地址列表(以英文逗号分隔)。
  • LOCATION:Datastore 的位置。
  • PROJECT_ID:您的 Google Cloud 项目 ID。

列出或获取数据存储区

如需列出给定项目和位置的所有 Datastore,请使用 gcloud CLI 或发出 GET 请求:

API

如需列出给定项目和位置的所有数据存储区,请发出 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

如需检索特定 Datastore 的详细信息,请使用 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 数据存储区,请使用 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_WRITEREAD_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 已挂载到哪些集群。以下示例输出显示了安装在一个集群上的 Datastore:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datastores/DATASTORE_ID",
  ...
  "clusters": [
    "projects/PROJECT_ID/locations/LOCATION/privateClouds/PRIVATE_CLOUD_ID/clusters/CLUSTER_ID"
  ],
  ...
}

更新 Datastore

只能更新 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 的说明。

卸载 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

如需删除 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:要删除的 Datastore 的名称。

gcloud

gcloud vmware datastores delete DATASTORE_ID \
--location=LOCATION --project=PROJECT_ID

替换以下内容:

  • DATASTORE_ID:要删除的 Datastore 的名称。
  • 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 卷和 Datastore 位于同一位置。
用户缺少必需的“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 版本。 创建新的 Google Cloud NetApp Volumes 卷,并使用 NFS 版本 3。
Netapp 卷“...”已停用删除保护。 Google Cloud NetApp Volumes 卷已停用删除保护功能。 在 Google Cloud NetApp Volumes 卷上启用删除保护。
无法创建 Datastore。已存在配置相同的资源“...”。 已存在具有相同名称和配置的 Datastore。 为 Datastore 选择其他名称或修改配置。

装载和卸载 Datastore 错误

下表介绍了在装载或卸载数据存储区时可能会遇到的错误:

错误消息 原因 解决方案
DatastoreFormat 验证失败。 指定的 Datastore 格式不受支持或无效。 确保 Datastore 格式与 VMware Engine 兼容(例如 NFSv3)。
MTU 范围无效,应介于 1300 到 9000 之间 为 Datastore 网络提供的 MTU(最大传输单元)值不在可接受的范围(1300 到 9000)内。 指定一个介于 1300 到 9000 之间的 MTU 值。
Datastore 项目与集群项目不一致 Datastore 的 Google Cloud 项目 ID 与 vSphere 集群的 Google Cloud 项目 ID 不一致。 确保 Datastore 和集群属于同一 Google Cloud 项目。
MTU 无效,MTU 应与集群中现有已挂载的 Datastore 的 MTU 保持一致 新 Datastore 网络的 MTU 与已装载到同一集群的其他 NFS Datastore 的 MTU 不一致。 使新 Datastore 的 MTU 与集群中已挂载的 Datastore 的 MTU 保持一致。
Datastore 应存在且处于“就绪”状态 指定的 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 范围。 确保指定的服务子网存在,并且具有配置正确的 IP CIDR 范围,足以向集群中的所有 ESXi 主机分配 IP。
Datastore 格式无效 指定的 Datastore 资源名称格式无法识别或不正确,导致无法执行卸载操作。 验证卸载请求中提供的 Datastore 资源名称是否准确,并且是否遵循 projects/{project}/locations/{location}/datastores/{datastore_id} 格式。
Datastore 未装载到集群 您尝试卸载的数据存储区未装载到指定集群。 在尝试卸载之前,请确认 Datastore 已装载到目标 vSphere 集群。