在 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_WRITEREAD_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 叢集。