创建实例模板

本页面介绍了如何创建和管理实例模板。通过实例模板,您可以定义在创建新虚拟机实例时要使用的机器类型、启动磁盘映像或容器映像、网络和其他实例属性。您可以使用实例模板在托管实例组中创建实例,或创建单个实例

准备工作

创建新的实例模板

您在常规 API 请求中定义的用于创建单个虚拟机实例的大多数实例属性都可以在实例模板中定义,包括任何实例元数据、启动脚本、永久性磁盘、服务帐号等。

要创建实例模板,至少还需要使用创建实例所需的相同属性。请参阅 instanceTemplates().insert 参考,了解需要使用的字段列表。

通过 Google Cloud Platform Consolegcloud compute 工具API 创建实例模板。

Console

  1. 在 GCP Console 中,转到“实例模板”页面。

    转到“实例模板”页面

  2. 点击创建实例模板
  3. 填写您希望在实例模板中使用的字段,或接受默认值。默认提供的值如下所示:

    • 机器类型:n1-standard-1
    • 映像:最新的 Debian 映像
    • 启动磁盘:以实例命名的新标准启动磁盘
    • VPC 网络:default VPC 网络
    • IP 地址:临时外部 IP 地址
  4. (可选)如果选择支持受防护的虚拟机的映像,请更改实例的受防护的虚拟机设置:

    1. 点击管理、安全、磁盘、网络、单独租用部分的安全标签。
    2. 若要停用安全启动,请取消选中开启安全启动。安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。如需了解详情,请参阅安全启动
    3. 若要停用虚拟可信平台模块 (vTPM),请取消选中开启 vTPM。vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)

    4. 若您要停用完整性监控,请取消选中开启完整性监控。借助完整性监控功能,您可以使用 Stackdriver 监控受防护的虚拟机实例的启动完整性。如需了解详情,请参阅完整性监控

  5. (可选)点击管理、安全、磁盘、网络、单独租用部分中的各个标签页以进一步自定义模板。例如,您最多可以添加 15 个辅助非启动磁盘。

  6. (可选)点击页面底部的等效 REST 以查看 REST 请求正文,其中包括您的实例模板的 JSON 表示法

  7. 点击创建以创建模板。

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] 是辅助磁盘的大小。

如果选择支持受防护的虚拟机的映像,则可以选择使用以下标志之一更改实例的受防护的虚拟机设置:

  • --no-shielded-vm-secure-boot:停用安全启动。安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。如需了解详情,请参阅安全启动
  • --no-shielded-vm-vtpm:停用虚拟可信平台模块 (vTPM)。vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)

  • --no-shielded-vm-integrity-monitoring:停用完整性监控。借助完整性监控功能,您可以使用 Stackdriver 监控受防护的虚拟机实例的启动完整性。如需了解详情,请参阅完整性监控

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 属性包括在其中。

如果选择支持安全强化型虚拟机的映像,则可以选择使用以下布尔请求正文项更改实例的安全强化型虚拟机设置:

  • enableSecureBoot:启用或停用安全启动。安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。如需了解详情,请参阅安全启动
  • enableVtpm:启用或停用虚拟可信平台模块 (vTPM)。vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)
  • enableIntegrityMonitoring:启用或停用完整性监控。借助完整性监控功能,您可以使用 Stackdriver 报告监控和验证受防护的虚拟机实例的运行时启动完整性。如需了解详情,请参阅完整性监控

如需了解所有可能使用的字段,请参阅参考文档

根据现有实例创建实例模板

您可以使用 --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 的原始映像,但将 auto-delete 设置为 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 映像。当您使用模板创建新实例时,容器会在实例启动时自动启动。

Console

  1. 转到“实例模板”页面。

    转到“实例模板”页面

  2. 点击创建实例模板
  3. 容器部分中,选中将一个容器映像部署到此虚拟机实例复选框。
  4. 指定要使用的容器映像
    • 例如,您可以指定 gcr.io/cloud-marketplace/google/nginx1:1.12 以从 Cloud Launcher 中选择 NGINX 1.12 容器映像。
    • 如果您使用 Docker Hub 中的容器映像,请始终指定完整的 Docker 映像名称。例如,指定以下映像名称以部署 Apache 容器映像:docker.io/httpd:2.4
  5. (可选)点击高级容器选项。如需了解详情,请参阅配置选项以便运行容器
  6. 点击创建

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 的新实例模板。当虚拟机启动时,使用此模板创建的虚拟机实例将启动并运行容器映像 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 文档