建立執行個體範本

本頁面說明如何建立及管理執行個體範本。執行個體範本可用於定義機器類型、開機磁碟映像檔或容器映像檔、網路,以及新建 VM 執行個體時所使用的其他執行個體屬性。您可以利用執行個體範本在代管執行個體群組中建立執行個體,或建立個別的執行個體

事前準備

建立新的執行個體範本

在用來建立個別執行個體的一般 API 要求中,大多數可供定義的執行個體屬性都能利用執行個體範本來定義,包括任何執行個體中繼資料、開機指令碼、永久磁碟、服務帳戶等等。

建立執行個體範本時,您至少須提供建立執行個體時使用的相同必要屬性。如要查看必要欄位清單,請參閱 instanceTemplates().insert 參考資料。

您可以透過 Google Cloud Platform 主控台gcloud compute 工具API 建立執行個體範本。

主控台

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

    前往「執行個體範本」頁面

  2. 點選 [Create instance template] (建立執行個體範本)
  3. 視需求填寫執行個體範本中的欄位,或使用預設值。系統提供的預設值如下:

    • 機器類型:n1-standard-1
    • 映像檔:最新版 Debian 映像檔
    • 開機磁碟:以執行個體命名的新標準開機磁碟
    • VPC 網路:default VPC 網路
    • IP 位址:臨時的外部 IP 位址
  4. 如果您選擇支援受防護 VM 的映像檔,也可以變更執行個體的受防護 VM 設定:

    1. 按一下「Management, Security, Disks, Networking, Sole Tenancy」(管理、安全性、磁碟、網路、單獨租用) 區段中的 [Security] (安全性) 分頁標籤。
    2. 如果您要停用安全啟動功能,請取消勾選 [Turn on Secure Boot] (啟用安全啟動功能)。安全啟動功能可防止 VM 執行個體受到啟動層級和核心層級的惡意軟體和 Rootkit 攻擊。詳情請參閱安全啟動一節。
    3. 如果您要停用虛擬信任平台模組 (vTPM),請取消勾選 [Turn on vTPM] (啟用 vTPM)。vTPM 可以啟用測量啟動功能,來驗證 VM 的啟動前和啟動完整性。詳情請參閱虛擬信任平台模組 (vTPM) 一節。

    4. 如果您要停用完整性監控功能,請取消勾選 [Turn on Integrity Monitoring] (啟用完整性監控功能)。完整性監控功能可以讓您利用 Stackdriver 來監控受防護 VM 執行個體的啟動完整性。詳情請參閱完整性監控一節。

  5. 您也可以按一下 [Management, Security, Disks, Networking, Sole Tenancy] (管理、安全性、磁碟、網路、單獨租用) 區段中的分頁標籤,進一步自訂您的範本。例如,您最多可以新增 15 個次要非開機磁碟。

  6. 您也可以按一下頁面底部的 [Equivalent REST] (對等 REST) 查看 REST 要求主體,這包括執行個體範本的 JSON 表示法

  7. 按一下 [Create] (建立),建立範本。

gcloud

透過 gcloud compute 使用 instance-templates create 指令建立執行個體範本:

gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME]

您可以用所需的執行個體範本名稱取代此處的 [INSTANCE_TEMPLATE_NAME]

如果未提供明確的範本設定,gcloud compute 就會使用以下預設值建立範本:

  • 機器類型:n1-standard-1
  • 映像檔:最新版 Debian 映像檔
  • 開機磁碟:以執行個體命名的新標準開機磁碟
  • 網路:default VPC 網路
  • IP 位址:臨時的外部 IP 位址

您也可以明確提供這些設定,例如:

gcloud compute instance-templates create example-template-custom \
    --machine-type n1-standard-4 \
    --image-family debian-9 \
    --image-project debian-cloud \
    --boot-disk-size 250GB

您最多可以加入 15 個次要非開機磁碟。請為您建立的每個次要磁碟,指定 --create-disk 標記。如要透過公開或庫存映像檔建立次要磁碟,請在 --create-disk 標記中指定 imageimage-project 屬性。如要建立空白磁碟,請勿包含這些屬性。您也可以視情況加入磁碟 sizetype 屬性。

gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME] \
    --create-disk image=[DISK_IMAGE],image-project=[DISK_IMAGE_PROJECT],size=[SIZE_GB]

其中:

  • [INSTANCE_TEMPLATE_NAME] 是新範本的名稱。
  • [DISK_IMAGE] 是次要磁碟的來源映像檔。如需可用映像檔的清單,請執行 gcloud compute images list。如果是空白磁碟,請勿指定磁碟映像檔或映像檔專案。
  • [DISK_IMAGE_PROJECT] 是磁碟映像檔所屬的映像檔專案。如果是空白磁碟,請勿指定磁碟映像檔或映像檔專案。
  • [SIZE_GB] 是次要磁碟的大小。

如果您選擇的映像檔支援受防護的 VM,可以選擇使用下列其中一個標記變更執行個體的「受防護的 VM」設定:

  • --no-shielded-vm-secure-boot:停用安全啟動功能。安全啟動功能可防止 VM 執行個體受到啟動層級和核心層級的惡意軟體和 Rootkit 攻擊。詳情請參閱安全啟動一節。
  • --no-shielded-vm-vtpm:停用虛擬信任平台模組 (vTPM)。vTPM 可啟用測量啟動功能,來驗證 VM 的啟動前和啟動完整性。詳情請參閱虛擬信任平台模組 (vTPM) 一節。

  • --no-shielded-vm-integrity-monitoring:停用完整性監控功能。完整性監控功能可以讓您利用 Stackdriver 來監控受防護 VM 執行個體的啟動完整性。詳情請參閱完整性監控一節。

如要查看所有可用標記的清單,請參閱 gcloud compute 參考資料

預設設定的範本如下:

gcloud compute instance-templates describe example-template
creationTimestamp: '2014-09-10T16:18:32.042-07:00'
description: ''
id: '6057583701980539406'
kind: compute#instanceTemplate
name: example-template
properties:
  canIpForward: false
  disks:
  - autoDelete: true
    boot: true
    initializeParams:
      sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    kind: compute#attachedDisk
    mode: READ_WRITE
    type: PERSISTENT
  machineType: n1-standard-1
  networkInterfaces:
  - accessConfigs:
    - kind: compute#accessConfig
      name: external-nat
      type: ONE_TO_ONE_NAT
    network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default
  scheduling:
    automaticRestart: true
    onHostMaintenance: MIGRATE
  serviceAccounts:
  - email: default
    scopes:
    - https://www.googleapis.com/auth/devstorage.read_only
selfLink: https://www.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-template

API

您必須透過執行個體範本 API 明確定義所有必要的設定欄位 (如 instanceTemplates().insert 說明文件所述)。舉例來說,符合必要欄位下限的執行個體範本如下:

{
"name": "example-template",
"properties": {
  "machineType": "n1-standard-4",
  "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/debian-cloud/global/images/family/debian-9"
      }
    }
  ]
  }
}

您必須一併提供 disks 屬性和 initializeParams 屬性,才能為所有執行個體建立新的永久開機磁碟。您也可以提供 source 屬性來掛接現有的永久開機磁碟。不過請注意,如果掛接現有的開機磁碟,您只能透過範本建立一個執行個體。

針對每個其他磁碟使用 initializeParams 屬性可讓您加入最多 15 個次要非啟動磁碟。使用公開或私人映像檔建立其他磁碟。如要新增空白磁碟,請勿指定 sourceImage。您可以視需要納入 diskSizeGbdiskTypelabels 屬性。

如果您選擇的映像檔支援受防護的 VM,則可選擇使用下列其中一個布林要求主體項目變更執行個體的「受防護的 VM」設定:

  • enableSecureBoot:啟用或停用安全啟動功能。安全啟動功能可防止 VM 執行個體受到啟動層級和核心層級的惡意軟體和 Rootkit 攻擊。詳情請參閱安全啟動一節。
  • enableVtpm:啟用或停用虛擬信任平台模組 (vTPM)。vTPM 可啟用測量啟動功能,來驗證 VM 的啟動前和啟動完整性。詳情請參閱虛擬信任平台模組 (vTPM) 一節。
  • enableIntegrityMonitoring:啟用或停用完整性監控功能。透過完整性監控功能,您可以利用 Stackdriver 報表來監控及驗證受防護 VM 執行個體的執行階段啟動完整性。詳情請參閱完整性監控一節。

如需瞭解所有可能的欄位,請參閱參考說明文件

根據現有的執行個體建立執行個體範本

您可以使用 --source-instance--source-instance-zone 標記來將現有虛擬機器執行個體的設定儲存到執行個體範本。 您也可以選擇覆寫範本中定義的執行個體來源磁碟設定。

下表列出了各個選項如何覆寫範本中定義的磁碟設定。

磁碟類型 選項
開機磁碟
  • [預設] 使用先前在來源執行個體中建立開機磁碟時使用的相同來源映像檔/來源映像檔系列。
  • 使用任何映像檔 (自訂或公開) 的網址。
其他讀寫永久磁碟
  • [預設] 使用先前在來源執行個體中建立磁碟時使用的相同來源映像檔/來源映像檔系列。注意:如果來源執行個體中的磁碟沒有來源映像檔/來源映像檔系列屬性,系統就會以空白磁碟的形式加入範本。
  • 使用任何映像檔 (自訂或公開) 的網址。
  • 改為在範本中加入空白磁碟。使用範本建立新的執行個體時,系統會以未格式化的狀態建立這個磁碟。您必須在開機指令碼中格式化並掛接磁碟,才能在可調度資源的設定中使用該磁碟。
  • 不加入磁碟。
唯讀磁碟
  • [預設] 在唯讀模式下加入磁碟。
  • 不加入磁碟。
本機 SSD
  • [預設] 加入空白的本機 SSD。使用範本建立新的執行個體時,系統會以未格式化的狀態建立這個磁碟。您必須在開機指令碼中格式化並掛接磁碟,才能在可調度資源的設定中使用該磁碟。

您也可以覆寫每個磁碟的 auto-delete 屬性,指定是否要在相關執行個體遭刪除時刪除磁碟。

根據預設,如果未指定覆寫選項,範本中的磁碟設定會與來源執行個體保持一致。

gcloud

如要查看所有標記的清單,請執行 gcloud instance-templates create 指令。

gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME] \
    --source-instance=[SOURCE_INSTANCE] \
    --source-instance-zone=[SOURCE_INSTANCE_ZONE] \
    [--configure-disk= \
        device-name=[SOURCE_DISK], \
        instantiate-from=[INSTANTIATE_FROM], \
        auto-delete=[AUTO_DELETE]]

其中:

  • [INSTANCE_TEMPLATE_NAME] 是您要建立的範本名稱。
  • [SOURCE_INSTANCE] 是要當做新範本模型的執行個體名稱。
  • [SOURCE_INSTANCE_ZONE] 是包含來源執行個體的區域。
  • [SOURCE_DISK] 是您要在範本中覆寫的來源執行個體磁碟名稱。
  • [INSTANTIATE_FROM] 會指定是否要包含磁碟以及要使用哪個映像檔。有效值會因磁碟類型而異:
    • source-imagesource-image-family (僅對開機磁碟和其他永久讀寫磁碟有效)。
    • custom-image (僅對開機磁碟和其他永久讀寫磁碟有效)。如果指定這個值,您必須一併指定路徑或網址;詳情請參閱下方的範例。
    • attach-read-only (僅對唯讀磁碟時有效)。
    • blank (僅對非開機永久磁碟和本機 SSD 有效)。如果指定這個值,那麼當您使用範本新建執行個體時,系統會建立未格式化的磁碟。您必須在開機指令碼中格式化並掛接磁碟,才能在可調度資源的設定中使用該磁碟。
    • do-not-include (僅對非開機永久磁碟和唯讀磁碟有效)。
    • blank (僅對非開機永久磁碟和唯讀磁碟有效)。
  • [AUTO_DELETE] 會指定是否要在執行個體遭刪除時自動刪除磁碟。有效值為:falsenotrueyes

舉例來說,以下指令會根據 my-source-instance 建立執行個體範本,並附加以下選項:使用 data-disk-a 中的原始映像檔,但是將自動刪除功能設為 true,並使用自訂映像檔取代 data-disk-b

gcloud compute instance-templates create my-instance-template  \
    --source-instance my-source-instance \
    --configure-disk=device-name=data-disk-a,instantiate-from=source-image, \
      auto-delete=true
    --configure-disk=device-name=data-disk-b,instantiate-from=custom-image, \
      custom-image=projects/coreos-cloud/global/images/coreos-alpha-1492-3-0-v20170810

API

如要查看所有標記的清單,請參閱 InstanceTemplates API 說明文件。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/instanceTemplates
{
  "name": "[INSTANCE_TEMPLATE_NAME]",
  "sourceInstance": "zones/[SOURCE_INSTANCE_ZONE]/instances/[SOURCE_INSTANCE]",
  "sourceInstanceParams": {
    "diskConfigs": [
      {
        "deviceName": "[SOURCE_DISK]",
        "instantiateFrom": "[INSTANTIATE_FROM]"
      }
    ]
  }
}

其中:

  • [PROJECT_ID] 是要求中的專案 ID。
  • [INSTANCE_TEMPLATE_NAME] 是新範本的名稱。
  • [SOURCE_INSTANCE_ZONE] 是來源執行個體的區域。
  • [SOURCE_INSTANCE] 是要當做這個執行個體範本模型的來源執行個體名稱。
  • [SOURCE_DISK] 是您要在範本中覆寫的來源執行個體磁碟名稱。
  • [INSTANTIATE_FROM] 會指定是否要包含磁碟以及要使用哪個映像檔。有效值會因磁碟類型而異:
    • source-imagesource-image-family (僅對開機磁碟和其他永久讀寫磁碟有效)。
    • custom-image (僅對開機磁碟和其他永久讀寫磁碟有效)。如果指定這個值,您必須一併指定路徑或網址;詳情請參閱下方的範例。
    • attach-read-only (僅對唯讀磁碟時有效)。
    • blank (僅對非開機永久磁碟和本機 SSD 有效)。如果指定這個值,那麼當您使用範本新建執行個體時,系統會建立未格式化的磁碟。您必須在開機指令碼中格式化並掛接磁碟,才能在可調度資源的設定中使用該磁碟。
    • do-not-include (僅對非開機永久磁碟和唯讀磁碟有效)。

以下範例會根據 my-source-instance 建立新的執行個體範本。在這個執行個體範本中,data-disk-a 的映像檔會以 projects/coreos-cloud/global/images/coreos-alpha-1492-3-0-v20170810 取代。

POST https://www.googleapis.com/compute/v1/projects/my_project/global/instanceTemplates
{
  "name": "my-instance-template",
  "sourceInstance": "zones/us-central1-a/instances/my-source-instance",
  "sourceInstanceParams":
  {
    "diskConfigs":
    [
      {
        "deviceName": "data-disk-a",
        "instantiateFrom": "custom-image",
        "customImage": "projects/coreos-cloud/global/images/coreos-alpha-1492-3-0-v20170810"
      }
    ]
  }
}

透過容器映像檔建立執行個體

您可以在執行個體範本中指定容器映像檔。根據預設,Compute Engine 會在範本中一併包含已安裝 Docker 的 Container-Optimized OS 映像檔。當您使用該範本建立新的執行個體時,系統就會在執行個體啟動時自動執行容器。

主控台

  1. 前往「執行個體範本」頁面。

    前往「執行個體範本」頁面

  2. 點選 [Create instance template] (建立執行個體範本)
  3. 在「Container」(容器) 區段中,勾選 [Deploy a container image to this VM instance] (將容器映像檔部署至這個 VM 執行個體) 核取方塊。
  4. 指定您要使用的容器映像檔
    • 例如,您可以透過 Cloud Launcher 指定 gcr.io/cloud-marketplace/google/nginx1:1.12 來選取 NGINX 1.12 容器映像檔。
    • 如果您使用 Docker Hub 中的容器映像檔,請一律指定完整的 Docker 映像檔名稱。例如,指定下列映像檔名稱來部署 Apache 容器映像檔:docker.io/httpd:2.4
  5. 視需求按一下 [Advanced container options] (進階容器選項)。詳情請參閱設定選項以執行容器一文。
  6. 按一下 [Create] (建立)。

gcloud

使用 gcloud compute instance-templates create-with-container 指令:

gcloud compute instance-templates create-with-container [INSTANCE_TEMPLATE_NAME] \
     --container-image [CONTAINER_IMAGE]

其中:

  • [INSTANCE_TEMPLATE_NAME] 是您要建立的範本名稱。
  • [CONTAINER_IMAGE] 是您要使用的容器映像檔的完整名稱。

例如,下列指令會建立名為 nginx-vm 的新執行個體範本:透過這個範本建立的 VM 執行個體會在 VM 啟動時執行 gcr.io/cloud-marketplace/google/nginx1:1.12 這個容器映像檔。

 gcloud compute instance-templates create-with-container nginx-vm \
     --container-image gcr.io/cloud-marketplace/google/nginx1:1.12

您也可以設定執行容器的選項

建立指定子網路的執行個體範本

在執行個體範本指令中加入 --subnet--region 標記,可以將新的執行個體放置於您指定的子網路中。--subnet 標記必須搭配 --region 標記使用。

gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME] \
    --region [REGION] \
    --subnet [SUBNET_NAME_OR_URL]

請用下列內容取代其中的內容:

  • [INSTANCE_TEMPLATE_NAME] 是您想要建立的執行個體範本名稱。
  • [REGION] 是子網路的地區。
  • [SUBNET_NAME_OR_URL] 是子網路的名稱或網址。注意:如果使用子網路名稱,Google 就會在目標地區中尋找該子網路 (前提是該子網路位於目標地區)。不過,如果使用子網路網址,您就只能利用該執行個體範本在與子網路網址相關的特定地區中建立執行個體。

本範例會建立名稱為 template-qa 的範本,該範本只會在 subnet-us-qa 子網路中建立執行個體。

gcloud compute instance-templates create template-qa \
    --region us-central1 \
    --subnet subnet-us-qa

Created [https://www.googleapis.com/compute/latest/projects/PROJECT_ID/global/instanceTemplates/template-qa].
NAME        MACHINE_TYPE  PREEMPTIBLE CREATION_TIMESTAMP
template-qa n1-standard-1             2015-12-23T20:34:00.791-07:00

使用這個範本在代管執行個體群組中建立執行個體 (無論是否啟用自動調度資源功能) 之後,系統就會在指定的地區和子網路中自動建立執行個體,方便您控管因負載平衡而新建執行個體的子網路。

在執行個體範本使用自訂或公開映像檔

代管執行個體群組是為了協助使用者頻繁新增及移除執行個體,因此如要建立自訂映像檔並在執行個體範本中指定該映像檔,代管執行個體群組就能派上用場。請事先備妥映像檔和執行個體所需的應用程式和設定,這樣您就不需為代管執行個體群組中的個別執行個體手動設定這些項目。

您也可以建立使用公開映像檔開機指令碼的執行個體範本,在執行個體開始運作之後做好事前準備。自訂映像檔比含有開機指令碼的執行個體更具絕對性,啟動速度也更快。不過,開機指令碼的彈性更大,可讓您更輕鬆地更新執行個體中的應用程式和設定。

更新執行個體範本

您無法更新現有的執行個體範本,也無法在執行個體範本建立後再加以變更。若執行個體範本已過期,或是您需要變更設定,請建立新的執行個體範本。

後續步驟

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

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

這個網頁
Compute Engine 說明文件