自備授權與單一用戶群節點

Compute Engine 提供使用單一用戶群節點自備授權 (BYOL) 的功能,以支援限制實體硬體使用的授權要求。具體而言,您可以使用單一用戶群節點將自訂映像檔匯入 Compute Engine,使用該映像檔啟動 VM,然後啟用就地重新啟動功能,讓 VM 儘可能在同一部實體伺服器上重新啟動。使用單一用戶群節點來代管 VM 可確保 VM 在完全專用的硬體上執行,同時限制實體核心用量。Compute Engine 也提供伺服器用量報表,讓您可以追蹤實體硬體資訊,以瞭解授權使用情形。

如需這項功能的總覽 (包括需求和工作負載考量事項),請參閱總覽頁面。

事前準備

查看支援的 OS 和授權要求

在開始此程序之前,請確保您的 OS 相容,而且您已查看授權與啟用一節。您必須確保自己的授權協議允許在本說明文件所述的 BYOL 環境中使用軟體。此外,您也必須根據自己的協議針對 BYOL 準備訪客映像檔。

如有問題或需要其他支援,請向授權經銷商洽詢授權相關問題,以及向 Google Cloud 支援小組詢問此功能的相關問題。

查看支援的地區

這項功能僅適用於某些地區。如需完整清單,請參閱價格與可用性一節。

考量您的工作負載

某些工作負載比其他工作負載更適合此功能。請參閱工作負載考量事項一節,以瞭解一般建議事項。

建立新專案和要求配額

如果您還沒有專案,請建立新專案

新專案的 CPU 配額限制為 100 個 CPU。這可能不符合您的需求。如果專案需要更多配額,可以透過 GCP 主控台的「Quotas」(配額) 頁面要求調整配額。視您的設定而定,您可能也需要增加其他資源 (例如 IP 位址) 的配額。

啟用 Cloud Build API

這項功能會使用 Cloud Build 服務來匯入及建立 Compute Engine 映像檔。您必須啟用 Cloud Build API 才能使用這項功能。

啟用 Cloud Build API

Compute Engine 也會為 Cloud Build 服務帳戶授予以下角色,使其可將映像檔匯入 Compute Engine:

  • roles/iam.serviceAccountTokenCreator
  • roles/compute.admin
  • roles/iam.serviceAccountUser

啟用 Stackdriving Logging 以進行稽核記錄

如果授權要求報告實體伺服器用量,在單一用戶群節點上啟動 VM 之前,請先啟用 Stackdriving Logging API。如此可以讓您使用 BigQuery 匯入和查看伺服器用量資訊 (強烈建議)。

啟用 Stackdriving Logging API

設定記錄功能後,您就可以利用 BigQuery 來追蹤實體核心數用量等相關資訊,以滿足您的授權需求。詳情請參閱判斷伺服器用量一文。

建立虛擬磁碟檔案

您必須已具備虛擬磁碟檔案 (VMDK、VHD),才能將映像檔匯入 Compute Engine。系統不支援透過安裝映像檔 (例如 iso、img、DVD、USB 等) 將作業系統直接安裝至 VM。此外,也不支援在 Compute Engine VM 上進行就地 OS 升級。

建立虛擬磁碟檔案的步驟會因環境而異;請參閱適用於您作業系統的相關說明文件。

匯入虛擬磁碟檔案

如要使用您自己的授權啟動 VM,請匯入包含您要使用的 OS 的虛擬磁碟。您可以使用 gcloud 工具匯入檔案;gcloud 工具支援從 Google Cloud Storage 值區或從本機工作站匯入 VHD 或 VMDK。如果虛擬磁碟是在您的本機電腦託管,匯入程序會先將檔案上傳至 Cloud Storage 值區,然後再將映像檔匯入 Compute Engine。

在匯入虛擬機器的磁碟之前,請先在虛擬機器中下載並執行我們的預先檢查工具。這個預先檢查工具有助於確認在遷移至 GCP 時沒有任何不相容的情況

如需映像檔匯入工具的完整說明,請參閱匯入虛擬磁碟一文。

當您準備就緒時,請執行以下 gcloud 指令以匯入虛擬磁碟:

gcloud compute images import [IMAGE_NAME] \
    --source-file [SOURCE_FILE] \
    --os [OS]

其中:

  • [IMAGE_NAME] 是您要為此映像檔提供的名稱。
  • [SOURCE_FILE] 是虛擬磁碟檔案,可在本機託管,也可以儲存在 Cloud Storage 中。如果您的虛擬磁碟是本機檔案,您可以使用絕對或相對路徑。如果您的虛擬磁碟檔案已儲存在 Cloud Storage 中,則該檔案必須存在於用於匯入程序的同一個專案的儲存值區中,而且您必須以 gs://[BUCKET_NAME]/[OBJECT_NAME] 格式指定檔案的完整路徑。

  • [OS]SOURCE_FILE 的 Windows 作業系統。支援的 Windows OS 如下:

    • windows-2008r2-byol
    • windows-2012-byol
    • windows-2012r2-byol
    • windows-2016-byol
    • windows-7-byol
    • windows-10-byol

請注意,儲存在 Cloud Storage 中的檔案和 Compute Engine 中的映像檔都會產生費用。當您確認映像檔已正確匯入且能正確啟動為 Compute Engine 執行個體後,就可以從 Cloud Storage 刪除虛擬磁碟檔案。

如果針對 --source-file 指定了本機檔案,則執行上傳作業可能需要數十分鐘的時間,視虛擬磁碟的大小和網路連線速度而定。

建立映像檔後,您可以使用身分與存取權管理角色或權限,和專案或機構以外的使用者共用映像檔

gcloud projects add-iam-policy-binding [PROJECT_ID] \
    --member user:[USER_EMAIL] \
    --role roles/compute.imageUser

在這種情況下,[PROJECT_ID] 是擁有您要授予存取權之映像檔的專案。

然後,使用者就可以在其要求中指定映像檔所在的專案 ID,藉此來存取這個映像檔。例如:

gcloud compute instances create my-vm \
    --custom-cpu 4 \
    --custom-memory 8 \
    --image https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images/[IMAGE_NAME] \
    --zone us-central1-a \
    --node-affinity-file node-affinity-prod.json \
    --restart-on-failure \
    --maintenance-policy terminate

使用您自己的授權啟動 VM 執行個體

匯入映像檔後,您就可以使用匯入的映像檔在單一用戶群節點上啟動 VM 執行個體,並透過指定 restart-node-on-minimal-servers 屬性來啟用就地重新啟動功能。這項屬性可確保在發生維護事件時,VM 會儘可能在同一部實體伺服器上重新啟動。如果無法使用同一部實體伺服器,系統將會建立新的實體伺服器,並將其新增至節點群組。Compute Engine 將會報告新伺服器的伺服器 ID。

對於根據授權和產品條款的性質並不考慮實體核心或通訊端用量的 BYOL 工作負載,您可以只使用單一用戶群節點,並省略就地重新啟動功能。如此可以確保您的 VM 執行個體位於專用硬體上,但不會將所使用的實體基礎伺服器的數量降至最低。

請按照以下步驟啟動您的 VM 執行個體 (詳細說明如下):

  1. 如有需要,使用 Google Cloud Platform 主控台gcloud 工具或 API 建立節點範本並啟用就地重新啟動功能。

  2. 使用新建立的範本建立節點群組。

  3. 最後,使用匯入的映像檔在節點群組中建立 VM。

在節點上為 VM 進行排程後,在重新啟動和維護事件中,它們都會附有相同的實體相依性標籤。這表示雖然基礎實體伺服器可能會變更,但您可以使用標籤選取器來確保某些 VM 永遠會位於同一個節點上 (具有對應的節點相依性) 或永不共用同一個節點 (節點反相依性)。

為方便起見,系統會自動為使用 restart-node-on-minimal-servers 選項設定的所有單一用戶群節點加上額外的相依性標籤 (類似於節點名稱和節點群組名稱)。您可以在相依性檔案中包含此標籤,以確保 VM 只會在啟用了 restart-node-on-minimal-server 功能的節點上啟動。該標籤會如下所示:

  • 鍵:compute.googleapis.com/node-server-binding-type
  • 值:restart-node-on-minimal-server

主控台

  1. 使用最少部伺服器的重新啟動選項建立節點範本。

    1. 前往「Create a node template」(建立節點範本) 頁面。

      前往「Create a node template」(建立節點範本) 頁面

    2. 輸入範本名稱。
    3. 指定您要執行節點群組的地區。
    4. 指定您想讓節點群組使用的節點類型。您也可以指定最小可用節點,這可讓節點群組在任何可用節點類型上執行。
    5. 為您的執行個體指定節點相依性標籤 (如有需要)。例如,您可以指定 workload=front-endenvironment=prod 標籤。
    6. 展開「Advanced node restart configuration」(進階節點重新啟動設定)
    7. 選取 [Minimal servers] (最少部伺服器)
    8. 建立節點範本。
  2. 使用節點範本佈建節點群組。

    1. 前往「Create a node group」(建立節點群組) 頁面。

      前往「Create a node group」(建立節點群組) 頁面

    2. 輸入群組名稱。
    3. 指定您要執行節點群組的區域。您必須在相同地區中擁有節點範本。
    4. 指定您要使用的節點範本。
    5. 指定您要在群組中執行的節點數。您可於稍後變更此數目。
    6. 按一下 [Create] (建立),完成建立節點群組。
  3. 建立在節點群組內或特定節點上執行的執行個體。如果您使用特定節點相依性標籤,則可使用一般程序建立執行個體,並在「Sole Tenancy」(單獨租用) 設定下指定節點相依性。在這個範例中,您將直接在節點群組詳細資料頁面中建立執行個體。

    1. 前往單一用戶群節點頁面。

      前往個別用戶群節點頁面

    2. 按一下您要在其中建立執行個體之節點群組的名稱。
    3. 按一下 [Create instance] (建立執行個體),在此節點群組的任何位置建立執行個體。如果您想讓執行個體在群組的特定節點上執行,請按一下此群組中個別節點的名稱,查看該個別節點的詳細資料。然後,按一下 [Create instance] (建立執行個體),在該個別節點上建立執行個體。
    4. 設定執行個體。由於您已選取節點群組或特定節點,因此,系統已為您指定地區、區域和預設節點相依性標籤。
    5. 選取 [Management] (管理) 分頁標籤。
    6. 在 [Availability policy] (適用政策) > [On host maintenance] (在主機維護期間) 之下,選取 [Terminate] (終止)

    7. 在「Automatic Restart」(自動重新啟動) 之下,選取 [On (recommended)] (啟用 (建議選項))

    8. 按一下 [Create] (建立),完成建立執行個體。

gcloud

  1. 建立節點範本並設定 restart-node-on-minimal-servers 標記。為您的執行個體選擇節點相依性標籤 (如有需要)。例如:

    gcloud compute sole-tenancy node-templates create my-node-template \
        --node-type n1-node-96-624 \
        --region us-east1 \
        --node-affinity-labels workload=front-end,environment=prod \
        --server-binding restart-node-on-minimal-servers
    
  2. 使用節點範本佈建節點群組。例如,以下指令會使用在上一步中建立的節點範本,來建立包含兩個執行個體的群組:

     gcloud compute sole-tenancy node-groups create my-node-group \
         --node-template my-node-template \
         --target-size 2 \
         --zone us-east1-b
    
  3. 建立包含節點群組的對應相依性標籤的節點相依性檔案。如此可確保僅在包含所有這些標籤的節點上建立 VM。例如:

     // CREATE AFFINITY LABEL FILE
     cat > node-affinity-prod.json
     [{
       "key" : "workload",
       "operator" : "IN",
       "values" : ["front-end"]
       },
       {
       "key" : "environment",
       "operator" : "IN",
        "values" : ["prod"]
      },
      {
        "key" : "compute.googleapis.com/node-server-binding-type",
        "operator" : "IN",
        "values" : "restart-node-on-minimal-server"
      }]
    
  4. 啟動 VM 執行個體並指定相依性標籤檔案。例如,以下要求會使用匯入的映像檔,在 us-east1-b 區域中建立一個具有 4 個 CPU、8 GB 記憶體的 VM。此外,它也會設定 --restart-on-failure- 標記和 terminate 的維護政策,這是使用您自己的授權建立的 VM 目前唯一可接受的政策。

     gcloud compute instances create my-vm \
         --custom-cpu 4 --custom-memory 8 \
         --image my-imported-image \
         --zone us-east1-b \
         --node-affinity-file node-affinity-prod.json \
         --restart-on-failure --maintenance-policy terminate
    

API

  1. 建立節點範本並設定 RESTART_NODE_ON_MINIMAL_SERVERS 屬性。此外,也請為您的執行個體選擇節點相依性標籤。例如:

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/nodeTemplates
    
    {
       "name": "[TEMPLATE_NAME]",
       "nodeType": "[NODE_TYPE]"
       "nodeAffinityLabels": {
          "[KEY]": "[VALUE]"
       },
       "serverBinding":
       {
         "type": "RESTART_NODE_ON_MINIMAL_SERVERS"
       }
    }
    

    其中:

    • [PROJECT_ID] 是您的專案 ID。
    • [TEMPLATE_NAME] 是新節點範本的名稱。
    • [NODE_TYPE] 是您要用於此範本的節點類型。例如,您可以指定 n1-node-96-624 節點類型來建立一個具有 96 個 vCPU 和 624 GB 記憶體的節點。
    • [KEY]:[VALUE] 是以逗號分隔的相依性標籤清單。
    • [REGION] 是您要使用此範本的地區。
  2. 建立節點範本後,請建立節點群組。請使用 compute.nodeGroups.insert 方法:

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/nodeGroups?initialNodeCount=[TARGET_SIZE]
    
    {
     "nodeTemplate": "regions/[REGION]/nodeTemplates/[TEMPLATE_NAME]",
     "name": "[GROUP_NAME]"
    }
    

    其中:

    • [PROJECT_ID] 是您的專案 ID。
    • [ZONE] 是此節點群組的所在區域。此區域必須與您使用的節點範本位於同一個地區。
    • [TARGET_SIZE] 是您要在群組中建立的節點數。
    • [REGION] 是節點範本的所在地區。
    • [TEMPLATE_NAME] 是新節點範本的名稱。
    • [GROUP_NAME] 是新節點群組的名稱。
    • [TEMPLATE_NAME] 是您要用於建立此群組的節點範本的名稱。
  3. 建立節點群組後,您可以使用 compute.instances.insert 方法在節點群組中建立執行個體。請指定指向節點群組名稱的 nodeAffinities 項目。舉例來說,您可以使用自訂機器類型來建立執行個體:

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances
    
    {
     "machineType": "zones/[ZONE]/machineTypes/custom-[VCPUS]-[MEMORY]",
     "name": "[INSTANCE_NAME]",
     "scheduling": {
      "nodeAffinities": [
       {
        "key": "compute.googleapis.com/node-server-binding-type",
        "operator": "IN",
        "values": [
         "restart-node-on-minimal-server"
        ]
       }
      ]
     },
     "networkInterfaces": [
      {
       "network": "global/networks/[NETWORK]",
       "subnetwork": "regions/[REGION]/subnetworks/[SUBNETWORK]"
      }
     ],
     "disks": [
      {
       "boot": true,
       "initializeParams": {
        "sourceImage": "projects/[IMAGE_PROJECT]/global/images/family/[IMAGE_FAMILY]"
       }
      }
     ]
    }
    

    其中:

    • [PROJECT_ID] 是您的專案 ID。
    • [INSTANCE_NAME] 是新執行個體的名稱。
    • [ZONE] 是您節點群組的所在區域。
    • [REGION] 是節點範本與您子網路的所在地區。
    • [IMAGE_FAMILY] 是可用的映像檔系列之一。
    • [IMAGE_PROJECT] 是映像檔系列所屬的映像檔專案。
    • [GROUP_NAME] 是您要在其中尋找此執行個體的節點群組的名稱。
    • [VCPUS] 是您要與此執行個體搭配使用的 vCPU 數。
    • [MEMORY] 是執行個體的記憶體量,以 MB 為單位。舉例來說,您可以指定 5376 MB。
    • [NETWORK] 是您的執行個體要連線的網路名稱。
    • [SUBNETWORK] 是您的執行個體要連線的子網路名稱。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件