將非代管 VM 分組


非代管執行個體群組是虛擬機器 (VM) 執行個體的集合,這些執行個體位於單一專案、區域、VPC 網路和子網路中。非代管執行個體群組適合用來將需要個別設定或調整的 VM 分組。您可以在負載平衡器的後端服務中使用非代管執行個體群組。

如果 VM 需要一致的設定,您可以根據執行個體範本使用代管執行個體群組 (MIG)。如有可能,請考慮使用代管執行個體群組,而非未代管的執行個體群組。如要建立代管執行個體群組,請參閱建立 MIG

您可以將任一類型的執行個體群組新增為 Google Cloud負載平衡器的後端。詳情請參閱 Cloud Load Balancing 總覽。如要瞭解 Cloud Load Balancing 支援的每個執行個體群組 VM 數量,請參閱「每個執行個體群組的 VM」。

如要進一步瞭解執行個體群組,請參閱執行個體群組總覽

事前準備

  • 閱讀這篇文章,瞭解代管與非代管執行個體群組之間的差異。
  • 如果尚未設定驗證,請先完成設定。 「驗證」是指驗證身分的程序,確認您有權存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

      1. After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      2. Set a default region and zone.
      3. REST

        如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

          After installing the Google Cloud CLI, initialize it by running the following command:

          gcloud init

          If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。

使用非代管執行個體群組

建立群組

非代管執行個體群組與代管執行個體群組不同,是由不同的 VM 集合而成,且彼此間不會共用同一個的執行個體範本。因此您只能單純建立群組,再加入個別 VM 至群組中。

主控台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance Groups」(執行個體群組) 頁面

  2. 點選「建立執行個體群組」
  3. 按一下「新增非代管執行個體群組」
  4. 輸入非代管執行個體群組的名稱。
  5. 在「Location」(位置) 下方,選取區域和可用區。
  6. 選取「網路」和「子網路」
  7. 在「VM instances」(VM 執行個體) 底下,選取要新增至這個群組的 VM。
  8. 點選「建立」

gcloud

如要建立新的非代管執行個體群組,請使用 instance-groups unmanaged create 指令:

gcloud compute instance-groups unmanaged create instance-group-name \
    --zone=zone

更改下列內容:

  • instance-group-name:要建立的群組名稱。
  • zone:要建立群組的區域。

REST

如要使用 REST 建立非代管執行個體群組,請使用 instanceGroups.insert 方法傳送 POST 要求:

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups

{
   "name": "instance-group-name"
}

更改下列內容:

  • instance-group-name:要建立的群組名稱。
  • zone:要建立群組的區域。
  • project-id:含有群組的專案專案 ID。

使用 Google Cloud CLI 或 REST 建立新的非受管理執行個體群組時,系統不會自動將 VM 加入其中。您可以手動將 VM 新增至非代管執行個體群組

列出並說明群組

擷取現有非代管執行個體群組的清單。

主控台

在 Google Cloud 控制台中,「Instance groups」(執行個體群組) 頁面會列出既有的非代管和代管執行個體群組

前往「Instance Groups」(執行個體群組) 頁面

gcloud

如要使用 Google Cloud CLI 列出專案中的所有非代管執行個體群組,請使用 instance-groups unmanaged list

gcloud compute instance-groups unmanaged list

如要查看特定非代管執行個體群組的相關資訊,請使用 instance-groups unmanaged describe 指令:

gcloud compute instance-groups unmanaged describe instance-group-name \
   --zone=zone

更改下列內容:

  • instance-group-name:要說明的群組名稱。
  • zone:群組的可用區。

REST

如要使用 REST 列出執行個體群組,請使用 instanceGroups.list 方法傳送 GET 要求:

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups

如要透過 API 取得特定非代管執行個體群組的相關資訊,請使用 instanceGroups.get 方法傳送 GET 要求:

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name

更改下列內容:

  • instance-group-name:要說明的群組名稱。
  • zone:群組的可用區。
  • project-id:含有群組的專案專案 ID。

正在刪除群組

與代管執行個體群組不同的是,刪除非代管執行個體群組並不會刪除該群組內的任何 VM,刪除非代管執行個體群組只會移除 VM 的邏輯分組。

如果執行個體群組是Google Cloud 負載平衡器的後端,就無法刪除。您必須先從後端服務中移除後端

主控台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance Groups」(執行個體群組) 頁面

  2. 從清單中選取一或多個非代管執行個體群組。
  3. 按一下「刪除」即可移除群組。系統會移除群組,但不會刪除群組中的 VM。

gcloud

如要刪除非代管執行個體群組,請使用 instance-groups unmanaged delete 指令:

gcloud compute instance-groups unmanaged delete instance-group-name \
    --zone=zone

更改下列內容:

  • instance-group-name:要刪除的群組名稱。
  • zone:群組的可用區。

REST

如要使用 REST 刪除非代管執行個體群組,請使用 instanceGroups.delete 方法傳送 DELETE 要求:

DELETE https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name

更改下列內容:

  • instance-group-name:要刪除的群組名稱。
  • zone:群組的可用區。
  • project-id:含有群組的專案專案 ID。

群組成員資格

新增 VM

建立非代管執行個體群組後,可以將 VM 新增到群組中。不過,只有在每個 VM 的第一個或唯一網路介面 (nic0) 附加至相同 VPC 網路時,您才能將 VM 分組。您最多可將 2,000 個 VM 新增至非代管執行個體群組。如要將超過 2,000 部 VM 新增至群組,請與支援團隊聯絡

主控台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance Groups」(執行個體群組) 頁面

  2. 在清單的「Name」(名稱) 欄下方,按一下要新增虛擬機的執行個體群組名稱。系統隨即開啟一個頁面,頁面中包含執行個體群組的屬性及群組包含之 VM 的清單。
  3. 按一下「編輯」來修改這個非代管執行個體群組。
  4. 在「VM instances」(VM 執行個體) 下方,選取一或多個現有的 VM 以新增至群組。您只能選取與現有 VM 位於相同可用區、虛擬私有雲網路和子網路的 VM。
  5. 按一下「儲存」,將新的 VM 新增至群組。

gcloud

如要將執行個體新增至非代管執行個體群組,請使用 instance-groups unmanaged add-instances 指令:

gcloud compute instance-groups unmanaged add-instances instance-group-name \
    --zone=zone \
    --instances=list-of-VM-names

更改下列內容:

  • instance-group-name:要新增 VM 的群組名稱。
  • zone:群組的可用區。
  • list-of-VM-names:以半形逗號分隔的清單,列出位於相同區域、虛擬私有雲網路和子網路中的虛擬機器。

REST

如要將 VM 新增至非代管執行個體群組,請使用 instanceGroups.addInstances 方法傳送 POST 要求:

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/addInstances

   {
      "instances": [
         {
         "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-1-name",
         "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-2-name",
         ....
         }
      ]
   }

更改下列內容:

  • instance-group-name:要新增 VM 的群組名稱。
  • zone:群組的可用區。
  • project-id:含有群組的專案專案 ID。
  • instance-1-nameinstance-2-name:這是要新增至群組的 VM 名稱,這些 VM 位於相同可用區、虛擬私有雲網路和子網路。

列出 VM

您可以擷取非代管執行個體群組中的成員 VM 清單。

主控台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance Groups」(執行個體群組) 頁面

  2. 在清單的「Name」(名稱) 欄下方,按一下要檢視的非代管執行個體群組名稱。系統隨即開啟一個頁面,頁面中包含群組包含之執行個體的清單。

gcloud

如要列出非代管執行個體群組中的 VM,請使用 instance-groups unmanaged list-instances 指令:

gcloud compute instance-groups unmanaged list-instances instance-group-name \
   --zone=zone

更改下列內容:

  • instance-group-name:要列出成員的群組名稱。
  • zone:群組的可用區。

REST

如要列出非代管執行個體群組中的 VM,請使用 instanceGroups.listInstances 方法傳送 POST 要求:

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/listInstances

更改下列內容:

  • instance-group-name:要列出成員的群組名稱。
  • zone:群組的可用區。
  • project-id:含有群組的專案專案 ID。

移除 VM

您可以從非代管執行個體群組中移除 VM。從執行個體群組中移除 VM 不會刪除 VM。

主控台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance Groups」(執行個體群組) 頁面

  2. 確認您要移除哪些 VM,然後在清單的「Name」(名稱) 欄底下,按一下其所屬執行個體群組的名稱。系統隨即開啟一個頁面,頁面中包含執行個體群組的屬性及群組包含之 VM 的清單。
  3. 在清單中,選取一或多個要從群組中移除的 VM。
  4. 按一下 [Remove from group] (從群組中移除)。從非代管執行個體群組中移除的 VM 會繼續存在並執行,除非您停止或刪除這些 VM。

gcloud

如要從非代管執行個體群組中移除 VM,請使用 instance-groups unmanaged remove-instances 指令:

gcloud compute instance-groups unmanaged remove-instances instance-group-name \
    --zone=zone \
    --instances=list-of-VM-names

更改下列內容:

  • instance-group-name:包含要移除執行個體的群組名稱。
  • zone:群組的可用區。
  • list-of-VM-names:以半形逗號分隔的 VM 清單,列出要從群組中移除的 VM。

REST

如要從非代管執行個體群組中移除 VM,請使用 instanceGroups.removeInstances 方法傳送 POST 要求。您可以同時移除多部 VM,如下所示:

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/removeInstances
{
    "instances": [
        {
        "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-1-name",
        "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-2-name",
        ....
        }
    ]
}

更改下列內容:

  • instance-group-name:包含要移除執行個體的群組名稱。
  • zone:群組的可用區。
  • project-id:含有群組的專案專案 ID。
  • instance-1-nameinstance-2-name:這些是要從群組取消關聯的 VM 名稱。

使用具名通訊埠

已命名的通訊埠為鍵/值組合,代表通訊埠的名稱和編號。連接埠名稱代表服務或應用程式的名稱。通訊埠編號代表服務或應用程式執行的通訊埠。

Cloud Load Balancing 會使用已命名通訊埠。做為 Proxy 的負載平衡器會在後端服務設定中訂閱單一具名連接埠。系統會根據各執行個體群組後端的已命名通訊埠對應,將通訊埠名稱轉換為通訊埠編號。

舉例來說,後端服務可以訂閱名為 http-port 的通訊埠。後端執行個體群組可以有名為 http-port:80 的通訊埠。後端執行個體群組會指示負載平衡器使用通訊協定 (例如 TCP),將流量傳送至群組中通訊埠 80 的 VM。通訊協定是在負載平衡器的後端服務中定義。

已命名通訊埠是Proxy 負載平衡器使用的簡單中繼資料,無法控制 Compute Engine 中的網路或防火牆資源。

已命名通訊埠的多個通訊埠編號

您可以為每個服務名稱指派數個通訊埠。您也可以為每個通訊埠指派數個服務名稱。

請注意下列幾點:

  • 系統會在所有通訊埠名稱相同的通訊埠之間平衡流量。
  • 一個後端服務一次只能轉送流量至一個已命名通訊埠。
  • 如果您為已命名的通訊埠使用多個通訊埠號碼,這些通訊埠都必須用於同一個應用程式。

    舉例來說,http:80,http:8080 可行,但 http:80,http:443 不可行,因為通訊埠 80 一般不支援 TLS。

您可以在執行個體群組中指派多個已命名通訊埠。舉例來說,假設後端服務訂閱了名為 http-port 的通訊埠,且有兩個後端執行個體群組:

  • instance-group-a,並具備名為 http-port:80 的通訊埠
  • instance-group-b,並具備名為 http-port:79 的通訊埠

這項後端服務會將流量傳送至 instance-group-a 中 VM 的通訊埠 80,以及 instance-group-b 中 VM 的通訊埠 79。

如果您將同一個執行個體群組新增至多個後端服務 (適用於多個負載平衡器),且執行個體群組在每個負載平衡器上提供不同的通訊埠,請勿將所有通訊埠號碼新增至單一已命名的通訊埠。請改為建立專屬的已命名通訊埠,並將其對應至每個後端服務應服務的一組通訊埠。

舉例來說,假設您有三個應用程式,每個應用程式都有自己的負載平衡器。每個應用程式都有專屬的通訊埠編號:app1 為 81、app2 為 82,app3 則為 83。假設這三項後端服務都使用通用執行個體群組,請將此執行個體群組的已命名通訊埠指派為 [app1:81, app2:82, app3:83]

已命名的通訊埠和健康狀態檢查

如要讓後端服務上具有多個通訊埠編號的具名通訊埠,在外部應用程式負載平衡器或內部應用程式負載平衡器中運作,健康狀態檢查必須具有 --use-serving-port 標記,而非特定通訊埠編號。 Google Cloud 控制台不提供這個選項。如要設定 --use-serving-port,請使用 Google Cloud CLI 或 API。

舉例來說,假設您有一個應用程式,可透過單一執行個體群組,在同一個後端服務上,對三個不同通訊埠 (81、82、83) 的流量進行負載平衡。您可以將這個執行個體群組的通訊埠指派為 [app:81, 82, 83]。在這種情況下,健康狀態檢查必須有 --use-serving-port 標記。

詳情請參閱負載平衡健康狀態檢查說明文件

具名通訊埠和防火牆規則

具名通訊埠不會建立或修改 Google Cloud 防火牆規則。如要允許流量進入後端 VM,您仍須建立必要的防火牆規則。

已命名的通訊埠和後端服務

除了執行個體群組設定外,您也必須設定後端服務。舉例來說,假設您在執行個體群組中設定的具名通訊埠名稱為 my-service-name,通訊埠為 8888

gcloud compute instance-groups set-named-ports my-unmanaged-ig \
    --named-ports=my-service-name:8888

然後,您必須在後端服務設定中參照具名連接埠,並將後端服務上的 --port-name 設為 my-service-name

gcloud compute backend-services update my-backend-service \
    --port-name=my-service-name

建立具名通訊埠

主控台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance Groups」(執行個體群組)

  2. 在清單的「Name」(名稱) 欄下方,按一下要在其中指定已命名通訊埠的執行個體群組名稱。按一下名稱會開啟包含執行個體群組屬性的頁面。
  3. 按一下「編輯」來修改這個非代管執行個體群組。
  4. 在「Port mapping」(通訊埠對應) 專區中,按一下「Add port」(新增通訊埠),然後輸入通訊埠名稱和編號。視需要新增或移除其他具名連接埠。
  5. 按一下「儲存」,更新非代管執行個體群組的具名通訊埠清單。

gcloud

如要將已命名的通訊埠新增至非代管執行個體群組,請使用 instance-groups unmanaged set-named-ports 指令

gcloud compute instance-groups unmanaged set-named-ports instance-group-name \
    --zone=zone \
    --named-ports=port-name:port-number,...

如要列出非代管執行個體群組中的具名通訊埠,請使用 instance-groups unmanaged get-named-ports 指令

使用 set-named-ports 指令設定一或多個已命名通訊埠:

gcloud compute instance-groups unmanaged set-named-ports INSTANCE_GROUP \
      --named-ports PORT_NAME:PORT,PORT_NAME:PORT

例如:

gcloud compute instance-groups unmanaged set-named-ports INSTANCE_GROUP \
      --named-ports name1:80,name2:8080

如需為每個服務名稱指派數個通訊埠,或是為每個服務指派數個名稱,請為每個名稱或通訊埠建立一個以上的項目。舉例來說,如果通訊埠 102080 適用於同一個應用程式,您可以將 name1 指派給所有這些通訊埠。此外,您也可以將兩個名稱 name2name3 指派給通訊埠 8080。最後,您可以將通訊埠 9000 指派到 name4,如以下範例所示:

gcloud compute instance-groups unmanaged set-named-ports INSTANCE_GROUP \
      --named-ports name1:10,name1:20,name1:80,\
                    name2:8080,name3:8080,\
                    name4:9000

如要使用 Google Cloud CLI 從非代管執行個體群組中移除所有已命名通訊埠,請使用 instance-groups unmanaged set-named-ports,並提供空白的已命名通訊埠清單:

gcloud compute instance-groups unmanaged set-named-ports instance-group-name \
    --zone=zone \
    --named-ports=""

在上述所有範例中,請視需要替換下列項目:

  • instance-group-name:執行個體群組的名稱。
  • zone:群組的可用區。
  • port-nameport-number: 通訊埠名稱和編號代表從您選擇的名稱到通訊埠編號的對應。您可以指定多個以半形逗號分隔的對應項,例如 port-one:80,port-two:8080 是有效的具名通訊埠清單。

REST

  1. 說明執行個體群組,並記下 fingerprint

  2. 如要新增具名通訊埠,請使用 instanceGroups.setNamedPorts 方法傳送 POST 要求。如要移除所有具名連接埠,請將 namedPorts 設為空清單。

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/setNamedPorts
    
    {
        "fingerprint": "fingerprint",
        "namedPorts": [
            {
            "name": "port-name",
            "port": port-number
            },
            {
            "name": "port-name",
            "port": port-number
            },
            ....
        ]
    }
    

    更改下列內容:

    • instance-group-name:執行個體群組的名稱。
    • zone:群組的可用區。
    • project-id:含有群組的專案專案 ID。
    • port-nameport-number:通訊埠名稱和編號代表從您選擇的名稱到通訊埠編號的對應。
    • fingerprint:這是上一個步驟中的指紋。

後續步驟