本页面介绍如何创建和管理实例模板。通过实例模板,您可以指定在创建虚拟机 (VM) 实例时要使用的机器类型、启动磁盘映像、网络和其他虚拟机属性。
您可以使用实例模板在代管式实例组 (MIG) 中创建实例,或创建单个虚拟机。
准备工作
- 如果您要使用本指南中的命令行示例,请执行以下操作:
- 安装或更新到 Google Cloud CLI 的最新版本。
- 设置默认区域和可用区。
- 如果您要使用本指南中的 API 示例,请设置 API 访问权限。
- 了解何时以及为何要创建确定性实例模板。
限制
- gcloud CLI 和 API 支持实例模板中位于
nic0
以外的接口的共享 VPC,但控制台不支持。 - 您无法更新现有实例模板,也无法在创建实例模板后对其进行更改。如果实例模板过期,或者您需要更改配置,请创建一个新的实例模板。
新建实例模板
您在创建单个虚拟机实例的请求中指定的大多数虚拟机属性也可以为实例模板指定,包括任何虚拟机元数据、启动脚本、永久性磁盘、服务帐号等等。您必须指定机器类型、启动磁盘和网络。
通过 Google Cloud Console、Google Cloud CLI、API、Terraform 或 Cloud 客户端库创建实例模板。
控制台
在控制台中,转到实例模板页面。
点击创建实例模板。
为以下字段输入值,或接受默认值。默认值会根据您所选的机器系列而变化。
- 机器类型
- 映像
- 启动磁盘
- VPC 网络
- IP 地址
可选:如果您选择了支持安全强化型虚拟机的映像,请更改虚拟机的安全强化型虚拟机设置:
- 在管理、安全、磁盘、网络、单独租用下,点击安全标签页。
- 如果您要停用安全启动,请清除开启安全启动复选框。安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。如需了解详情,请参阅安全启动。
如果您要停用虚拟可信平台模块 (vTPM),请清除开启 vTPM 复选框。vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)。
如果您要停用完整性监控,请取消选中开启完整性监控复选框。借助完整性监控功能,您可以使用 Cloud Monitoring 监控安全强化型虚拟机实例的启动完整性。如需了解详情,请参阅完整性监控。
可选:在管理、安全、磁盘、网络、单独租用下,点击相应标签页以进一步自定义模板。例如,您最多可以添加 15 个辅助非启动磁盘。
可选:点击等效 REST 以查看 REST 请求正文,其中包括您的实例模板的 JSON 表示法。
点击创建以创建模板。
gcloud
在 gcloud compute
中,使用 instance-templates create
命令创建实例模板。
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME
将 INSTANCE_TEMPLATE_NAME
替换为实例模板的名称。
如果您未提供明确的模板设置,gcloud compute
将使用以下默认值:
- 机器类型:例如
n1-standard-1
- 映像:最新的 Debian 映像
- 启动磁盘:以虚拟机命名的新标准启动磁盘
- 网络:默认 VPC 网络
- IP 地址:临时外部 IP 地址
您也可以明确提供这些配置设置。例如:
gcloud compute instance-templates create example-template-custom \ --machine-type=e2-standard-4 \ --image-family=debian-10 \ --image-project=debian-cloud \ --boot-disk-size=250GB
您最多可以添加 15 个辅助非启动磁盘。为您创建的每个辅助磁盘指定 --create-disk
标志。如需通过公共映像或库存映像创建辅助磁盘,请在 --create-disk
标志中指定 image
和 image-project
属性。如需创建空白磁盘,请勿包含这些属性。另外,您可以根据需要添加磁盘 size
和 type
属性。
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \ --create-disk= \ {--image=DISK_IMAGE | --image-family=DISK_IMAGE_FAMILY}, \ image-project=DISK_IMAGE_PROJECT, \ size=SIZE_GB
请替换以下内容:
INSTANCE_TEMPLATE_NAME
:新模板的名称DISK_IMAGE
或DISK_IMAGE_FAMILY
:指定以下其中一项:DISK_IMAGE
:您要用作非启动磁盘的映像的名称DISK_IMAGE_FAMILY
:要用作非启动磁盘的映像系列如需详细了解映像系列,请参阅在 Compute Engine 上使用映像系列时的最佳做法。
DISK_IMAGE_PROJECT
:映像所属的映像项目对于空白磁盘,请勿指定
image-project
属性。如需详细了解公共映像,请参阅公共映像。SIZE_GB
:辅助磁盘的大小
对于空白磁盘,请勿指定 image
属性。
如果选择支持受防护的虚拟机的映像,则可以选择使用以下标志之一更改实例的受防护的虚拟机设置:
--no-shielded-secure-boot
:关闭安全启动安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。如需了解详情,请参阅安全启动。
--no-shielded-vtpm
:关闭虚拟可信平台模块 (vTPM)vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)。
--no-shielded-integrity-monitoring
:关闭完整性监控借助完整性监控功能,您可以使用 Cloud Monitoring 监控安全强化型虚拟机实例的启动完整性。如需了解详情,请参阅完整性监控。
如需查看所有可用子命令和标志的列表,请参阅 instance-templates
参考文档。
采用了默认配置设置的模板可能如下所示:
gcloud compute instance-templates describe example-template
creationTimestamp: '2019-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://compute.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-10 kind: compute#attachedDisk mode: READ_WRITE type: PERSISTENT machineType: e2-standard-2 networkInterfaces: - accessConfigs: - kind: compute#accessConfig name: external-nat type: ONE_TO_ONE_NAT network: https://compute.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://compute.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-template
API
如需创建实例模板,请向 instanceTemplates.insert
方法发出 POST
请求:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
将 PROJECT_ID 替换为项目 ID。
在请求正文中,提供模板属性:
{ "name": "INSTANCE_TEMPLATE_NAME" "properties": { "machineType": "zones/ZONE/machineTypes/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" } } ] } }
请替换以下内容:
- INSTANCE_TEMPLATE_NAME:实例模板的名称
- ZONE:虚拟机所在的可用区
MACHINE_TYPE:虚拟机的机器类型
-
IMAGE_PROJECT
:映像所属的映像项目如需详细了解公共映像,请参阅公共映像。
IMAGE
或IMAGE_FAMILY
:指定以下其中一项:-
IMAGE
:映像的特定版本例如
"sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"
IMAGE_FAMILY
:映像系列此项表示通过最新的未弃用的操作系统映像创建虚拟机。 例如,如果您指定
"sourceImage": "projects/debian-cloud/global/images/family/debian-10"
,则 Compute Engine 会通过 Debian 10 映像系列中最新版本的操作系统映像创建虚拟机。如需详细了解映像系列,请参阅在 Compute Engine 上使用映像系列时的最佳做法。
-
您可以为 disks
属性指定以下选项之一:
指定
initializeParams
可为每个实例创建永久性启动磁盘。通过对每个额外磁盘使用initializeParams
属性,最多可以添加 15 个辅助非启动磁盘。您可以使用sourceImage
中的公共或自定义映像(或映像系列)创建磁盘,如上例所示。如需添加空白磁盘,请勿指定sourceImage
。指定
source
可挂接现有的永久性启动磁盘。如果挂接现有启动磁盘,则只能通过模板创建一个实例。
另外,您也可以视需要为 initializeParams
指定 diskSizeGb
、diskType
和 labels
属性,为 source
指定 diskSizeGb
属性。
如果选择支持安全强化型虚拟机的映像,则可以视需要使用以下布尔值请求正文项更改虚拟机的安全强化型虚拟机设置:
enableSecureBoot
:开启或关闭安全启动安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。如需了解详情,请参阅安全启动。
enableVtpm
:开启或关闭虚拟可信平台模块 (vTPM)vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)。
enableIntegrityMonitoring
:开启或关闭完整性监控借助完整性监控功能,您可以使用 Cloud Monitoring 报告监控和验证安全强化型虚拟机实例的运行时启动完整性。如需了解详情,请参阅完整性监控。
如需详细了解请求参数,请参阅 instanceTemplates.insert
方法。
Terraform
您可以使用 Terraform 资源创建实例模板。
以下 Terraform 示例类似于以下 gcloud CLI 命令:
gcloud compute instance-templates create my-instance-template \ --machine-type=e2-standard-4 \ --image-family=debian-9 \ --image-project=debian-cloud \ --boot-disk-size=250GB
Go
Java
Node.js
Python
根据现有实例创建实例模板
您可以使用 Compute Engine API 或 gcloud CLI 将现有虚拟机实例的配置另存为实例模板。(可选)您可以覆盖模板中定义实例的来源磁盘的方式。
如果您需要覆盖其他属性,请先根据现有实例创建一个实例模板,然后借助其他覆盖创建一个类似模板。
gcloud
使用带有 --source-instance
和 --source-instance-zone
标志的 gcloud instance-templates create
命令。
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \ --source-instance=SOURCE_INSTANCE \ --source-instance-zone=SOURCE_INSTANCE_ZONE \
如需替换如何定义源实例的磁盘,请添加一个或多个 --configure-disk
标志:
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_OPTIONS, \ auto-delete=AUTO_DELETE
请替换以下内容:
INSTANCE_TEMPLATE_NAME
是要创建的模板的名称。SOURCE_INSTANCE
是要用作新模板的模型的实例名称。SOURCE_INSTANCE_ZONE
是包含来源实例的地区。SOURCE_DISK
是您要在模板中替换的来源实例磁盘的名称。INSTANTIATE_OPTIONS
指定是否添加磁盘以及要使用的映像。有效值取决于磁盘类型,具体如下:source-image
或source-image-family
(仅对启动磁盘和其他永久性读写磁盘有效)。如果要使用用于在来源虚拟机实例中创建磁盘的来源映像或来源映像系列,请指定此选项。custom-image
(仅对启动磁盘和其他永久性读写磁盘有效)。如果要在实例模板中保留来源虚拟机中的应用和设置,您可以创建自定义映像,然后在创建模板时指定该映像。指定时,请提供自定义映像的路径或网址,如以下示例所示。或者,您也可以使用以下格式指定映像系列:--configure-disk=device-name=DATA_DISK_NAME,instantiate-from=custom-image,
custom-image=projects/PROJECT_ID/global/images/family/IMAGE_FAMILY_NAMEattach-read-only
(仅对只读磁盘有效)。blank
(仅对非启动永久性磁盘和本地 SSD 有效)。如果已指定,则在使用模板创建新实例时,将创建未格式化的该磁盘。您必须先在启动脚本中格式化并装载该磁盘,然后才能在可扩缩的设置中使用。do-not-include
(仅对非启动永久性磁盘和只读磁盘有效)。
AUTO_DELETE
指定删除实例时是否自动删除磁盘。有效值为false
、no
、true
、yes
。
例如,以下命令会根据 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/cps-cloud/global/images/cos-89-16108-403-15
API
调用 instanceTemplates.insert
方法并指定 sourceInstance
字段。如需替换如何定义源实例的磁盘,请添加一个或多个 diskConfigs
字段。
POST https://compute.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_OPTIONS", "autoDelete": false } ] } }
请替换以下内容:
PROJECT_ID
:请求的项目 ID。INSTANCE_TEMPLATE_NAME
:新模板的名称SOURCE_INSTANCE_ZONE
:来源实例所在的可用区SOURCE_INSTANCE
:要用作此实例模板模型的来源实例的名称SOURCE_DISK
:您要在模板中替换的来源实例磁盘的名称INSTANTIATE_OPTIONS
指定是否添加磁盘以及要使用的映像有效值取决于磁盘类型,具体如下:
source-image
或source-image-family
(仅对启动磁盘和其他永久性读写磁盘有效)。custom-image
(仅对启动磁盘和其他永久性读写磁盘有效)。如果要在实例模板中保留来源虚拟机中的应用和设置,您可以创建自定义映像,然后在创建模板时指定该映像。指定时,请提供自定义映像的路径或网址,如以下示例所示。或者,您也可以使用以下格式指定映像系列:--configure-disk=device-name=DATA_DISK_NAME,instantiate-from=custom-image,
custom-image=projects/PROJECT_ID/global/images/family/IMAGE_FAMILY_NAMEattach-read-only
(仅对只读磁盘有效)。blank
(仅对非启动永久性磁盘和本地 SSD 有效)。如果已指定,则在使用模板创建新实例时,将创建未格式化的该磁盘。您必须先在启动脚本中格式化并装载该磁盘,然后才能在可扩缩的设置中使用。do-not-include
(仅对非启动永久性磁盘和只读磁盘有效)。
以下示例将根据 my-source-instance
创建新的实例模板。在实例模板中,data-disk-a
的映像被替换为 projects/cos-cloud/global/images/cos-89-16108-403-15
。
POST https://compute.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/cos-cloud/global/images/cos-89-16108-403-15" } ] } }
Go
Java
Node.js
Python
下表显示了在模板中定义覆盖磁盘的选项。
磁盘类型 | 选项 |
---|---|
启动磁盘 |
|
其他读写永久性磁盘 |
|
只读磁盘 |
|
本地 SSD |
|
对于每个磁盘,您还可以替换 auto-delete
特性 (Attribute),以指定在删除关联实例时是否应删除该磁盘。
默认情况下,如果未指定覆盖选项,则模板中的磁盘配置与来源实例一致。
根据现有模板创建实例模板
您无法更新现有实例模板。但是,如果实例模板过期或您需要做出更改,则可以使用控制台,创建另一个具有类似属性的实例模板。
转到实例模板页面。
点击您要复制和更新的实例模板。
点击创建类似模板。
在新模板中更新配置。
点击创建。
使用容器映像创建实例模板
您可以在实例模板中指定容器映像。默认情况下,Compute Engine 还会在模板中添加安装了 Docker 的 Container-Optimized OS 映像。当您使用模板创建新实例时,容器会在实例启动时自动启动。
控制台
转到实例模板页面。
点击创建实例模板。
在容器部分中,点击部署容器。
在配置容器对话框中,指定要使用的容器映像。
- 您可以指定 Container Registry 或 Artifact Registry 中的映像。例如:
gcr.io/cloud-marketplace/google/nginx1:TAG
,其中 TAG 是为 Google Cloud Marketplace 上提供的特定 NGINX 容器映像版本定义的标记。us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
用于选择 Artifact Registry 中存储的示例hello-app
映像。
- 如果您使用 Docker Hub 中的容器映像,请始终指定完整的 Docker 映像名称。例如,指定以下映像名称以部署一个 Apache 容器映像:
docker.io/httpd:2.4
。
- 您可以指定 Container Registry 或 Artifact Registry 中的映像。例如:
(可选)点击高级容器选项。如需了解详情,请参阅配置选项以便运行容器。
点击创建。
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:TAG
。
gcloud compute instance-templates create-with-container nginx-vm \ --container-image=gcr.io/cloud-marketplace/google/nginx1:TAG
将 TAG
替换为为 Google Cloud Marketplace 上提供的特定 NGINX 容器映像版本定义的标记。
此外,您还可以配置运行容器的选项。
创建可指定子网的实例模板
gcloud
使用 --subnet
标志可将通过模板创建的实例置入您选择的子网中。--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
:子网的名称或网址
以下示例会创建一个名为 template-qa
的模板,该模板仅在 subnet-us-qa
子网中创建实例。
gcloud compute instance-templates create template-qa \
--region=us-central1 \
--subnet=subnet-us-qa
Created [https://compute.googleapis.com/compute/latest/projects/PROJECT_ID/global/instanceTemplates/template-qa].
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP
template-qa e2-standard-2 2019-12-23T20:34:00.791-07:00
Go
Java
Node.js
Python
如果使用此模板为 MIG(无论是否启用自动扩缩功能)创建实例,则系统会自动在指定的区域和子网中创建实例。这样一来,您就可以控制为了进行负载均衡而创建的新实例的子网。
在实例模板中使用自定义或公共映像
您可以为实例模板使用自定义映像或公共映像:
自定义映像由于 MIG 用于频繁地添加和移除实例,因此创建自定义映像并在实例模板中指定该映像会很有用。您可以在映像中做好准备,使其配备您的实例需要的应用和设置,这样您就不必在 MIG 中的各个虚拟机上手动配置这几项内容。
与使用启动脚本的虚拟机相比,自定义映像的确定性更高,且启动速度更快。但是,启动脚本更加灵活,可让您更轻松地更新实例中的应用和设置。
如果您要使用映像系列管理映像,则可以在实例模板中指定自定义或公共映像系列的名称。如需详细了解映像系列,请参阅在 Compute Engine 上使用映像系列时的最佳做法。
后续步骤
- 使用实例模板创建虚拟机实例。
- 创建可用区级代管式实例组 (MIG)。
- 创建区域级 MIG。
- 更新现有 MIG 中的虚拟机以使用新模板中的配置。