在 VMware Engine 中,將 NFS 磁碟區做為 vSphere 資料儲存庫
本文說明如何在 VMware Engine 中使用 NFS 磁碟區做為 vSphere 資料儲存庫,方法是使用 VMware Engine API 或 Google Cloud CLI,建立及管理由 Filestore 執行個體、Google Cloud NetApp Volumes 磁碟區或第三方 NFS 共用區支援的 NFS 資料儲存庫。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 的名稱。
要求主體必須是 JSON 物件,內含將備份 Datastore 的 NFS 磁碟區詳細資料。
description: (選填) Datastore 的簡短說明。nfs_datastore: (必要) NFS Datastore 設定的容器。
Filestore
以下各節說明如何使用 API 或 gcloud CLI,建立以 Filestore 為後端的 Datastore。
API
如果 Datastore 由 Filestore 支援,請在 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
如果 Datastore 由 Google Cloud NetApp Volumes 支援,請在 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
如果 Datastore 是由第三方 NFS 共用區支援,請在 nfs_datastore 中提供下列資訊:
third_party_nfs: (必要) 包含第三方 NFS 的設定。network:虛擬私有雲網路名稱,格式為projects/{project}/global/networks/{network}。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 Datastore 的虛擬私有雲網路名稱。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 Datastore 的虛擬私有雲網路名稱。FILE_SHARE_NAME:第三方 NFS Datastore 的檔案共用名稱。SERVER_ADDRESSES:以半形逗號分隔的第三方 NFS Datastore 伺服器 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
如要列出指定專案和位置的所有 Datastore,請使用 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 資源後,您必須將其掛接至 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:Private Cloud 的名稱。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:Private Cloud 的名稱。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:Private Cloud 的名稱。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:Private Cloud 的名稱。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 錯誤
下表說明建立 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}」。 |
| 資料存放區和 NFS 磁碟區位於不同位置。 | Filestore 執行個體或 Google Cloud NetApp Volumes 磁碟區與您要建立的 Datastore 位於不同位置。 | 確認 NFS 磁碟區和 Datastore 位於相同位置。 |
| 使用者缺少必要權限「file.instances.get」 | 服務帳戶沒有存取 Filestore 執行個體所需的 IAM 權限。 | 將 roles/file.viewer 角色授予 VMware Engine 服務代理。 |
| 資源的「netapp.volumes.get」權限遭拒… | 服務帳戶沒有存取 Google Cloud NetApp Volumes 磁碟區的必要 IAM 權限。 | 將 roles/netapp.viewer 角色授予 VMware Engine 服務代理。 |
| Filestore 執行個體「...」不存在。 | 找不到指定的 Filestore 執行個體。 | 確認 Filestore 執行個體存在,且資源名稱正確無誤。 |
| Netapp 磁碟區 ... 不存在。 | 找不到指定的 Google Cloud NetApp Volumes 磁碟區。 | 確認 Google Cloud NetApp Volumes 磁碟區存在,且資源名稱正確無誤。 |
| Filestore 執行個體的層級不受支援 | Filestore 執行個體使用的層級不支援這項功能。 | 建立新的 Filestore 執行個體,並使用支援的層級:可用區或區域。 |
| Filestore 執行個體使用的 NFS 版本不受支援 | Filestore 執行個體使用不支援的 NFS 版本。 | 建立新的 Filestore 執行個體,並使用 NFS 第 3 版。 |
| 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 時發生錯誤
下表說明掛接或卸載 Datastore 時可能會遇到的錯誤:
| 錯誤訊息 | 原因 | 解決方案 |
|---|---|---|
| DatastoreFormat 驗證失敗。 | 系統不支援或無法辨識指定的 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 磁碟區存在,且位於專案的 READY 狀態。 Google Cloud |
| 檔案共用虛擬私有雲與叢集私有雲的 VMware Engine 網路之間,應存在處於啟用狀態的網路對等互連 | NFS 磁碟區所在的虛擬私有雲網路與私有雲的 VMware Engine 網路之間必須建立虛擬私有雲網路對等互連連線,但這項連線不是遺失,就是處於 ACTIVE 狀態。 |
確認檔案共用虛擬私有雲與私有雲的 VMware Engine 網路之間,存在有效的虛擬私有雲網路對等互連連線。 |
| 舊版網路上的掛接作業失敗 | 如果是舊版網路,與 NFS 磁碟區租戶專案的私人連線會遺失或處於非使用中狀態。 | 嘗試掛接 Datastore 之前,請先確認與租戶專案的私人連線是否有效。請勿刪除已掛接 Datastore 使用的私人連線。 |
| 如果是第一方,應新增匯出選項,允許用於掛接的電腦子網路 | NFS 磁碟區的匯出政策未納入私人雲端的服務子網路,因此無法存取。 | 修改 NFS 磁碟區的匯出政策,允許從用於掛接的私有雲服務子網路存取。 |
| 子網路應存在,並已設定有效的 IP CIDR | 為 Datastore 網路指定的服務子網路遺失,或未設定有效的 IP CIDR 範圍。 | 確認指定的服務子網路存在,且 IP CIDR 範圍設定正確,足以將 IP 分配給叢集中的所有 ESXi 主機。 |
| Datastore 格式無效 | 指定的 Datastore 資源名稱格式不正確或無法辨識,因此無法執行卸載作業。 | 確認卸載要求中提供的 Datastore 資源名稱正確無誤,且符合 projects/{project}/locations/{location}/datastores/{datastore_id} 格式。 |
| 叢集未掛接 Datastore | 您嘗試卸載的資料儲存庫未掛接至指定叢集。 | 嘗試解除掛接前,請確認資料存放區已掛接至目標 vSphere 叢集。 |