有幾種問題會導致代管執行個體群組 (MIG) 無法順利建立或重建 VM 執行個體。
如果系統為已刪除的 MIG 產生記錄
問題可能與下列情況有關。
仍有附加的自動調度器
如果您使用 Compute Engine API 刪除 MIG,但未另外發出要求刪除附加的自動配置器,Logs Explorer 可能會顯示含有下列訊息的記錄。
The resource 'projects/PROJECT/zones/ZONE/instanceGroupManagers/DELETED_INSTANCE_GROUP_NAME' was not found.
解決方法:
如要解決這個問題,請使用 Compute Engine API 方法刪除附加的自動配置器:
- 如果是區域 MIG 的自動調度器,請使用
autoscalers.delete方法。 - 如果是區域 MIG 的自動配置器,請使用
regionAutoscalers.delete方法。
如果 MIG 無法建立或重新建立執行個體
問題可能與下列情況有關。
開機磁碟已存在
根據預設,建立執行個體時,系統會建立新的開機永久磁碟。開機磁碟的名稱與 VM 名稱相符。如果將 VM 命名為 my-instance,磁碟也會命名為 my-instance。如果已有永久磁碟使用這個名稱,要求就會失敗。如要解決這個問題,您可以選擇拍攝快照,然後刪除現有永久磁碟。
執行個體範本無效
如果您最近更新了執行個體範本,可能會出現無效的屬性,導致 MIG 無法建立 VM。檢查這些常見錯誤的屬性:
- 您指定了不存在的資源,例如來源映像檔。
- 資源名稱拼字有誤。
- 您嘗試在讀寫模式下連結現有的非開機永久磁碟,但群組包含多個 VM。如果群組有多個 VM,如要連結其他任何磁碟,讓群組中的所有 VM 共用,您必須使用唯讀模式。
資源類型超出上限
嘗試在區域 MIG 中建立超過 2,000 個 VM,或在可用區 MIG 中建立超過 1,000 個 VM 時,會發生下列錯誤。執行個體群組大小已達上限。
錯誤訊息:
ERROR: (gcloud.compute.<INSTANCE_GROUP_TYPE>.<METHOD>) Could not fetch resource: - Exceeded limit 'MAX_INSTANCES_IN_INSTANCE_GROUP' on resource 'PROJECT_ID'. Limit: NUMBER
解決方法:
如要解決這個問題,請嘗試下列其中一種方法:
- 如果您使用的是可用區 MIG,請改用區域 MIG。
- 建立多個 MIG,並將工作負載分散到這些 MIG 中,例如調整負載平衡設定。
- 如果仍需要更大的群組,可以提高 MIG 的大小限制,或聯絡支援團隊提出要求。
如果無法刪除 MIG 或其執行個體
這個問題可能與下列情況有關。
在區域或地區中找不到資源
嘗試刪除區域性 MIG 時,如果指定 --zone 旗標、未指定區域或指定錯誤區域,就會發生下列錯誤。如果您嘗試刪除區域性 MIG,並指定 --region 旗標,也可能會發生類似錯誤。
錯誤訊息:
ERROR: (gcloud.compute.instance-groups.managed.delete) Some requests did not succeed: ‐ The resource 'projects/PROJECT/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME' was not found
ERROR: (gcloud.compute.instance-groups.managed.delete) Some requests did not succeed: ‐ The resource 'projects/PROJECT/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME' was not found
解決方法:
如要解決這個問題,請嘗試下列其中一種方法:
- 在指令中附加適當的
--region或--zone旗標 - 設定預設地區和區域
資源由後端服務使用
如果執行個體群組正在供負載平衡器的後端服務使用,您就無法移除該群組。您必須先從後端服務中移除執行個體,才能刪除執行個體群組。
錯誤訊息:
ERROR: (gcloud.compute.instance-groups.managed.delete) Some requests did not succeed: ‐ The instance_group_manager resource 'projects/PROJECT/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME is already being used by 'projects/PROJECT/global/backendServices/BACKEND_SERVICE
ERROR: (gcloud.compute.instance-groups.managed.delete) Some requests did not succeed: ‐ The instance_group_manager resource 'projects/PROJECT/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME is already being used by 'projects/PROJECT/global/backendServices/BACKEND_SERVICE
解決方法:
選用:排空後端執行個體群組。
僅限 Proxy 負載平衡器,您可以先將容量配置器設為
0.0,再從後端服務移除執行個體群組。您可以使用gcloud compute backend-services edit指令,將容量調整器設為零。無論是 Proxy 或直通負載平衡器,如果啟用後端服務的連線排除功能,當執行個體群組從後端服務中移除時, Google Cloud 會嘗試保留現有連線、完成連線並排除連線。
從區域或全域後端服務中移除 MIG。
如果是區域 MIG,請執行下列指令:
gcloud compute backend-services remove-backend BACKEND_SERVICE \ --instance-group=INSTANCE_GROUP_NAME \ --instance-group-zone=ZONE \ [--region=REGION | --global]如果是地區 MIG,請執行下列指令:
gcloud compute backend-services remove-backend BACKEND_SERVICE \ --instance-group=INSTANCE_GROUP_NAME \ --instance-group-region=REGION \ [--region=REGION | --global]
刪除 MIG:
gcloud compute instance-groups managed delete INSTANCE_GROUP_NAME
如果 MIG 持續嘗試重新建立執行個體
這個問題可能與下列情況有關。
健康狀態檢查探測器無法連線至執行個體
如果您已設定自動修復政策,但未設定或誤設防火牆規則,導致健康狀態檢查探測無法連至應用程式,則 VM 會顯示為健康狀態不良,且 MIG 會持續嘗試重新建立 VM。如要瞭解如何設定健康狀態檢查防火牆規則,請參閱健康狀態檢查設定範例。
如果 MIG 的可用區分配不均,或使用非預期的機器類型
如果地區性 MIG 或具有執行個體彈性的 MIG 正在運作,但您懷疑執行個體並未如預期分配到各個區域,或群組依賴備援機器類型,則可以監控已成功佈建的執行個體實際分配情形。
如要監控 MIG 的執行階段執行個體分配情形,請使用 Cloud Monitoring 中的 GCE MIG 執行個體分配監控資訊主頁。請注意,這個資訊主頁是例項分配情形的觀測工具,不會找出建立失敗或容量限制的根本原因。如要進一步瞭解資訊主頁,請參閱監控 MIG 中的執行個體分配情形。
如果代管執行個體群組的執行個體彈性設定缺少缺貨記錄或出現非預期的缺貨記錄
如果 Cloud Logging 中沒有顯示預期的缺貨記錄,或如果具有執行個體彈性的 MIG 意外顯示缺貨記錄,請查看下列行為:
略過的等級不會記錄缺貨錯誤:MIG 建立 VM 前,會檢查所有執行個體選項的容量。如果偏好順序較高的機器類型無法使用,MIG 會略過這些類型,並使用偏好順序較低的可用選項佈建執行個體。由於 Compute Engine 只會在 VM 建立失敗時記錄
ZONE_RESOURCE_POOL_EXHAUSTED錯誤,因此在容量檢查期間略過偏好度較高的機器類型時,您不會在 Cloud Logging 中看到缺貨錯誤。VM 修復作業可能會記錄原始機型的缺貨錯誤:如果啟用修復時更新,MIG 會嘗試使用原始機型重新建立失敗的 VM,同時檢查替代機型的可用性。因此,即使代管執行個體群組 (MIG) 正在檢查或使用替代機型,您仍可能會看到原始機型的缺貨錯誤。
詳情請參閱「容量評估和錯誤記錄」。