限制 MIG 中 VM 的執行時間

本文說明如何為虛擬機器 (VM) 指定時間限制,自動終止代管執行個體群組 (MIG) 中的 VM。本文也說明 MIG 中 VM 的時間限制運作方式。

您可以為 MIG 中的 VM 指定時間限制,藉此最佳化暫時性工作負載。當 VM 達到時間限制時,MIG 會自動終止 (刪除) 該 VM。設定時間限制,限制 MIG 中的 VM 執行時間,有助於盡量減少費用並釋出配額。

如要瞭解如何為獨立 VM 指定時間限制,請參閱限制 VM 的執行時間。如要讓 MIG 根據工作負載自動新增或刪除 VM,請參閱自動調度執行個體群組資源

事前準備

  • 如果尚未設定驗證,請先完成設定。 「驗證」是指驗證身分的程序,確認您有權存取 Trusted Cloud by S3NS 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列任一選項,向 Compute Engine 進行驗證:

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

    Console

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

    gcloud

    1. 安裝 Google Cloud CLI,然後 使用同盟身分登入 gcloud CLI。 登入後,執行下列指令初始化 Google Cloud CLI:

      gcloud init
    2. Set a default region and zone.

    REST

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

      安裝 Google Cloud CLI,然後 使用同盟身分登入 gcloud CLI。 登入後,執行下列指令初始化 Google Cloud CLI:

      gcloud init

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

限制 MIG 中 VM 的執行時間

您可以在用於 MIG 的執行個體範本中指定時間限制,藉此限制 MIG 中 VM 的執行時間。當 MIG 根據範本建立 VM 時,時間限制會套用至每個 VM。

您可以指定下列其中一種時間限制:

  • 時間限制 (跑步時間)
  • 時間限制 (終止時間)

如要為 MIG 中的 VM 指定時間限制,請按照下列步驟操作:

  1. 建立含有 VM 執行時間的執行個體範本,或含有 VM 終止時間的執行個體範本

  2. 使用執行個體範本建立 MIG更新現有 MIG

限制

建立含有 VM 執行時間的執行個體範本

如要讓 MIG 中的 VM 在執行一段時間後自動終止,請在執行個體範本中設定最長執行時間 (maxRunDuration)。

主控台

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

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

  2. 點選「建立執行個體範本」

  3. 按照以下方式選取「Location」(位置)

    • 如要跨區域使用執行個體範本,請選擇「Global」(全域)
    • 如要減少跨區域依附元件,請選擇「Regional」(區域)
  4. 如果您選擇了「Regional」(區域),請選取您要建立執行個體範本的「區域」

  5. 在「可用性政策」部分,展開「VM 佈建模式進階設定」

  6. 選取「設定 VM 的時間限制」核取方塊。

  7. 在「時間限制類型」欄位中,選取「以小時為單位」 (預設),將時間限制指定為一段時間。在下一個欄位中,輸入時數。

  8. 在「On VM termination」(VM 終止時) 清單中,選取「Delete」(刪除)

  9. 請針對其他欄位,接受預設值或視需要進行修改。

  10. 點選「建立」

gcloud

使用 instance-templates create 指令。如要在特定時間後自動刪除 VM,請加入 --max-run-duration 旗標,並將 --instance-termination-action 旗標設為 DELETE,如下所示:

  gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
      --max-run-duration=DURATION \
      --instance-termination-action=DELETE

更改下列內容:

  • INSTANCE_TEMPLATE_NAME:執行個體範本的名稱。
  • DURATION:您希望 VM 執行的時間長度。 MIG 會在指定時間過後自動刪除 VM。

    將時間長度格式設為天數、時數、分鐘數和秒數,並分別加上 dhms。舉例來說,如要指定 30 分鐘的時長,請使用 30m;如要指定 1 天 2 小時 3 分鐘 4 秒的時長,請使用 1d2h3m4s。最短為 30 秒 (30s),最長為 120 天 (120d)。

Terraform

如要使用 Terraform 建立執行個體範本,請使用 google_compute_instance_template 資源。如要建立執行個體範本,在特定時間長度後自動刪除 VM,請務必加入 max_run_duration 引數,並將 instance_termination_action 引數設為 DELETE

詳情請參閱 google_compute_instance_template 資源的 Terraform 說明文件

REST

請使用 instanceTemplates.insert 方法。如要在特定時間過後自動刪除 VM,請加入 maxRunDuration 欄位,並將 instanceTerminationAction 欄位設為 DELETE,如下所示:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default",
        "accessConfigs": [
          {
            "name": "external-IP",
            "type": "ONE_TO_ONE_NAT"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "initializeParams":
        {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ]
    "scheduling": {
      "maxRunDuration":
      {
        "seconds": DURATION
      },
      "instanceTerminationAction": "DELETE"
    }
  }
}

更改下列內容:

  • PROJECT_ID:要在其中建立執行個體範本的專案 ID
  • INSTANCE_TEMPLATE_NAME:執行個體範本的名稱。
  • MACHINE_TYPE:群組中 VM 的預先定義自訂機器類型。
  • IMAGE_PROJECT:包含圖片的映像檔專案,例如 debian-cloud
  • IMAGEIMAGE_FAMILY:指定下列其中一個值:

    • IMAGE:OS 映像檔的特定版本,例如 debian-10-buster-v20200309

    • IMAGE_FAMILY圖片系列。這會指定最新的非已淘汰 OS 映像檔。舉例來說,如果您指定 family/debian-10,系統會使用 Debian 10 映像檔系列中的最新版本。

  • DURATION:您希望 VM 執行的時間長度。 MIG 會在指定時間過後自動刪除 VM。

    將時間長度格式設為天數、時數、分鐘數和秒數,並分別加上 dhms。舉例來說,如要指定 30 分鐘的時長,請使用 30m;如要指定 1 天 2 小時 3 分鐘 4 秒的時長,請使用 1d2h3m4s。最短為 30 秒 (30s),最長為 120 天 (120d)。

建立含有 VM 終止時間的執行個體範本

如要在特定時間自動終止 MIG 中的 VM,請在執行個體範本中設定終止時間 (terminationTime)。您可以設定日期和時間,讓 MIG 終止 VM。

主控台

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

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

  2. 點選「建立執行個體範本」

  3. 按照以下方式選取「Location」(位置)

    • 如要跨區域使用執行個體範本,請選擇「Global」(全域)
    • 如要減少跨區域依附元件,請選擇「Regional」(區域)
  4. 如果您選擇了「Regional」(區域),請選取您要建立執行個體範本的「區域」

  5. 在「可用性政策」部分,展開「VM 佈建模式進階設定」

  6. 在「時間限制類型」欄位中,選取「依日期」,將時間限制指定為時間和日期。在下一個欄位中,按一下「選取日期和時間」,然後選取自動終止的日期、時間和時區。

  7. 在「On VM termination」(VM 終止時) 清單中,選取「Delete」(刪除)

  8. 請針對其他欄位,接受預設值或視需要進行修改。

  9. 點選「建立」

gcloud

使用 instance-templates create 指令。如要在特定時間自動刪除 VM,請加入 --termination-time 旗標,並將 --instance-termination-action 旗標設為 DELETE,如下所示:

  gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
      --termination-time=TIME \
      --instance-termination-action=DELETE

更改下列內容:

  • INSTANCE_TEMPLATE_NAME:執行個體範本的名稱。
  • TIME:您希望系統自動終止 VM 的時間。指定時間必須至少在 30 秒後,最晚則為 120 天後。將時間格式設為 RFC 3339 時間戳記

    YYYY-MM-DDTHH:MM:SSOFFSET
    

    更改下列內容:

    • YYYY-MM-DD:日期格式為 4 位數年份、2 位數月份和 2 位數日期,並以連字號分隔。
    • HH:MM:SS:時間格式為 2 位數的小時 (採用 24 小時制)、2 位數的分鐘和 2 位數的秒數,並以半形冒號分隔。
    • OFFSET:時區格式為世界標準時間 (UTC) 的偏移量。舉例來說,如要使用比世界標準時間早 8 小時的太平洋標準時間 (PST),請指定 -08:00。如要使用零時差 (UTC+0),請指定 Z

REST

請使用 instanceTemplates.insert 方法。如要在特定時間自動刪除 VM,請加入 terminationTime 欄位,並將 instanceTerminationAction 欄位設為 DELETE,如下所示:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default",
        "accessConfigs": [
          {
            "name": "external-IP",
            "type": "ONE_TO_ONE_NAT"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "initializeParams":
        {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ]
    "scheduling": {
      "terminationTime": TIME,
      "instanceTerminationAction": "DELETE"
    }
  }
}

更改下列內容:

  • PROJECT_ID:要在其中建立執行個體範本的專案 ID
  • INSTANCE_TEMPLATE_NAME:執行個體範本的名稱。
  • MACHINE_TYPE:群組中 VM 的預先定義自訂機器類型。
  • IMAGE_PROJECT:包含圖片的映像檔專案,例如 debian-cloud
  • IMAGEIMAGE_FAMILY:指定下列其中一個值:

    • IMAGE:OS 映像檔的特定版本,例如 debian-10-buster-v20200309

    • IMAGE_FAMILY圖片系列。這會指定最新的非已淘汰 OS 映像檔。舉例來說,如果您指定 family/debian-10,系統會使用 Debian 10 映像檔系列中的最新版本。

  • TIME:您希望系統自動終止 VM 的時間。指定時間必須至少在 30 秒後,最晚則為 120 天後。將時間格式設為 RFC 3339 時間戳記

    YYYY-MM-DDTHH:MM:SSOFFSET
    

    更改下列內容:

    • YYYY-MM-DD:日期格式為 4 位數年份、2 位數月份和 2 位數日期,並以連字號分隔。
    • HH:MM:SS:時間格式為 2 位數的小時 (採用 24 小時制)、2 位數的分鐘和 2 位數的秒數,並以半形冒號分隔。
    • OFFSET:時區格式為世界標準時間 (UTC) 的偏移量。舉例來說,如要使用比世界標準時間早 8 小時的太平洋標準時間 (PST),請指定 -08:00。如要使用零時差 (UTC+0),請指定 Z

MIG 中 VM 的時間限制運作方式

為 MIG 中的 VM 指定時間限制時,系統會自動在 VM 的終止時間戳記 (terminationTimestamp) 欄位中,設定 MIG 終止 VM 的時間。

系統會根據您指定的時間限制類型,設定 VM 的終止時間戳記,如下所示:

  • 以執行時間為單位的時間限制 (maxRunDuration):

    VM 的 terminationTimestamp = VM 的最新建立或啟動時間 + maxRunDuration

    指定時間長度時,系統會根據 VM 的最新建立或啟動時間設定終止時間戳記。如果重新建立、重新啟動、繼續或更換 VM,系統會重新計算終止時間戳記。MIG 中各個 VM 的終止時間戳記可能不同,取決於每個 VM 上次建立或啟動的時間。舉例來說,如果 VM 經過修復,系統會重新計算 VM 的終止時間戳記,方法是將修復期間 VM 重新建立的時間加上持續時間。

  • 時間限制 (終止時間) (terminationTime):

    terminationTimestamp 的 VM = terminationTime

    指定時間時,終止時間戳記會設為該時間 (前提是該時間在未來)。如果終止時間已過,任何嘗試建立、重新啟動或更換 VM 的 MIG 動作都會失敗。如要解決這類錯誤,您必須建立新的執行個體範本,並設定未來的終止時間,然後將該範本套用至 MIG。如要在新範本中使用現有範本屬性,請根據現有範本建立執行個體範本

VM 重新整理期間,終止時間戳記不會變更。舉例來說,如果將更新的干擾程度設為 REFRESH,則每當 MIG 更新 VM 時,系統都會保留終止時間戳記。

當您暫停或停止 MIG 中的 VM 時,無論時間限制類型為何,系統都會自動清除終止時間戳記。當您恢復或啟動 VM 時,系統會根據時間限制類型重新設定終止時間戳記,如本節稍早所述。

設定時間限制時,自動縮放的運作方式

自動調度資源功能可讓 MIG 根據負載的增減,自動新增或移除 VM。當 MIG 刪除已達終止時間戳記的 VM 時,MIG 會建立新的 VM,以維持自動調度器建議的大小。新 VM 會在指定時限內執行。如果自動調度器建議減少 VM 數量,MIG 就會刪除 VM,即使 VM 尚未達到時間限制也一樣。

如果您已設定縮放時間表,VM 只會執行到時間表結束,或直到 VM 達到終止時間戳記為止,兩者取其先。

後續步驟