建立代管執行個體群組

這個頁面說明如何在區域中建立一組代管執行個體,也就是所謂的代管執行個體群組。代管執行個體群組包含相同的執行個體,可做為單一實體進行管理。這類群組會主動讓執行個體保持可用 (即處於 RUNNING 狀態),以維持應用程式的高可用性,並且支援自動調度資源、負載平衡、輪動式更新、自動修復等。

您也可以建立地區代管執行個體群組,其中包含同一地區內多個區域中的執行個體。如要瞭解執行個體群組,請參閱執行個體群組總覽一文。

事前準備

限制

  • 每個代管執行個體群組最多可包含 1000 個 VM 執行個體。
  • 更新代管執行個體群組時,一個要求中不能指定超過 1000 個執行個體。

使用代管執行個體群組支援無狀態應用程式

代管執行個體群組旨在支援執行不依賴基礎 VM 執行個體特定狀態的無狀態應用程式。 這可讓您使用自動調度資源與自動修復等功能,如此一來,代管執行個體群組就可以自動刪除及重新建立執行個體。此外,如果因為使用者在自動修復程序中的操作,或是由於執行個體未設為即時移轉以致發生基礎架構維護的狀況,而造成代管執行個體群組中的某個執行個體遭到刪除,執行個體群組會自動重新建立一個含有新的永久根磁碟的執行個體。

基於代管執行個體群組的無狀態性質,您應設計或更新您的應用程式,使其不依賴不會保存的特定執行個體屬性,例如 IP 位址或記憶體內資料。同樣的,開機永久磁碟的預設行為是在對應 VM 執行個體遭刪除時予以刪除,因此,您不應依賴開機磁碟做為代管執行個體群組中的持續性資料。

如要保留資料,Google 建議您最好的方式就是定期將 OS 映像檔更新至最新版本、使用開機指令碼,以及將資料集中備份在 Google Cloud Storage 等其他位置。

在執行個體範本中,您可以指定容器映像檔自訂映像檔以及相關開機指令碼,如此一來,在重新建立執行個體時,必要的軟體應用程式即已安裝好,重新建立的執行個體也立即擁有必要資料的存取權。 如需建立執行個體範本的更多建議,請參閱確定性執行個體範本

如果您認為需要保留與代管執行個體群組相關的開機磁碟,停用 disks.autoDelete 選項就可避免刪除開機永久磁碟,但請注意,這個選項會導致代管執行個體群組無法建立新執行個體,因此不建議使用。

建立代管執行個體群組

建立代管執行個體群組之前,您必須建立執行個體範本,為群組中的每個執行個體指定作業系統映像檔或容器映像檔以及相關設定。

建立範本之後,請透過 Google Cloud Platform 主控台gcloud compute 工具API 建立代管執行個體群組。

主控台

  1. 前往 GCP 主控台的「Instance Groups」(執行個體群組) 頁面。

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

  2. 按一下 [Create an instance group] (建立執行個體群組)。
  3. 輸入代管執行個體群組的名稱,並選取群組所在的區域。
  4. 在「Group type」(群組類型) 底下,選取 [Managed instance group] (代管執行個體群組)
  5. 在「Instance template」(執行個體範本) 底下,選取一個執行個體範本。若沒有可用的範本,請自行建立執行個體範本
  6. 指定要在群組中建立的執行個體數量。您也可以啟用「自動調度資源」,使群組可根據執行個體 CPU 使用量自動新增或移除執行個體,或者啟用「自動修復」,針對執行個體群組中的執行個體執行健康狀態檢查。
  7. 按一下 [Create] (建立),建立新群組。

gcloud

使用 instance-groups managed create 指令建立執行個體群組。

gcloud compute instance-groups managed create [NAME] \
    --base-instance-name [BASE_NAME] \
    --size [SIZE] \
    --template [INSTANCE_TEMPLATE] \
    --zone [ZONE]

指令中應由實際資料取代的指令碼如下:

  • [NAME] 替換為這個執行個體群組的名稱。
  • [BASE_NAME] 替換為在這個執行個體群組中建立之執行個體所使用的名稱。由於這些執行個體都一樣,因此,系統會為執行個體指派隨機字串並附加在執行個體名稱中,同時會將基礎名稱加在隨機字串前。例如,如果基礎名稱是 example,執行個體的名稱則為 example-yahs, example-qtyz 等。
  • [SIZE] 替換為執行個體群組的大小。
  • [INSTANCE_TEMPLATE] 替換為這個群組所用執行個體範本的名稱。
  • [ZONE] 是 Compute Engine 可用的其中一個區域

    例如,下列指令會建立名為 example-group 的執行個體群組,其基礎執行個體名稱為 test。這個群組包含三個執行個體:

    gcloud compute instance-groups managed create example-group
    --base-instance-name test
    --size 3
    --template an-instance-template

API

在 API 中,向 instanceGroupManagers 服務建構 POST 要求。在要求主體中包含所需的群組名稱、群組大小、群組中執行個體的基礎名稱,以及執行個體範本的網址。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

{
  "baseInstanceName": "[BASE_NAME]",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE]"
    }
  ],
  "name": "[NAME]",
  "targetSize": [SIZE]
}

指令中應由實際資料取代的指令碼如下:

  • [PROJECT_ID] 替換為要求的專案 ID。
  • [ZONE] 替換為要求的區域。
  • [NAME] 替換為這個執行個體群組的名稱。
  • [BASE_NAME] 替換為在這個執行個體群組中建立之執行個體所使用的名稱。由於這些執行個體都一樣,因此,系統會為執行個體指派隨機字串並附加在執行個體名稱中,同時會將基礎名稱加在隨機字串前。例如,如果基礎名稱是 example,執行個體的名稱則為 example-yahs, example-qtyz 等。
  • [SIZE] 替換為執行個體群組的大小。
  • [INSTANCE_TEMPLATE] 替換為這個群組所用執行個體範本的名稱。

擷取現有群組與群組說明

您可以使用主控台gcloud 指令行工具或 API 取得現有代管執行個體群組相關資訊。要取得該群組的 id,則必須使用 gcloud 或 API。

主控台

  1. 前往 GCP 主控台的「Instance Groups」(執行個體群組) 頁面。

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

    如果您已擁有執行個體群組,頁面會列出這些群組。請注意,這個頁面也會列出非代管執行個體群組

  2. 在清單的「Name」(名稱) 欄底下,按一下要檢查之執行個體群組的名稱。按一下名稱會開啟頁面,其中包含執行個體群組的屬性及群組內執行個體的清單。

gcloud

如要列出專案中的所有代管執行個體群組:

gcloud compute instance-groups managed list

如要取得特定群組的資訊:

gcloud compute instance-groups managed describe [INSTANCE_GROUP] \
    --zone [ZONE]

API

要列出區域內的所有代管執行個體群組,請建構一個針對 instanceGroupManagers 服務提出的 GET

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

要取得與特定群組相關的資訊,請建構一項針對 instanceGroupManagers 服務提出的 GET 要求,並且註明特定代管執行個體群組的名稱:

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]

如為地區 (多區域) 代管執行個體群組,請改用 regionInstanceGroupManagers 資源:regionInstanceGroupManagers.listregionInstanceGroupManagers.get

變更代管執行個體群組的執行個體範本

您可以變更代管執行個體群組的執行個體範本,而不必將任何變更套用至現有執行個體。當您提出新增或重新建立執行個體的要求時,代管執行個體群組會使用新範本,但範本不會自動更新群組中的現有執行個體。這可讓您完全控制更新的執行個體,但會使您的執行個體群組包含不同的執行個體。

建立新執行個體範本之後,請變更現有執行個體群組的執行個體範本。

主控台

  1. 前往 GCP 主控台的「Instance Groups」(執行個體群組) 頁面。

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

  2. 在清單的「Name」(名稱) 欄底下,找到要變更執行個體範本的執行個體群組並按一下其名稱。
  3. 按一下 [Edit Group] (編輯群組),修改這個代管執行個體群組。
  4. 在「執行個體範本」(Instance template) 底下,選取要在這個群組中使用的新執行個體範本。
  5. 按一下 [Save] (儲存),套用新範本。

gcloud

如要使用 set-instance-template 方法更新範本,請將新範本傳送至 instance-groups managed set-instance-template 子指令:

gcloud compute instance-groups managed set-instance-template [INSTANCE_GROUP] \
    --template [INSTANCE_TEMPLATE] \
    --zone [ZONE]

API

instanceGroupManagers 服務建構要求,要求中需加入目標代管執行個體群組的名稱。將新執行個體範本的網址包含在要求主體中。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers[INSTANCE_GROUP]/setInstanceTemplate

{
 "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE]
}

變更執行個體範本之後,請重新建立個別執行個體,或使用滾動式更新方式,更新群組中的所有執行個體。

自動調整代管執行個體群組的大小

您可以設定代管執行個體群組,根據執行個體的工作負載自動新增或移除執行個體。您的應用程式可緩解流量的增加,並且可在運算資源需求降低時節省成本。如要開始調度代管執行個體群組資源,請參閱自動調度執行個體群組資源一文。

手動調整代管執行個體群組的大小

若代管執行個體群組尚未設定為自動調度資源,您可手動調整群組大小,來變更群組中的執行個體數。如果您增加大小,代管執行個體群組會使用目前執行個體範本新增執行個體。如果您減少大小,代管執行個體群組會從群組中刪除執行個體。群組會先刪除 currentActionDELETINGCREATINGRECREATING 的執行個體,然後再刪除正在無排程動作的情況下執行的執行個體。

若群組屬於後端服務的一部分,且該服務已啟用連線排除,在連線排除持續時間過後,最長可能需要等待 60 秒方可移除或刪除 VM 執行個體。

您可以使用 Google Cloud Platform 主控台gcloud compute 工具API 調整代管執行個體群組的大小。

主控台

  1. 前往 GCP 主控台的「Instance Groups」(執行個體群組) 頁面。

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

  2. 在清單的「Name」(名稱) 欄底下,找到要變更群組大小的執行個體群組並按一下其名稱。
  3. 按一下 [Edit Group] (編輯群組),修改這個代管執行個體群組。
  4. 在「Number of instances」(執行個體數) 底下,指定您希望這個代管執行個體群組包含的執行個體數。若已啟用「Autoscaling」(自動調度資源),群組會視需要自動新增或移除執行個體。但是,您可以變更「Minimum number of instances」(執行個體數量下限) 與「執行個體數量上限」(Maximum number of instances) 值,透過自動配置器間接調整群組大小。
  5. 按一下 [Save] (儲存),套用新範本。

gcloud

指令的使用如下:

gcloud compute instance-groups managed resize [INSTANCE_GROUP ] \
    --size [NEW_SIZE] \
    --zone [ZONE]

API

instanceGroupManagers 服務建構要求,要求中需加入目標代管執行個體群組的名稱。請將新執行個體大小指定為參數。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/resize?size=[NEW_SIZE]

提出調整代管執行個體群組大小的要求之後,執行個體會在系統可以佈建或刪除時立即開始運作或停止。此程序可能會花費大量時間,花費時間視群組中的執行個體數而定。 請在您的代管執行個體群組中驗證執行個體狀態

停用建立重試模式

根據預設,如果初始建立虛擬機器執行個體失敗,代管執行個體群組會繼續重試建立每個執行個體,直到成功建立執行個體為止。但是,如果您不想使用自動建立重試,可在調整執行個體群組大小時提供 --nocreation-retries 標記,停用建立重試模式。 在這個模式下,代管執行個體群組只會進行一次嘗試,來建立所有執行個體。如果建立期間發生錯誤,代管執行個體群組將不會建立執行個體,而是會減小代管執行個體群組的目標大小。

只有在第一次嘗試建立執行個體期間,才會套用這個模式。如果在啟用這個模式時成功建立了執行個體,執行個體的行為會與使用一般調整大小要求建立的其他所有執行個體一樣。重要的是,如果執行中的執行個體日後意外停轉,且需要重新建立,這個模式不會影響在這種情況下重新建立的行為。

如果您的系統會自動建立不需要確切執行個體數量的執行個體群組,停用建立重試模式將特別有用。您可能會想要讓代管執行個體群組的大小快速穩定下來,但想讓群組中的執行個體數量具有彈性,而不是無限期地等到要求的所有執行個體都建立完成 (完成時間可能會因配額錯誤或其他無關問題而暫時或永久延遲)。

如要在建立重試模式停用時調整代管執行個體群組的大小,請使用 gcloud compute 工具API

gcloud

透過 gcloud 指令列工具,使用 --no-creation-retries 標記執行 resize 指令:

gcloud beta compute instance-groups managed resize [INSTANCE_GROUP] --size [NEW_SIZE] \
    --nocreation-retries \
    --zone [ZONE]

API

instanceGroupManagers 服務建構要求,要求中需加入目標代管執行個體群組的名稱。在要求主體中指定新執行個體大小與 noCreationRetries 欄位。

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/resizeAdvanced

{
 "targetSize": [SIZE]
 "noCreationRetries": true
}

您可以使用 listManagedInstances 方法查看正在建立的執行個體以及使用的模式。在建立重試模式停用時建立的執行個體狀態為 CREATING_WITHOUT_RETRIES

為代管執行個體群組設定健康狀態檢查與自動修復

如要提高應用程式的可用性,以及驗證應用程式是否有回應,您可以為代管執行個體群組設定自動修復政策。自動修復政策會依賴以應用程式為基礎的健康狀態檢查,驗證應用程式是否如預期回應。相較於只驗證執行個體是否處於 RUNNING 狀態,檢查應用程式是否有回應的做法則更為精確。

如果自動修復程式判定應用程式未回應,代管執行個體群組會自動重新建立該執行個體。如果是先佔執行個體,只要能再使用必要資源,群組就會重新建立執行個體。

您可以透過健康狀態檢查訊號驗證是否已建立執行個體,也可以驗證其應用程式是否有回應。如果正在建立代管執行個體,其 currentAction 會是 CREATING。如果附加了自動修復政策,則當代管執行個體建立完成且開始運作時,執行個體的 currentAction 將變成 VERIFYING,且健康狀態檢查工具會開始探測執行個體的應用程式。如果應用程式在啟動期間內通過這項初始健康狀態檢查,執行個體就會通過驗證,且其 currentAction 會變成 NONE。首次為代管執行個體群組附加健康狀態檢查時,驗證作業可能要 15 分鐘才能完成。詳情請參閱驗證代管執行個體群組中執行個體的狀態一文。

自動修復功能重新建立執行個體時,會使用原先用來建立該執行個體的執行個體範本 (不一定是附加至代管執行個體群組的預設執行個體範本)。除非您採取防範措施,否則刪除並重新建立執行個體及其磁碟後,寫入至執行個體磁碟的所有資料都將遺失。如要進一步瞭解 Compute Engine 自動修復程式的行為方式和自動修復對已連結磁碟的影響,請參閱代管執行個體群組和自動修復一文。一個代管執行個體群組最多可設定一項自動修復政策。

以下是如何在代管執行個體群組中使用健康狀態檢查的範例,請按照下列操作說明建立健康狀態檢查,來檢查通訊埠 80 的網路伺服器回應。然後,您可以將這個健康狀態檢查套用至代管執行個體群組,以確保這個群組中的網路伺服器正常運作:

主控台

  1. 建立比負載平衡健康狀態檢查更為保守的自動修復健康狀態檢查。

    例如,建立會在通訊埠 80 中尋找回應的健康狀態檢查,且這個檢查必須能容忍幾次失敗,之後才將執行個體標示為 UNHEALTHY 並重新建立。在這個範例中,如果執行個體成功傳回一次,健康狀態就會標示為良好。如果連續 3 次未成功傳回,健康狀態就會標示為不良。

    1. 前往 GCP 主控台的「Create a health check」(建立健康狀態檢查) 頁面。

      前往「Create a health check」(建立健康狀態檢查) 頁面

    2. 為健康狀態檢查指定名稱,例如 example-check
    3. 在「Protocol」(通訊協定) 欄中,選取 [HTTP] (若尚未選取)。
    4. 在「Port」(通訊埠) 欄中輸入 80
    5. 在「Check interval」(檢查時間間隔) 欄中輸入 5
    6. 在「Timeout」(逾時) 欄中輸入 5
    7. 設定「Healthy threshold」(良好健康狀態判定門檻),決定系統必須連續傳回多少次成功執行的健康狀態檢查結果,才能將不良執行個體標示為健康狀態良好。在這個範例中,請輸入 1
    8. 設定「Unhealthy threshold」(不良健康狀態判定門檻),決定系統必須連續傳回多少次失敗的健康狀態檢查,才能將健康狀態良好的執行個體標示為不良。在這個範例中,請輸入 3
    9. 按一下 [Create] (建立),建立健康狀態檢查。
  2. 建立防火牆規則,允許健康狀態檢查探測器連線至應用程式。

    健康狀態檢查探測器的來源位址範圍介於 130.211.0.0/2235.191.0.0/16 之間,因此請確保網路防火牆規則允許健康狀態檢查連線。在這個範例中,我們的代管執行個體群組使用 default 網路,且執行個體使用通訊埠 80 接聽。如果尚未在預設網路開啟通訊埠 80,請建立防火牆規則。

    1. 前往 GCP 主控台的「Create a firewall rule」(建立防火牆規則) 頁面。

      前往「Create a firewall rule」(建立防火牆規則) 頁面

    2. 在「Name」(名稱) 欄中輸入防火牆規則的名稱 (例如 allow-health-check)。
    3. 在「Network」(網路) 欄中選取 default 網路。
    4. 在「Source filter」(來源篩選器) 欄中選取 IP ranges
    5. 在「Source IP ranges」(來源 IP 範圍) 欄中輸入 130.211.0.0/2235.191.0.0/16
    6. 在「Protocols and ports」(通訊協定和通訊埠) 欄中選取 [Specified protocols and ports] (指定的通訊協定和通訊埠),然後輸入 tcp:80
    7. 按一下 [Create] (建立)
  3. 設定地區或區域代管執行個體群組的自動修復政策,以利套用健康狀態檢查。

    1. 前往 GCP 主控台的「Instance Groups」(執行個體群組) 頁面。

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

    2. 在清單的「Name」(名稱) 欄底下,按一下要套用健康狀態檢查之執行個體群組的名稱。
    3. 按一下 [Edit Group] (編輯群組),修改這個代管執行個體群組。
    4. 在「Autohealing」(自動修復) 底下,選取您先前建立的健康狀態檢查。
    5. 變更或保留「Initial delay」(初始延遲) 設定。如果執行個體正在啟動中,這個設定會延遲自動修復,避免過早重新建立執行個體的可能性。當執行個體的 currentActionVERIFYING 時,初始延遲計時器會啟動。
    6. 按一下 [Save] (儲存) 套用變更。

    自動修復功能可能要過幾分鐘後,才會開始監控群組中的執行個體。

gcloud

  1. 建立比負載平衡健康狀態檢查更為保守的自動修復健康狀態檢查。

    例如,建立會在通訊埠 80 中尋找回應的健康狀態檢查,且這個檢查必須能容忍幾次失敗,之後才將執行個體標示為 UNHEALTHY 並重新建立。在這個範例中,如果執行個體成功傳回一次,健康狀態就會標示為良好。如果連續 3 次未成功傳回,健康狀態就會標示為不良。

    gcloud compute health-checks create http example-check --port 80 \
        --check-interval 30s \
        --healthy-threshold 1 \
        --timeout 10s \
        --unhealthy-threshold 3
    
  2. 建立防火牆規則,允許健康狀態檢查探測器連線至應用程式。

    健康狀態檢查探測器的來源位址範圍介於 130.211.0.0/2235.191.0.0/16 之間,因此請確認防火牆規則允許健康狀態檢查連線。在這個範例中,我們的代管執行個體群組使用 default 網路,且執行個體使用通訊埠 80 接聽。如果預設網路尚未開啟通訊埠 80,請建立防火牆規則。

    gcloud compute firewall-rules create allow-health-check \
        --allow tcp:80 \
        --source-ranges 130.211.0.0/22,35.191.0.0/16 \
        --network default
    
  3. 設定地區或區域代管執行個體群組的自動修復政策,以利套用健康狀態檢查。

    使用 gcloud beta compute 中的 set-autohealing 指令,將健康狀態檢查套用至代管執行個體群組。

    如果執行個體正在啟動中,initial-delay 設定會延遲自動修復,以避免過早重新建立執行個體的可能性。當執行個體的 currentActionVERIFYING 時,初始延遲計時器會啟動。

    例如:

    gcloud beta compute instance-groups managed set-autohealing my-mig \
        --health-check example-check \
        --initial-delay 300 \
        --zone us-east1-b
    

    自動修復功能可能要過 15 分鐘後,才會開始監控群組中的執行個體。

API

  1. 建立比負載平衡健康狀態檢查更為保守的自動修復健康狀態檢查

    例如,建立會在通訊埠 80 中尋找回應的健康狀態檢查,且這個檢查必須能容忍幾次失敗,之後才將執行個體標示為 UNHEALTHY 並重新建立。在這個範例中,如果執行個體成功傳回一次,健康狀態就會標示為良好。如果連續 3 次未成功傳回,健康狀態就會標示為不良。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks
    
    {
     "name": "example-check",
     "type": "http",
     "port": 80,
     "checkIntervalSec": 30,
     "healthyThreshold": 1,
     "timeoutSec": 10,
     "unhealthyThreshold": 3
    }
    
  2. 建立防火牆規則,允許健康狀態檢查探測器連線至應用程式。

    健康狀態檢查探測器的來源位址範圍介於 130.211.0.0/2235.191.0.0/16 之間,因此請確認防火牆規則允許健康狀態檢查連線。在這個範例中,我們的代管執行個體群組使用 default 網路,且執行個體使用通訊埠 80 接聽。如果預設網路尚未開啟通訊埠 80,請建立防火牆規則。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls
    
    {
     "name": "allow-health-check",
     "network": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default",
     "sourceRanges": [
      "130.211.0.0/22",
      "35.191.0.0/16"
     ],
     "allowed": [
      {
       "ports": [
        "80"
       ],
       "IPProtocol": "tcp"
      }
     ]
    }
    
  3. 設定地區或區域代管執行個體群組的自動修復政策,以利套用健康狀態檢查。

    自動修復政策是 instanceGroupManager 資源或 regionInstanceGroupManager 資源的一部分。

    您可以使用 insertpatch 方法設定自動修復政策。

    以下範例使用 instanceGroupManagers.patch 方法設定自動修復政策。

    PATCH https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]
    {
      "autoHealingPolicies": [
        {
          "healthCheck": "global/healthChecks/example-check",
          "initialDelaySec": 300
        }
      ],
    }
    

    如果執行個體正在啟動中,initialDelaySec 設定會延遲自動修復,以避免過早重新建立執行個體的可能性。當執行個體的 currentActionVERIFYING 時,初始延遲計時器會啟動。

    自動修復功能可能要過幾分鐘後,才會開始監控群組中的執行個體。

    如要關閉以應用程式為基礎的自動修復功能,請將自動修復政策設為空白值 (autoHealingPolicies[])。代管執行個體群組只會重新建立非 RUNNING 狀態的執行個體。

    您可以讀取 instanceGroupManagers.autoHealingPolicies 欄位來取得代管執行個體群組的自動修復政策,並使用下列其中一種方法取得代管執行個體群組資源:

查看自動修復作業記錄

您可以使用 gcloud 工具或 API 查看過去的自動修復事件。

gcloud

使用 gcloud compute operations list 指令搭配篩選器即可單獨查看專案中的自動修復事件。

gcloud compute operations list --filter='operationType~compute.instances.repair.*'

如要進一步瞭解特定修復作業,請使用 describe 指令。例如:

gcloud compute operations describe repair-1539070348818-577c6bd6cf650-9752b3f3-1d6945e5 --zone us-east1-b

API

如果是區域代管執行個體群組,請向區域的 operations 資源提交 GET 要求並加入篩選器,將輸出清單範圍限縮至 compute.instances.repair.* 事件。

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/operations?filter=operationType+%3D+%22compute.instances.repair.*%22

如果是地區代管執行個體群組,請使用地區 (而非區域) 的 operations 資源。

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/region/[REGION]/operations?filter=operationType+%3D+%22compute.instances.repair.*%22

如要進一步瞭解特定修復作業,請針對該作業提交 GET 要求。

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/operations/repair-1539070348818-577c6bd6cf650-9752b3f3-1d6945e5

識別屬於某個群組的執行個體

如要查看某個群組中所有執行個體的清單,請參閱擷取現有群組與群組說明一文。

如要檢查特定執行個體目前是否屬於某個群組,您可以使用主控台或 API。

主控台

  1. 前往「VM instances」(VM 執行個體) 頁面。

    前往「VM instances」(VM 執行個體) 頁面

  2. 按一下要檢查的執行個體,存取其「VM instance details」(VM 執行個體詳細資料)
  3. 如果 VM 執行個體屬於某個代管執行個體群組,「In use by」(使用者) 標頭底下會顯示該代管執行個體群組的名稱。如果 VM 執行個體不屬於任何群組,執行個體詳細資料頁面中就不會顯示「In use by」(使用者) 標頭。

API

請參閱查看 VM 執行個體參照網址一文。

或者,如要識別執行個體是否屬於或曾屬於某個代管執行個體群組,請在執行個體的中繼資料中尋找以下兩個中繼資料鍵:

  • instance-template 表示用於建立執行個體的範本。
  • created-by 表示建立執行個體的代管執行個體群組。

即使您捨棄執行個體,除非手動移除,否則執行個體仍會擁有這些中繼資料項目。

例如,如果有名為 random-instance-biy 的執行個體,且您想要知道執行個體是否由代管執行個體群組建立,您可以描述執行個體並尋找上述中繼資料鍵。例如:

gcloud compute instances describe random-instance-biy --zone us-central1-f

gcloud 會傳回類似以下的回應:

canIpForward: false
cpuPlatform: Intel Ivy Bridge
creationTimestamp: '2016-08-24T14:11:38.012-07:00'
disks:
- autoDelete: true
  boot: true
  deviceName: persistent-disk-0
  index: 0
  interface: SCSI
  kind: compute#attachedDisk
...[snip]...
metadata:
  items:
  - key: instance-template
    value: projects/123456789012/global/instanceTemplates/example-it
  - key: created-by
    value: projects/123456789012/zones/us-central1-f/instanceGroupManagers/igm-metadata

從群組中刪除個別執行個體

您可以刪除代管執行個體群組中的個別執行個體。刪除執行個體會縮減執行個體群組的指定 targetSize,並且會將執行個體從所屬的任何目標集區移除。

從代管執行個體群組刪除執行個體不會變更任何指定的自動配置器設定。如果您從代管執行個體群組刪除執行個體,自動配置器可能會偵測到群組中其他執行個體的工作負載增加,並將群組大小重新增加到先前的等級。為避免發生此問題,請先停止自動配置器,然後再嘗試刪除執行個體。

若群組屬於後端服務的一部分,且該服務已啟用連線排除,在連線排除持續時間過後,最長可能需要等待 60 秒方可移除或刪除 VM 執行個體。

您可以使用 Google Cloud Platform 主控台gcloud compute 工具API,從代管執行個體群組中刪除執行個體。

主控台

  1. 前往 GCP 主控台的「Instance Groups」(執行個體群組) 頁面。

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

  2. 在清單的「Name」(名稱) 欄底下,按一下個別待刪除執行個體所屬執行個體群組的名稱。按一下名稱會開啟頁面,其中包含執行個體群組的屬性及群組內執行個體的清單。
  3. 在執行個體的清單上選取一或多個要刪除的執行個體。
  4. 按一下 [Delete] (刪除),即可刪除您所選取的執行個體。

gcloud

如要刪除具有 gcloud 的執行個體,請使用 instance-groups managed delete-instances 子指令:

gcloud compute instance-groups managed delete-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

instanceGroupManagers 服務建構要求,要求中需加入目標代管執行個體群組的名稱。在要求主體中,包含要刪除的一或多個執行個體的網址。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/deleteInstances

{
 "instances": [
  "zones/[ZONE]/instances/example-instance-i3n2",
  "zones/[ZONE]/instances/example-instance-l6n1"
 ]
}

提出刪除代管執行個體群組中執行個體的要求之後,執行個體會在系統可以刪除時立即停止。此程序可能會花費大量時間,花費時間視您從群組中刪除的執行個體數而定。 請在您的代管執行個體群組中驗證執行個體狀態

從群組中捨棄執行個體

您可以將執行個體與代管執行個體群組區分開,以更輕鬆地找出個別執行個體的問題,而不會影響整個群組。 從群組捨棄執行個體也會將執行個體從指派給代管執行個體群組的負載平衡器移除。 手動指派給特定個別執行個體的目標集區不會移除。

捨棄執行個體會減小執行個體群組的指定 targetSize,但不會變更任何指定的自動配置器設定。具有自動配置器的代管執行個體群組會視需要繼續自動新增或移除執行個體。

若群組屬於後端服務的一部分,且該服務已啟用連線排除,在連線排除持續時間過後,最長可能需要等待 60 秒方可移除或刪除 VM 執行個體。

您可以使用 Google Cloud Platform 主控台gcloud compute 工具API,從代管執行個體群組中捨棄執行個體。

主控台

  1. 前往 GCP 主控台的「Instance Groups」(執行個體群組) 頁面。

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

  2. 確認您要移除哪些執行個體,然後在清單的「Name」(名稱) 欄底下,按一下其所屬執行個體群組的名稱。按一下名稱會開啟頁面,其中包含執行個體群組的屬性及群組內執行個體的清單。
  3. 在執行個體清單中選取一或多個要從群組中移除的執行個體。
  4. 按一下 [Remove from group] (從群組中移除)。所選執行個體會退出群組,但仍會繼續在群組外執行。

gcloud

如要從執行個體群組中移除執行個體,「而不刪除執行個體」,請使用 abandon-instances 子指令。

gcloud compute instance-groups managed abandon-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

instanceGroupManagers 服務建構要求,要求中需加入目標代管執行個體群組的名稱。在要求主體中,包含要捨棄的一或多個執行個體的網址。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/abandonInstances

{
 "instances": [
  "zones/[ZONE]/instances/example-instance-i3n2",
  "zones/[ZONE]/instances/example-instance-l6n1"
 ]
}

提出從代管執行個體群組中捨棄執行個體的要求之後,群組會盡快移除執行個體。 請在您的代管執行個體群組中驗證執行個體狀態

在群組中重新建立執行個體

重新建立執行個體會刪除指定執行個體,並會使用指派給代管執行個體群組的執行個體範本建立新執行個體。

請使用這個方法來更新所選執行個體,以使這些執行個體使用最新執行個體範本。如果您需要在代管執行個體群組中重新建立所有執行個體,請改為啟動輪動式更新

若群組屬於後端服務的一部分,且該服務已啟用連線排除,在連線排除持續時間過後,最長可能需要等待 60 秒方可移除或刪除 VM 執行個體。

使用 gcloud compute 工具API,在代管執行個體群組中重新建立選定的執行個體。

gcloud

使用 instance-groups managed recreate-instances 子指令。

gcloud compute instance-groups managed recreate-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

instanceGroupManagers 服務建構要求,要求中需加入目標代管執行個體群組的名稱。在要求主體中,包含要重新建立的一或多個執行個體的網址。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/recreateInstances

{
 "instances": [
  "zones/[ZONE]/instances/example-instance-i3n2",
  "zones/[ZONE]/instances/example-instance-l6n1"
 ]
}

提出在代管執行個體群組中重新建立執行個體的要求後,一旦系統可以佈建執行個體,新的執行個體即會開始運作。此程序可能會花費大量時間,花費時間視您重新建立的執行個體數而定。 請在您的代管執行個體群組中驗證執行個體狀態

在代管執行個體群組中驗證執行個體的狀態

許多指令與要求都會在代管執行個體群組中建立、刪除及修改執行個體。在群組安排建立、刪除或更新執行個體的時程之後,這些作業會以 DONE 狀態傳回。但是,這些基本動作尚未完成前,並不會建立、刪除或更新群組中的執行個體。您必須使用 gcloud compute 工具API 驗證這些執行個體的狀態。

gcloud

使用 instance-groups managed list-instances 指令列出群組中的執行個體,以及這些執行個體目前的動作。

gcloud compute instance-groups managed list-instances [INSTANCE_GROUP] \
    --zone [ZONE]

例如:

gcloud compute instance-groups managed list-instances example-group \
    --zone [ZONE]
NAME               STATUS  ACTION   LAST_ERROR
example-group-0gnk RUNNING NONE
example-group-15xy         CREATING Error QUOTA_EXCEEDED: Instance 'example-group-15xy' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0
example-group-18ep         CREATING Error QUOTA_EXCEEDED: Instance 'example-group-18ep' creation failed: Quota 'CPUS' exceeded.  Limit: 24.0, Error QUOTA_EXCEEDED: Instance 'example-group-18ep' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0
example-group-1u1y         CREATING

在這個範例中,example-group 包含四個執行個體:一個執行個體正在執行,兩個執行個體正嘗試建立,但因位址與 CPU 配額的問題無法建立,還有一個執行個體正在建立,且尚未遇到任何錯誤。

在有多組先佔執行個體但沒有先佔容量可用的情況下,建立作業會失敗並發生 ZONE_RESOURCE_POOL_EXHAUSTED 錯誤。如要查看過去的先佔事件,請參閱偵測執行個體是否遭到先佔

等到穩定為止

您可以使用 instance-groups managed wait-until-stable 指令自動檢查執行個體群組,並讓指令碼等到群組中的所有執行個體都穩定為止。

gcloud compute instance-groups managed wait-until-stable example-group \
    --zone [ZONE]

API

instanceGroupManagers 服務建構要求,並指定包含您要驗證之執行個體的代管執行個體群組名稱。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/listManagedInstances

例如:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instanceGroupManagers/example-group/listManagedInstances

要求會取得下列回應:

{
 "managedInstances": [
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-0gnk",
   "id": "16960422116594945029",
   "instanceStatus": "RUNNING",
   "currentAction": "NONE"
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-15xy",
   "currentAction": "CREATING",
   "lastAttempt": {
    "errors": {
     "errors": [
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-15xy' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0"
      }
     ]
    }
   }
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-18ep",
   "currentAction": "CREATING",
   "lastAttempt": {
    "errors": {
     "errors": [
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-18ep' creation failed: Quota 'CPUS' exceeded.  Limit: 24.0"
      },
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-18ep' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0"
      }
     ]
    }
   }
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-1u1y",
   "id": "7239700230861444556",
   "instanceStatus": "RUNNING",
   "currentAction": "CREATING"
  }
 ]
}

在這個範例中,example-group 包含四個執行個體:一個執行個體正在執行,兩個執行個體正嘗試建立,但因位址與 CPU 配額的問題無法建立,還有一個執行個體正在建立,且尚未遇到任何錯誤。

在有多組先佔執行個體但沒有先佔容量可用的情況下,建立作業會失敗並發生 ZONE_RESOURCE_POOL_EXHAUSTED 錯誤。如要查看過去的先佔事件,請參閱偵測執行個體是否遭到先佔

刪除代管執行個體群組

當您使用 Google Cloud Platform 主控台或 gcloud 刪除代管執行個體群組時,也會刪除群組中的所有執行個體與任何附加的自動配置器。如果您必須保留這個代管執行個體群組中的任何執行個體,請先捨棄執行個體,以從群組中移除執行個體。然後,delete 代管執行個體群組。

您必須先另外發出刪除任何附加自動配置器的要求,才能使用 API 刪除代管執行個體群組。

您可以使用 Google Cloud Platform 主控台gcloud compute 工具API,刪除整個代管執行個體群組及其執行個體。

主控台

  1. 前往 GCP 主控台的「Instance Groups」(執行個體群組) 頁面。

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

  2. 從清單中選取一或多個要刪除的群組。
  3. 按一下 [Delete] (刪除),刪除群組以及代管執行個體群組中的所有執行個體。

gcloud

使用 instance-groups managed delete 子指令。

gcloud compute instance-groups managed delete [INSTANCE_GROUP] \
    --zone [ZONE]

API

instanceGroupManagers 服務建構 DELETE 要求,並指定要刪除之代管執行個體群組的名稱。

DELETE https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]

建立先佔執行個體的群組

您可以使用代管執行個體群組快速建立多個先佔執行個體,如此可減少代管執行個體群組中執行個體的費用。例如,您可以建立先佔執行個體群組,使用這些執行個體執行批次處理工作,然後在工作完成時刪除這個群組。

如要建立先佔執行個體群組,請在執行個體範本中設定先佔選項,然後使用範本建立代管執行個體群組。

主控台

  1. 前往 GCP 主控台的「Instance Templates」(執行個體範本) 頁面。

    前往「Instance Templates」(執行個體範本) 頁面

  2. 按一下 [New instance template] (新增執行個體範本)
  3. 視需求填寫執行個體範本的屬性。
  4. 按一下 [Show advanced options] (顯示進階選項),展開「Availability policies」(適用政策) 部分。
  5. 將「Preemptibility」(先佔功能) 設定為 [On] (開啟)
  6. 按一下 [Create] (建立),建立範本。
  7. 使用這個範本建立代管執行個體群組

gcloud

透過 gcloud compute 使用 instance-templates create 指令建立執行個體範本。請包含 --preemptible 標記。

gcloud compute instance-templates create [INSTANCE_TEMPLATE] \
    --preemptible

建立執行個體範本之後,請使用這個範本建立代管執行個體群組

API

使用 instanceTemplates().insert 方法建立新的執行個體範本。在 scheduling 底下包含 preemptible 屬性,並將這個屬性設定為 true

{
"name": "[INSTANCE_TEMPLATE]",
"properties": {
  "machineType": "zones/[ZONE]/machineTypes/[MACHINE_TYPE]",
  "networkInterfaces": [
    {
      "network": "global/networks/default",
      "accessConfigs":
      [
        {
          "name": "external-IP",
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "scheduling":
  {
    "preemptible": true
  },
  "disks":
  [
    {
      "type": "PERSISTENT",
      "boot": true,
      "mode": "READ_WRITE",
      "initializeParams":
      {
        "sourceImage": "projects/debian-cloud/global/images/family/debian-9"
      }
    }
  ]
  }
}

建立執行個體範本之後,請使用這個範本建立代管執行個體群組

新增代管執行個體群組至負載平衡器

Google Cloud Platform 負載平衡功能會使用代管與非代管執行個體群組來提供流量。視您執行的負載平衡器類型而定,可以將執行個體群組新增至目標集區或後端服務。如要進一步瞭解代管執行個體群組和負載平衡,請參閱執行個體群組總覽一文。

新增代管執行個體群組至後端服務

建立 HTTP(S)、內部或 SSL 負載平衡器時不能缺少後端服務。後端服務包含個別後端,每個個別後端又包含一個代管或非代管的執行個體群組。執行個體群組中的執行個體會回應負載平衡器的流量,因此後端服務知道它可以使用哪些執行個體,或是執行個體能夠處理的流量,以及目前處理中的流量為多少。此外,後端服務會監控健康狀態檢查,停止向健康狀態不良的執行個體傳送新連線。

請參閱新增執行個體群組至後端服務一文,瞭解如何將執行個體群組新增至後端服務。

新增代管執行個體群組至目標集區

目標集區是包含一或多個虛擬機器執行個體的物件。目標集區用於網路負載平衡,其中網路負載平衡器會將使用者的要求轉送至連結的目標集區。屬於該目標集區的執行個體會處理這些要求並傳回回應。 您可以新增代管執行個體群組至目標集區,以在執行個體群組新增或移除執行個體時,目標集區也會隨著相關變更自動更新。

目標集區必須先存在,您才能新增代管執行個體群組至目標集區。如需詳細資訊,請參閱新增目標集區的說明文件。

如要新增現有的代管執行個體群組至目標集區,請按照以下操作說明進行。這種做法會將屬於代管執行個體群組的所有 VM 執行個體全數新增至目標集區。

主控台

  1. 前往 GCP 主控台的「Target Pools」(目標集區) 頁面。

    前往「Target Pools」(目標集區) 頁面

  2. 按一下您要新增執行個體群組的目標集區。
  3. 按一下 [Edit] (編輯) 按鈕。
  4. 向下捲動至「VM instances」(VM 執行個體) 部分,然後按一下 [Select instance groups] (選取執行個體群組)
  5. 從下拉式選單中選擇一個執行個體群組。
  6. 儲存變更。

gcloud

透過 gcloud 指令列工具使用 set-target-pools 指令:

gcloud compute instance-groups managed set-target-pools [INSTANCE_GROUP] \
    --target-pools [TARGET_POOL,..] [--zone ZONE]

其中:

  • [INSTANCE_GROUP] 是執行個體群組的名稱。
  • [TARGET_POOL] 是要新增這個執行個體群組的一或多個目標集區的名稱。
  • [ZONE] 是執行個體群組的區域。

API

在 API 中,對以下 URI 提出 POST 要求:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/setTargetPools

其中:

  • [PROJECT_ID] 是這項要求的專案 ID。
  • [ZONE] 是執行個體群組的區域。
  • [INSTANCE_GROUP] 是執行個體群組的名稱。

要求內容應包含要新增此群組之目標集區的 URI 清單。例如:

{
  "targetPools": [
    "regions/us-central1/targetPools/example-targetpool-1",
    "regions/us-central1/targetPools/example-targetpool-2"
  ]
}

指派已命名的通訊埠至代管執行個體群組

已命名的通訊埠為鍵/值組合,代表服務名稱及執行服務的通訊埠編號。負載平衡服務會使用已命名的通訊埠引導流量傳向個別執行個體上的特定通訊埠。舉例來說,若您將已命名的通訊埠設為 http:80,並將後端服務設定為傳送流量至名稱為 http 通訊埠,則負載平衡會將流量轉送到執行個體群組中個別執行個體的通訊埠 80。

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

您可以為每個服務名稱指派數個通訊埠,也可以為每個通訊埠指派數個服務名稱。然而請記住,指定的後端服務一次只能轉送流量至一個已命名的通訊埠。

主控台

  1. 前往 GCP 主控台的「Instance Groups」(執行個體群組) 頁面。

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

  2. 按一下您要指定具名通訊埠之執行個體群組的名稱。按一下名稱會開啟包含執行個體群組屬性的頁面。
  3. 按一下 [Edit Group] (編輯群組),修改這個代管執行個體群組。
  4. 按一下 [Specify port name mapping] (指定通訊埠名稱對應),展開具名通訊埠的選項。
  5. 按一下 [Add item] (新增項目),然後輸入您要的通訊埠名稱,以及要與該名稱建立關聯的通訊埠編號。如有必要,可再按一下 [Add item] (新增項目) 新增其他項目。
  6. 按一下 [Save] (儲存) 即可儲存您所做的變更,並將具名通訊埠套用至代管執行個體群組的執行個體。

gcloud

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

gcloud compute instance-groups managed set-named-ports [INSTANCE_GROUP] \
  --named-ports [PORT_NAME]:[PORT],[PORT_NAME]:[PORT]

例如:

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

如需為每個服務名稱指派數個通訊埠,或是為每個通訊埠指派數個服務名稱,請為每個名稱或通訊埠建立一個以上的項目。舉例來說,指派 name1 至通訊埠 102080,接著指派 name2name3 至通訊埠 80,最後將通訊埠 9000 指派到 name4

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

使用 get-named-ports 指令,檢查代管執行個體群組的具名通訊埠指派作業:

gcloud compute instance-groups managed get-named-ports [INSTANCE_GROUP]
NAME  PORT
name1 10
name1 20
name1 80
name2 8080
name3 8080
name4 9000

API

Instance Group Manager API 不提供 setNamedPorts API 方法,但您可以使用 Instance Group Manager API 執行這項工作。

向 Instance Group API 建構要求,並加入執行個體群組的名稱。透過取得特定群組的相關資訊,取得執行個體群組目前的 fingerprint 值。接著在要求主體中加入 fingerprint 以及一或多個 namedPorts 值組合:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroups/[INSTANCE_GROUP]/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "[PORT_NAME]",
   "port": [PORT_NUMBER]
  },
  {
   "name": "[PORT_NAME]",
   "port": [PORT_NUMBER]
  }
 ]
}

例如:

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "name1",
   "port": 80
  },
  {
   "name": "name2",
   "port": 8080
  }
 ]
}

如要指派數個通訊埠至每個服務名稱,請為該服務名稱建立數個項目。例如,您可以指派通訊埠 102080name1,同時也將通訊埠 8080 指派給 name2

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "name1",
   "port": 10
  },
  {
   "name": "name1",
   "port": 20
  }
  {
   "name": "name1",
   "port": 80
  }
  {
   "name": "name2",
   "port": 8080
  }
  {
   "name": "name3",
   "port": 80
  }
  {
   "name": "name4",
   "port": 8080
  }
 ]
}

如要列出指派給代管執行個體群組的已命名通訊埠,請建構指向該群組的 GET 要求:

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]

瞭解 instanceTemplateversions 欄位

當您建立代管執行個體群組時,必須指定代管執行個體群組用來建立個別 VM 執行個體的執行個體範本。根據預設,Compute Engine 會描述在兩個不同 API 屬性中使用的執行個體範本:頂層 instanceTemplate 屬性與 versions 屬性。例如,在下列代管執行個體群組中,請注意 instanceTemplateversions 欄位已經填入:

{

 "name": "example-group",
 "zone": "zones/us-central1-a",
 "instanceTemplate": "global/instanceTemplates/example-it",
 "versions": [
  {
   "name": "v3",
   "instanceTemplate": "global/instanceTemplates/example-it",
   "targetSize": {
    "calculated": 3
   }
  }
 ]...
}

為了回溯相容,Compute Engine 會自動填入頂層 instanceTemplate 欄位與 versions 欄位。我們建議盡可能指定 versions 欄位並省略頂層 instanceTemplates 欄位。但是,如果您的應用程式程式碼目前設定了頂層 instanceTemplate 欄位,這仍是一個有效要求。

如要進一步瞭解 Managed Instance Group Updater,請參閱更新代管執行個體群組一文。

(進階) 使用代管執行個體群組對執行個體範本進行初期測試

您可以建立一個代管執行個體群組,其中包含使用不同執行個體範本的兩個群組。例如,您可能想要建立擁有 20 個 VM 執行個體的代管執行個體群組,10 個 VM 應在特定作業映像檔上執行,而其餘的應在不同作業系統映像檔上執行。這個功能可讓您先比較兩個不同的執行個體範本版本,然後再決定出一個版本。

在 API 中,對以下網址提出 POST 要求:

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

您的要求主體應省略頂層 instanceTemplates 欄位,但包含已設定兩個執行個體範本的 versions 屬性。在每個 versions 物件中,您必須指定一個執行個體範本。針對其中一個 versions 物件 (但非兩者),您還必須指定 targetSize。例如,在下列要求建立的執行個體群組中,50% 的 VM 執行個體會使用 example-template 執行個體範本,其餘 VM 執行個體則使用 small-machine-type 範本:

{
  "baseInstanceName": "example-instances",
  "name": "example-group",
  "targetSize": 5,
  "versions":
  [
    {
      "instanceTemplate": "global/instanceTemplates/example-template",
      "targetSize":
      {
        "percent": 50
      }
    },
   {
     "instanceTemplate": "global/instanceTemplates/small-machine-type"
   }
  ]
}

代管執行個體群組和身分與存取權管理

由 Compute Engine 在代管執行個體群組中執行的所有作業都會使用您專案的「Google API 服務帳戶」執行。每項專案專屬的服務帳戶都有一個電子郵件地址,如下所示:

[PROJECT_ID]@cloudservices.gserviceaccount.com

其中

  • [PROJECT_ID] 是對應專案的數值 ID。

Google API 服務帳戶與預設 Compute Engine 服務帳戶不同。

您必須確保代管執行個體群組使用的服務帳戶擁有足夠的權限,可以根據執行個體範本建立虛擬機器執行個體。請特別注意,這意味著您需要為服務帳戶授予 compute.instanceAdmin.v1,以及 serviceAccountUser (選用) 角色,才能在執行個體群組中建立及管理執行個體。只有在代管執行個體群組建立能夠以服務帳戶身分執行的執行個體時,才需要 serviceAccountUser 角色。另外,也請記住,這個帳戶可用於其他流程,包括 Deployment Manager

當您建立代管執行個體群組或更新執行個體範本時,Compute Engine 會驗證 Google API 服務帳戶是否:

  • 在執行個體範本中具備 serviceAccountUser 角色權限 (若您打算建立能夠以服務帳戶身分執行的執行個體)。
  • 有權存取執行個體範本所參照的所有資源,例如映像檔、磁碟、VPC 網路與子網路。

如要進一步瞭解服務帳戶,請參閱服務帳戶總覽

在代管執行個體群組中更新所有執行個體

請參閱更新代管執行個體群組一文。

疑難排解

我的代管執行個體群組一直無法建立執行個體。這是怎麼回事?

有一些問題可能會使執行個體群組無法成功建立或重新建立執行個體。一些常見的問題包括:

  • 代管執行個體群組嘗試建立或重新建立執行個體與開機永久磁碟,但永久磁碟已存在。建立新的執行個體時,系統預設會建立新的開機永久磁碟。這些磁碟按執行個體命名。如果執行個體的名稱為 my-awesome-instance,磁碟的名稱也會是 my-awesome-instance。如果已有永久磁碟使用這個名稱,要求就會失敗。刪除現有永久磁碟即可解決問題。

  • 執行個體範本已將開機永久磁碟的 disks.autoDelete 選項設定為 false,所以,刪除執行個體 (刪除原因可能為自動修復) 時不會刪除永久磁碟。當代管執行個體群組嘗試以相同名稱重新建立執行個體時,就遇到了相同的問題,也就是已經有名稱相同的永久磁碟。刪除現有永久磁碟可立即解決問題,如果您想一併刪除開機永久磁碟和執行個體,請更新執行個體範本,將 disks.autoDelete 設定為 true

  • 您的執行個體範本可能會失效。如果您最近更新了執行個體範本,可能會出現無效的屬性,導致代管執行個體群組無法建立執行個體。無效屬性的部分情況如下:

    • 您指定了不存在的資源,例如來源映像檔。
    • 資源名稱拼字有誤。
    • 您嘗試在讀寫模式下連結其他非開機永久磁碟。由於執行個體群組包含多個執行個體,如要連結其他任何磁碟,供群組中的所有執行個體共用,就必須使用唯讀模式。

後續步驟

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

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

這個網頁
Compute Engine 說明文件