在 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_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 已挂载到哪些集群。以下示例输出显示了安装在一个集群上的 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 集群。 |