本页面介绍如何创建和管理实例模板。通过实例模板,您可以定义在创建虚拟机实例时要使用的机器类型、启动磁盘映像或容器映像、网络和其他实例属性。您可以使用实例模板在托管实例组 (MIG) 中创建实例,或创建单个实例。
准备工作
- 如果您要使用本指南中的命令行示例,请执行以下操作:
- 安装或更新到 gcloud 命令行工具的最新版本。
- 设置默认区域和可用区。
- 如果您要使用本指南中的 API 示例,请设置 API 访问权限。
创建新的实例模板
您在常规 API 请求中定义的用于创建单个虚拟机实例的大多数实例属性都可以在实例模板中定义,包括任何实例元数据、启动脚本、永久性磁盘、服务帐号等。
要创建实例模板,至少还需要使用创建实例所需的相同属性。如需查看需要使用的字段列表,请参阅 instanceTemplates.insert
参考。
通过 Google Cloud Console、gcloud
命令行工具或 API 创建实例模板。
控制台
在 Cloud Console 中,转到实例模板页面。
点击创建实例模板。
填写您希望在实例模板中使用的字段,或接受默认值。默认提供的值如下所示:
- 机器类型:
e2-standard-2
- 映像:最新的 Debian 映像
- 启动磁盘:以实例命名的新标准启动磁盘
- VPC 网络:
default
VPC 网络 - IP 地址:临时外部 IP 地址
- 机器类型:
(可选)如果选择支持安全强化型虚拟机的映像,请更改实例的安全强化型虚拟机设置:
- 点击管理、安全、磁盘、网络、单独租用部分的安全标签页。
- 如果您要停用安全启动,请清除开启安全启动复选框。安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。如需了解详情,请参阅安全启动。
如果您要停用虚拟可信平台模块 (vTPM),请清除开启 vTPM 复选框。vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)。
如果您要停用完整性监控,请取消选中开启完整性监控复选框。借助完整性监控功能,您可以使用 Cloud Monitoring 监控安全强化型虚拟机实例的启动完整性。如需了解详情,请参阅完整性监控。
(可选)点击管理、安全、磁盘、网络、单独租用部分中的各个标签页以进一步自定义模板。例如,您最多可以添加 15 个辅助非启动磁盘。
(可选)点击页面底部的等效 REST 以查看 REST 请求正文,其中包括您的实例模板的 JSON 表示法。
点击创建以创建模板。
gcloud
在 gcloud compute
中,使用 instance-templates create
命令创建实例模板:将 INSTANCE_TEMPLATE_NAME
替换为实例模板的名称。
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME
如果您未提供明确的模板设置,gcloud compute
将使用以下默认值创建模板:
- 机器类型:
e2-standard-2
- 映像:最新的 Debian 映像
- 启动磁盘:以实例命名的新标准启动磁盘
- 网络:
default
VPC 网络 - IP 地址:临时外部 IP 地址
您也可以明确提供这些配置设置。例如:
gcloud compute instance-templates create example-template-custom \
--machine-type e2-standard-4 \
--image-family debian-9 \
--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-project=DISK_IMAGE_PROJECT,size=SIZE_GB
替换以下内容:
INSTANCE_TEMPLATE_NAME
:新模板的名称。DISK_IMAGE
:辅助磁盘的来源映像。如需查看可用映像的列表,请运行gcloud compute images list
。对于空白磁盘,请勿指定磁盘映像或映像项目。DISK_IMAGE_PROJECT
:磁盘映像所属的映像项目。对于空白磁盘,请勿指定磁盘映像或映像项目。SIZE_GB
:辅助磁盘的大小。
如果选择支持受防护的虚拟机的映像,则可以选择使用以下标志之一更改实例的受防护的虚拟机设置:
--no-shielded-secure-boot
:停用安全启动。安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。如需了解详情,请参阅安全启动。--no-shielded-vtpm
:停用虚拟可信平台模块 (vTPM)。vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)。--no-shielded-integrity-monitoring
:停用完整性监控。借助完整性监控功能,您可以使用 Cloud Monitoring 监控安全强化型虚拟机实例的启动完整性。如需了解详情,请参阅完整性监控。
gcloud compute
参考中提供了可用标志的列表。
采用了默认配置设置的模板可能如下所示:
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-9 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
在实例模板 API 中,您必须明确定义所有必需的配置字段,如 instanceTemplates().insert
文档中所述。例如,具有最少必需字段的实例模板如下所示:
{
"name": "example-template",
"properties": {
"machineType": "e2-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
。作为选项,您可以将 diskSizeGb
、diskType
、labels
属性包括在其中。
如果选择支持安全强化型虚拟机的映像,则可以在请求正文中选择使用以下布尔值项更改实例的安全强化型虚拟机设置:
enableSecureBoot
:启用或停用安全启动。安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。如需了解详情,请参阅安全启动。enableVtpm
:启用或停用虚拟可信平台模块 (vTPM)。vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)。enableIntegrityMonitoring
:启用或停用完整性监控。借助完整性监控功能,您可以使用 Cloud Monitoring 报告监控和验证安全强化型虚拟机实例的运行时启动完整性。如需了解详情,请参阅完整性监控。
如需了解所有可能使用的字段,请参阅参考文档。
根据现有实例创建实例模板
您可以使用 Compute Engine API 或 gcloud
工具将现有虚拟机实例的配置另存为实例模板。
您可以覆盖模板中定义实例的来源磁盘的方式。
如果您需要覆盖其他属性,请先根据现有实例创建一个实例模板,然后借助其他覆盖创建一个类似模板。
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-image
或source-image-family
(仅对启动磁盘和其他永久性读写磁盘有效)。custom-image
(仅对启动磁盘和其他永久性读写磁盘有效)。如果已指定,还必须指定自定义映像的路径或网址,如以下示例所示。attach-read-only
(仅对只读磁盘有效)。blank
(仅对非启动永久性磁盘和本地 SSD 有效)。如果已指定,则在使用模板创建新实例时,将创建未格式化的该磁盘。您必须先在启动脚本中格式化并装载该磁盘,然后才能在可扩缩的设置中使用。do-not-include
(仅对非启动永久性磁盘和只读磁盘有效)。blank
(仅对非启动永久性磁盘和只读磁盘有效)。
[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/coreos-cloud/global/images/coreos-alpha-1492-3-0-v20170810
API
如需查看所有标志的列表,请参阅 InstanceTemplates
API 文档。
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_FROM]"
}
]
}
}
其中:
[PROJECT_ID]
是请求的项目 ID。[INSTANCE_TEMPLATE_NAME]
是新模板的名称。[SOURCE_INSTANCE_ZONE]
是来源实例所在的地区。[SOURCE_INSTANCE]
是要用作此实例模板模型的来源实例的名称。[SOURCE_DISK]
是您要在模板中替换的来源实例磁盘的名称。[INSTANTIATE_FROM]
指定是否添加磁盘以及要使用的映像。有效值取决于磁盘类型,具体如下:source-image
或source-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://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/coreos-cloud/global/images/coreos-alpha-1492-3-0-v20170810"
}
]
}
}
下表显示了一些选项,用于覆盖在模板中定义磁盘的方式。
磁盘类型 | 选项 |
---|---|
启动磁盘 |
|
其他读写永久性磁盘 |
|
只读磁盘 |
|
本地 SSD |
|
对于每个磁盘,您还可以替换 auto-delete
特性 (Attribute),以指定在删除关联实例时是否应删除该磁盘。
默认情况下,如果未指定覆盖选项,则模板中的磁盘配置与来源实例一致。
根据现有模板创建实例模板
您无法更新现有实例模板。但是,如果实例模板过期或您需要进行更改,则可以再创建一个具有类似属性的模板。使用控制台。
转到实例模板页面。
点击您要复制和更新的实例模板。
点击创建类似模板。
在新模板中更新配置。
点击创建。
使用容器映像创建实例模板
您可以在实例模板中指定容器映像。默认情况下,Compute Engine 还会在模板中添加安装了 Docker 的 Container-Optimized OS 映像。当您使用模板创建新实例时,容器会在实例启动时自动启动。
控制台
转到实例模板页面。
点击创建实例模板。
在容器部分中,选中将一个容器映像部署到此虚拟机实例复选框。
指定要使用的容器映像。
- 您可以指定 Container Registry 或 Artifact Registry 中的映像。例如:
gcr.io/cloud-marketplace/google/nginx1:1.12
用于从 Google Cloud Marketplace 中选择 NGINX 1.12 容器映像。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: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
:子网的名称或网址。
以下示例会创建一个名为 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
如果使用此模板为托管实例组(无论是否启用自动扩缩功能)创建实例,则系统会自动在指定的区域和子网中创建实例。这样一来,您就可以控制为了进行负载平衡而创建的新实例的子网。
在实例模板中使用自定义或公共映像
由于托管实例组用于频繁地添加和移除实例,因此创建自定义映像并在实例模板中指定该映像会很有用。您可以在映像中做好准备,使其配备您的实例需要的应用和设置,这样您就不必在 MIG 中的各个实例上手动配置这几项内容。
或者,您可以创建一个实例模板,该模板使用公共映像和启动脚本,可在实例开始运行后为其做好准备。与使用启动脚本的实例相比,自定义映像的确定性更高,且启动速度更快。但是,启动脚本更加灵活,可让您更轻松地更新实例中的应用和设置。
更新实例模板
您无法更新现有实例模板,也无法在创建实例模板后对其进行更改。如果实例模板过期,或者您需要更改配置,请创建一个新的实例模板。
后续步骤
- 参阅有关创建确定性实例模板的提示。
- 使用实例模板创建虚拟机实例。
- 创建地区级 MIG。
- 创建区域级 MIG。