非代管執行個體群組是一組虛擬機器 (VM) 執行個體,位於單一專案、可用區、虛擬私有雲網路和子網路中。非代管執行個體群組適合用來將需要個別設定或調整的 VM 分組。您可以在負載平衡器的後端服務中使用非受管執行個體群組。
如果 VM 需要一致的設定,您可以根據執行個體範本,使用代管執行個體群組 (MIG)。如有可能,請考慮使用代管執行個體群組,而非非代管執行個體群組。如要建立代管執行個體群組,請參閱「建立 MIG」。
您可以將任一類型的執行個體群組新增為負載平衡器的後端。 Google Cloud 詳情請參閱「Cloud Load Balancing 總覽」。如要瞭解 Cloud Load Balancing 支援的每個執行個體群組 VM 數量,請參閱「每個執行個體群組的 VM 數量」。
如要進一步瞭解執行個體群組,請參閱「執行個體群組總覽」。
事前準備
- 閱讀這篇文章,瞭解代管與非代管執行個體群組之間的差異。
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
選取這個頁面上範例的預計用途分頁:
控制台
使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,不需要設定驗證。
gcloud
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
- 設定預設區域和可用區。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。
使用非代管執行個體群組
建立群組
與代管執行個體群組不同,非代管執行個體群組只是一組不同的 VM,不會共用執行個體範本。只要建立群組,然後將個別 VM 新增至群組即可。
控制台
- 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 點選「建立執行個體群組」。
- 按一下「New unmanaged instance group」(新增非代管的執行個體群組)。
- 輸入非代管執行個體群組的名稱。
- 在「Location」(位置) 下方,選取區域和可用區。
- 選取「網路」和「子網路」。
- 在「VM instances」(VM 執行個體) 底下,選取要新增至這個群組的 VM。
- 點選「建立」。
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」(執行個體群組) 頁面會列出既有的非受管理和受管理執行個體群組。
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 負載平衡器的後端,就無法刪除。您必須先從後端服務中移除後端。
控制台
- 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 從清單中選取一或多個未受管理執行個體群組。
- 按一下「刪除」即可移除群組。系統會移除群組,但不會刪除群組中的 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 部 VM 新增至群組,請與支援團隊聯絡。
控制台
- 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 在清單的「Name」(名稱) 欄底下,按一下要新增 VM 的執行個體群組名稱。系統隨即開啟一個頁面,頁面中包含執行個體群組的屬性及群組包含之 VM 的清單。
- 按一下「編輯」,修改這個非代管執行個體群組。
- 在「VM instances」(VM 執行個體) 下方,選取要新增至群組的一或多個現有 VM。只能選取與現有 VM 位於相同可用區、虛擬私有雲網路和子網路的 VM。
- 按一下「儲存」,將新的 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-name和instance-2-name:這些是 VM 的名稱,位於相同可用區、虛擬私有雲網路和子網路中,您要將這些 VM 新增至群組。
列出 VM
您可以擷取非代管執行個體群組中的成員 VM 清單。
控制台
- 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 在清單的「名稱」欄底下,按一下要查看的非受管理執行個體群組名稱。系統隨即顯示頁面,內含群組包含的執行個體清單。
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。
控制台
- 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 在清單的「Name」(名稱) 欄底下,按一下要移除 VM 的執行個體群組名稱。系統隨即開啟一個頁面,頁面中包含執行個體群組的屬性及群組包含之 VM 的清單。
- 在清單中,選取要從群組移除的一或多個 VM。
- 按一下 [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-name和instance-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
建立具名通訊埠
控制台
- 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 在清單的「名稱」欄下方,按一下要指定具名連接埠的執行個體群組名稱。按一下名稱會開啟包含執行個體群組屬性的頁面。
- 按一下「編輯」,修改這個非代管執行個體群組。
- 在「Port mapping」(通訊埠對應) 部分,按一下「Add port」(新增通訊埠),然後輸入通訊埠名稱和編號。視需要新增或移除其他已命名的通訊埠。
- 按一下「儲存」,更新非代管執行個體群組的具名連接埠清單。
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如需為每個服務名稱指派數個通訊埠,或是為每個服務指派數個名稱,請為每個名稱或通訊埠建立一個以上的項目。舉例來說,如果連接埠 10、20 和 80 適用於同一個應用程式,您可以將 name1 指派給所有這些連接埠。此外,您可能會將兩個名稱 (name2 和 name3) 指派給通訊埠 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-name和port-number: 通訊埠名稱和編號代表從您選擇的名稱到通訊埠編號的對應。您可以指定多個對應 (以半形逗號分隔),例如port-one:80,port-two:8080是有效的具名通訊埠清單。
REST
描述執行個體群組,並記下 fingerprint。
如要新增具名通訊埠,請使用 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-name和port-number:通訊埠名稱和編號代表從您選擇的名稱到通訊埠編號的對應。fingerprint:這是上一個步驟中的指紋。