將非代管 VM 分組


非代管執行個體群組是位於單一專案、區域、VPC 網路和子網路中的虛擬機器 (VM) 執行個體集合。非代管執行個體群組可用於將需要個別設定或調整的 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.

    REST

    To use the REST API samples on this page in a local development environment, you use the credentials you provide to the 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.

    For more information, see Authenticate for using REST in the Google Cloud authentication documentation.

使用非代管執行個體群組

建立群組

非代管執行個體群組與代管執行個體群組不同,是由不共用同一個執行個體範本的不同 VM 集合而成。您只需建立群組,然後將個別 VM 新增至群組即可。

主控台

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

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

  2. 點選「建立執行個體群組」
  3. 按一下「New unmanaged instance group」(新增非代管的執行個體群組)
  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) 附加至相同的虛擬私有雲網路,才能將 VM 分組。您最多可在非代管執行個體群組中新增 2,000 個 VM。如要將超過 2,000 部虛擬機新增至群組,請與支援團隊聯絡

主控台

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

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

  2. 在清單的「Name」欄下方,按一下要新增 VM 的執行個體群組名稱。系統隨即開啟一個頁面,頁面中包含執行個體群組的屬性和群組內 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:以半形逗號分隔的清單,其中包含位於相同區域、虛擬私有雲網路和子網路中的 VM。

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 的執行個體群組名稱。系統隨即開啟一個頁面,頁面中包含執行個體群組的屬性及群組包含之 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。

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:這是上一個步驟的指紋。

後續步驟