创建和启动虚拟机实例

本文档介绍如何使用启动磁盘映像、启动磁盘快照或容器映像创建虚拟机实例。某些映像支持安全强化型虚拟机功能,这些功能提供了诸多安全功能,例如符合 UEFI 标准的固件、安全启动以及受 vTPM 保护的测量启动。在安全强化型虚拟机上,默认情况下会启用 vTPM 和完整性监控

您可以在创建过程中为自己的虚拟机实例创建多个磁盘,也可以在创建虚拟机实例后为其添加更多磁盘。在您创建虚拟机实例后,Compute Engine 会自动将其启动。

本文档介绍了创建实例的基本方法。如需了解更具体或更复杂的实例配置,请参阅以下资源:

如果自带现有许可,请参阅使用单租户节点自带许可

准备工作

从映像创建实例

本部分介绍如何使用公共操作系统映像自定义映像创建虚拟机。虚拟机包含引导加载程序、启动文件系统和操作系统映像。

从公共映像创建实例

Google 以及开源社区和第三方供应商会提供并维护公共操作系统映像。默认情况下,所有 Google Cloud 项目都可以从公共操作系统映像创建虚拟机。但是,如果您的 Cloud 项目有一个定义的可信映像列表,则您只能使用该列表中的映像来创建虚拟机。

如果您使用本地 SSD 创建安全强化型虚拟机映像,则无法使用完整性监控虚拟可信平台模块 (vTPM)

控制台

  1. 在 Google Cloud Console 中,转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 选择您的项目,然后点击继续

  3. 点击创建实例

  4. 为您的实例指定名称。请参阅资源命名惯例

  5. 可选操作:更改此实例的地区。Compute Engine 会随机列出每个区域内的地区,以鼓励跨多个地区使用。

  6. 为您的实例选择机器配置

  7. 启动磁盘部分中,点击更改以配置您的启动磁盘。 除非您明确选择其他启动磁盘,否则如果新实例的名称与现有永久性磁盘的名称匹配,则现有永久性磁盘会自动挂接到新实例作为启动磁盘。

  8. 公共映像标签页中,选择操作系统和版本。

  9. 点击保存,确认您的启动磁盘选项。

  10. 选择允许 HTTP 流量允许 HTTPS 流量,以允许传送到虚拟机的 HTTP 或 HTTPS 流量。选择其中一项后,Compute Engine 会向您的虚拟机添加一个网络标记,以将防火墙规则与该虚拟机相关联。然后,Compute Engine 会创建相应的入站防火墙规则,该规则允许 tcp:80 (HTTP) 或 tcp:443 (HTTPS) 上的所有传入流量。

  11. 如需将辅助非启动磁盘添加到您的虚拟机,请执行以下操作:

    1. 点击管理、安全、磁盘、网络、单独租用部分。
    2. 点击磁盘标签页。
    3. 额外磁盘下方,点击添加新磁盘
    4. 指定磁盘名称类型来源类型模式删除规则
    5. 点击完成
    6. 根据需要添加额外磁盘。
  12. 可选操作:如果您选择了支持安全强化型虚拟机功能的操作系统映像,则可以修改安全强化型虚拟机设置:

    1. 点击管理、安全、磁盘、网络、单独租用部分中的安全标签页。

    2. 如需启用安全启动,请选择开启安全启动。“安全启动”默认处于停用状态

    3. 如需停用 vTPM,请清除开启 vTPM。vTPM 默认处于启用状态。停用 vTPM 的同时还会停用完整性监控,因为完整性监控依赖于测量启动收集的数据。

    4. 如需停用完整性监控,请清除开启完整性监控复选框。完整性监控默认处于启用状态

  13. 点击创建按钮以创建并启动实例。

gcloud

  1. 执行下列其中一项操作,查看可用公共操作系统映像的列表,其中包括映像名称、映像项目和映像系列:

  2. 选择一个映像,并记下该映像的名称、该映像所属的项目以及映像系列。

  3. 可选操作:确定该映像是否支持安全强化型虚拟机功能。为此,请运行以下命令,然后检查输出中的 UEFI_COMPATIBLE

    gcloud compute images describe IMAGE_NAME --project IMAGE_PROJECT
    

    替换以下内容:

  4. 使用以下 gcloud compute instances create 命令,根据最新版本的操作系统映像或特定版本的操作系统映像创建虚拟机(也可选择使用其他非启动磁盘):

    gcloud compute instances create VM_NAME
    --image-family IMAGE
    --image-project IMAGE_PROJECT
    [--create-disk image=DISK_IMAGE,
    image-project=DISK_IMAGE_PROJECT]
    [,size=SIZE_GB]
    [,type=DISK_TYPE]
    [--shielded-secure-boot]
    

    替换以下内容:

    • VM_NAME:新虚拟机的名称
    • IMAGE:要用于创建虚拟机的映像。您可以通过以下两种方式指定该映像:
      • 指定系列以根据最新操作系统版本创建虚拟机。例如,如果您指定 debian-10 作为映像,Compute Engine 会根据 Debian 10 映像系列中最新版本的操作系统映像创建虚拟机。
      • 指定特定版本的公共操作系统,例如 debian-10-buster-v20200309
    • IMAGE_PROJECT:包含映像的项目
    • DISK_IMAGE(可选):针对每个额外的辅助非启动磁盘(最多 128 个)指定此项。您可以指定系列以使用该系列中的最新操作系统版本创建磁盘,也可以指定特定的映像版本。对于空白磁盘,请勿指定磁盘映像或映像项目。添加非启动磁盘后,您必须对其进行格式化和装载
    • DISK_IMAGE_PROJECT(可选):磁盘映像所属的映像项目。对于空白磁盘,请勿指定磁盘映像或映像项目。
    • SIZE_GB(可选):辅助磁盘的大小。
    • DISK_TYPE(可选):永久性磁盘的类型,设置为 pd-standardpd-ssd
    • --shielded-secure-boot(可选):如果您选择了支持安全强化型虚拟机功能的映像,则 Compute Engine 会默认启用虚拟可信平台模块 (vTPM)完整性监控。默认情况下,Compute Engine 不会启用安全启动。如果您指定 --shielded-secure-boot,则 Compute Engine 会创建一个启用了所有三项安全强化型虚拟机功能的虚拟机。在 Compute Engine 启动您的虚拟机后,如需修改安全强化型虚拟机选项,您必须停止该虚拟机。
  5. 验证 Compute Engine 是否已创建该虚拟机(请将 VM_NAME 替换为该虚拟机的名称):

    gcloud compute instances describe VM_NAME
    

API

  1. 执行下列其中一项操作,查看可用公共操作系统映像的列表,其中包括映像名称、映像项目和映像系列:

  2. 选择一个映像,并记下该映像的名称、该映像所属的项目以及映像系列。

  3. 可选操作:确定该映像是否支持安全强化型虚拟机功能。为此,请运行以下命令,然后检查输出中的 UEFI_COMPATIBLE

    GET https://compute.googleapis.com/compute/v1/projects/IMAGE_PROJECT/global/images/IMAGE_NAME
    

    替换以下内容:

  4. 使用以下 instances.insert 命令之一,根据最新版本的操作系统映像或特定版本的操作系统映像创建虚拟机,或者使用其他非启动磁盘创建虚拟机:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/PROJECT_ZONE/instances
    
    {
     "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
     "name": "VM_NAME",
     "disks": [
       {
         "initializeParams": {
           "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE"
         },
         "boot": true
       },
       {
         "initializeParams": {
           "sourceImage": "projects/DISK_IMAGE_PROJECT/global/images/family/DISK_IMAGE"
         },
         "boot": false
       }
     ],
     "networkInterfaces": [
       {
         "network": "global/networks/default",
         "subnetwork": "regions/SUBNETWORK_REGION/subnetworks/SUBNETWORK_NAME"
       }
     ],
     "shieldedInstanceConfig": {
       "enableSecureBoot": ENABLE_SECURE_BOOT
     }
    }
    

    替换以下内容:

    • PROJECT_ID:要在其中创建虚拟机的项目的 ID。
    • PROJECT_ZONE:要在其中创建虚拟机的地区。
    • MACHINE_TYPE_ZONE:包含新虚拟机将使用的机器类型的地区。
    • MACHINE_TYPE:新虚拟机的预定义自定义机器类型。
    • VM_NAME:新虚拟机的名称
    • IMAGE_PROJECT:包含映像的项目。例如,如果您将 debian-10 指定为映像系列,请将 debian-cloud 指定为映像项目。
    • IMAGE:要用于创建虚拟机的映像。可指定系列以使用最新操作系统版本来创建虚拟机。例如,如果您将 debian-10 指定为映像系列,则 Compute Engine 会根据 Debian 10 映像系列中最新版本的操作系统映像创建虚拟机。或者,您可以指定特定版本的公共操作系统而不指定系列,例如 debian-10-buster-v20200309
    • DISK_IMAGE_PROJECT(可选):磁盘映像所属的映像项目。对于空白磁盘,请勿指定磁盘映像或映像项目。
    • DISK_IMAGE(可选):针对每个额外的辅助非启动磁盘(最多 128 个)指定此项。您可以指定系列以使用该系列中的最新操作系统版本创建磁盘,也可以指定特定的映像版本。对于空白磁盘,请勿指定磁盘映像或映像项目。添加非启动磁盘后,您必须对其进行格式化和装载
    • SUBNETWORK_REGION(可选):如果您的 VPC 网络是自定义模式 VPC 网络,则此项为用于创建虚拟机的子网所属的区域。
    • SUBNETWORK_NAME(可选):如果您的 VPC 网络是自定义模式 VPC 网络,则此项为用于创建虚拟机的子网的名称。
    • ENABLE_SECURE_BOOT(可选):如果您选择了支持安全强化型虚拟机功能的映像,则 Compute Engine 会默认启用虚拟可信平台模块 (vTPM)完整性监控。默认情况下,Compute Engine 不会启用安全启动。如果为 enableSecureBoot 指定 true,则 Compute Engine 会创建一个启用了所有三项安全强化型虚拟机功能的虚拟机。在 Compute Engine 启动您的虚拟机后,如需修改安全强化型虚拟机选项,您必须停止该虚拟机。

Python

def create_instance(compute, project, zone, name, bucket):
    # Get the latest Debian Jessie image.
    image_response = compute.images().getFromFamily(
        project='debian-cloud', family='debian-9').execute()
    source_disk_image = image_response['selfLink']

    # Configure the machine
    machine_type = "zones/%s/machineTypes/n1-standard-1" % zone
    startup_script = open(
        os.path.join(
            os.path.dirname(__file__), 'startup-script.sh'), 'r').read()
    image_url = "http://storage.googleapis.com/gce-demo-input/photo.jpg"
    image_caption = "Ready for dessert?"

    config = {
        'name': name,
        'machineType': machine_type,

        # Specify the boot disk and the image to use as a source.
        'disks': [
            {
                'boot': True,
                'autoDelete': True,
                'initializeParams': {
                    'sourceImage': source_disk_image,
                }
            }
        ],

        # Specify a network interface with NAT to access the public
        # internet.
        'networkInterfaces': [{
            'network': 'global/networks/default',
            'accessConfigs': [
                {'type': 'ONE_TO_ONE_NAT', 'name': 'External NAT'}
            ]
        }],

        # Allow the instance to access cloud storage and logging.
        'serviceAccounts': [{
            'email': 'default',
            'scopes': [
                'https://www.googleapis.com/auth/devstorage.read_write',
                'https://www.googleapis.com/auth/logging.write'
            ]
        }],

        # Metadata is readable from the instance and allows you to
        # pass configuration from deployment scripts to instances.
        'metadata': {
            'items': [{
                # Startup script is automatically executed by the
                # instance upon startup.
                'key': 'startup-script',
                'value': startup_script
            }, {
                'key': 'url',
                'value': image_url
            }, {
                'key': 'text',
                'value': image_caption
            }, {
                'key': 'bucket',
                'value': bucket
            }]
        }
    }

    return compute.instances().insert(
        project=project,
        zone=zone,
        body=config).execute()

从自定义映像创建实例

自定义映像仅属于您的项目。如果您要使用自定义映像创建实例,必须先拥有自定义映像。如需了解如何创建自定义映像,请参阅创建自定义映像

控制台

  1. 转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 选择您的项目,然后点击继续
  3. 点击创建实例按钮。
  4. 为您的实例指定名称。请参阅资源命名惯例
  5. 或者,更改此实例的地区

    注意:每个区域内的地区列表已随机化,以鼓励跨多个地区使用。

  6. 为您的实例选择机器配置

  7. 启动磁盘部分中,点击更改以配置您的启动磁盘。
    创建一个不大于 2 TB 的启动磁盘,以符合 MBR 分区的限制。

  8. 选择自定义映像标签。

  9. 确保已在下拉列表中选择您的项目。

  10. 选择所需的映像,然后点击选择按钮。

  11. 如需允许 HTTP 或 HTTPS 流量流向虚拟机实例,请选择允许 HTTP 流量允许 HTTPS 流量

    Cloud Console 会向您的实例中添加网络标记,并创建对应的入站防火墙规则,该规则允许 tcp:80 (HTTP) 或 tcp:443 (HTTPS) 上的所有传入流量。网络标记可将防火墙规则与实例相关联。如需了解详情,请参阅虚拟私有云文档中的防火墙规则概览

  12. 如需将辅助非启动磁盘添加到您的虚拟机实例,请执行以下操作:

    1. 点击管理、安全、磁盘、网络、单独租用
    2. 选择磁盘标签。
    3. 额外磁盘下,点击添加新磁盘
    4. 指定磁盘名称类型来源类型模式删除规则
    5. 点击完成
    6. 根据需要添加额外磁盘。
  13. 点击创建按钮以创建并启动实例。

gcloud

运行 gcloud compute instances create 命令以使用自定义映像创建实例:

gcloud compute instances create [INSTANCE_NAME] \
--image [IMAGE_NAME] \
--image-family [IMAGE_FAMILY]

其中:

  • [INSTANCE_NAME] 是实例名称
  • [IMAGE_NAME] 是映像的名称。
  • [IMAGE] 是一个可选字段。使用公共映像或私有映像。如果未指定映像,则磁盘为空。

如果您将自定义映像创建为映像系列的一部分,请指定映像系列而不是映像名称。这样,实例会自动使用映像系列中最新的未弃用的映像。

在创建实例时,您最多可以添加 128 个辅助非启动磁盘。为您创建的每个辅助磁盘指定 --create-disk 标志。如需通过公共映像或库存映像创建辅助磁盘,请在 --create-disk 标志中指定 imageimage-project 属性。如需创建空白磁盘,请勿包含这些属性。作为选项,您可以添加磁盘 sizetype 属性。

gcloud compute instances create [INSTANCE_NAME] \
  --image-family [IMAGE_FAMILY] \
  --image-project [IMAGE_PROJECT] \
  --create-disk image=[DISK_IMAGE],image-project=[DISK_IMAGE_PROJECT],size=[SIZE_GB],type=[DISK_TYPE]

其中:

  • [INSTANCE_NAME] 是新实例的名称
  • [IMAGE_FAMILY]可用映像系列中的一种。
  • [IMAGE_PROJECT] 是该映像所属的映像项目
  • [DISK_IMAGE] 是辅助磁盘的来源映像。如需查看可用映像的列表,请运行 gcloud compute images list。对于空白磁盘,请勿指定磁盘映像或映像项目。
  • [DISK_IMAGE_PROJECT] 是磁盘映像所属的映像项目。对于空白磁盘,请勿指定磁盘映像或映像项目。
  • [SIZE_GB] 是辅助磁盘的大小。
  • [DISK_TYPE] 是永久性磁盘的类型,即 pd-standardpd-ssd

在使用磁盘之前,格式化并装载磁盘

API

在 API 中使用自定义映像创建实例的过程与使用公开可用映像创建实例的过程相同。在 sourceImage URI 中,提供您自己的项目 ID 和映像名称。

通过对每个额外磁盘使用 initializeParams 属性,您可以在创建虚拟机实例时添加多达 128 个辅助非启动磁盘。使用公共映像或私有映像创建额外磁盘。 如需添加空白磁盘,请定义不带 sourceImage 值的 initializeParams 条目。

...
"initializeParams" :{
   "sourceImage": "global/images/[IMAGE_NAME]"
},
{
"initializeParams": {
   "diskSizeGb": "[SIZE_GB]",
   "sourceImage": "[IMAGE]",
   "diskType": "[DISK_TYPE]"
 },
 {
 "initializeParams": {
 "diskSizeGb": "[SIZE_GB]",
 "diskType": "[DISK_TYPE]"
 }
}...]

其中:

  • [PROJECT_ID] 是您的项目 ID。
  • [IMAGE_NAME] 是特定映像,例如 debian-9-stretch-v20170619。或者,您可以指定映像系列。例如,family/debian-9 返回最新版本的 Debian 9 映像。
  • [IMAGE] 是辅助磁盘的来源映像。对于空白磁盘,请勿指定映像来源。
  • [SIZE_GB] 是磁盘大小。
  • [DISK_TYPE] 是永久性磁盘的类型,即 pd-standardpd-ssd

在使用磁盘之前,格式化并装载磁盘

使用与您共享的映像创建实例

如果其他用户与您共享映像,您可以使用该映像创建新实例。

控制台

  1. 转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 选择您的项目,然后点击继续
  3. 点击创建实例按钮。
  4. 为您的实例指定名称。请参阅资源命名惯例
  5. 或者,更改此实例的地区

  6. 为您的实例选择机器配置

  7. 启动磁盘部分中,点击更改以配置您的启动磁盘。

    创建一个不大于 2 TB 的启动磁盘,以符合 MBR 分区的限制。

  8. 选择自定义映像标签。

  9. 从下拉列表中选择映像项目。

  10. 选择所需的映像,然后点击选择按钮。

  11. 如需允许 HTTP 或 HTTPS 流量流向虚拟机实例,请选择允许 HTTP 流量允许 HTTPS 流量

    Cloud Console 会向您的实例中添加网络标记,并创建对应的入站防火墙规则,该规则允许 tcp:80 (HTTP) 或 tcp:443 (HTTPS) 上的所有传入流量。网络标记可将防火墙规则与实例相关联。如需了解详情,请参阅虚拟私有云文档中的防火墙规则概览

  12. 如需将辅助非启动磁盘添加到您的虚拟机实例,请执行以下操作:

    1. 点击管理、安全、磁盘、网络、单独租用
    2. 选择磁盘标签。
    3. 额外磁盘下,点击添加新磁盘
    4. 指定磁盘名称类型来源类型模式删除规则
    5. 点击完成
    6. 根据需要添加额外磁盘。
  13. 点击创建按钮以创建并启动实例。

gcloud

使用 gcloud compute instances create 命令创建实例,并使用 --image--image-project 标志指定映像名称和映像所在的项目:

gcloud compute instances create [INSTANCE_NAME] \
    --image [IMAGE] \
    --image-project [IMAGE_PROJECT]

其中:

  • [INSTANCE_NAME] 是新实例的名称
  • [IMAGE] 是映像的名称。
  • [IMAGE_PROJECT] 是映像所属的项目。

如果命令成功,gcloud 将返回新实例的属性作为响应:

Created [https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-b/instances/example-instance].
NAME                 ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
example-instance     us-central1-b  n1-standard-1               10.240.0.4   104.198.53.60  RUNNING

在创建实例时,您最多可以添加 128 个辅助非启动磁盘。为您创建的每个辅助磁盘指定 --create-disk 标志。如需通过公共映像或库存映像创建辅助磁盘,请在 --create-disk 标志中指定 imageimage-project 属性。如需创建空白磁盘,请勿包含这些属性。作为选项,您可以添加磁盘 sizetype 属性。

gcloud compute instances create [INSTANCE_NAME] \
--image-family [IMAGE_FAMILY] \
--image-project [IMAGE_PROJECT] \
--create-disk image=[DISK_IMAGE],image-project=[DISK_IMAGE_PROJECT],size=[SIZE_GB],type=[DISK_TYPE]

其中:

  • [INSTANCE_NAME] 是新实例的名称
  • [IMAGE_FAMILY]可用映像系列中的一种。
  • [IMAGE_PROJECT] 是该映像所属的映像项目
  • [DISK_IMAGE] 是辅助磁盘的来源映像。如需查看可用映像的列表,请运行 gcloud compute images list。对于空白磁盘,请勿指定磁盘映像或映像项目。
  • [DISK_IMAGE_PROJECT] 是磁盘映像所属的映像项目。对于空白磁盘,请勿指定磁盘映像或映像项目。
  • [SIZE_GB] 是辅助磁盘的大小。
  • [DISK_TYPE] 是永久性磁盘的类型,即 pd-standardpd-ssd

在使用磁盘之前,格式化并装载磁盘

API

按照 API 说明通过公共映像创建实例,但在请求正文中指定 image 字段。通过为每个额外磁盘指定 initializeParams 字段,您最多可以添加 128 个辅助非启动磁盘。如需添加空白磁盘,请勿指定映像来源。作为选项,您可以指定 diskSizeGbdiskTypelabels 属性。

[...
image: "projects/[PROJECT_ID]/global/images/[IMAGE_NAME]

{
 "initializeParams": {
    "diskSizeGb": "[SIZE_GB]",
    "sourceImage": "[IMAGE]"
       }
 }
 ...]

其中:

  • [PROJECT_ID] 是包含该映像的项目。
  • [IMAGE_NAME] 是来源映像。
  • [SIZE_GB] 是磁盘大小。
  • [IMAGE] 是辅助磁盘的来源映像。对于空白磁盘,请勿指定映像来源。

在使用磁盘之前,格式化并装载磁盘

根据快照创建虚拟机实例

如果您使用快照备份了永久性启动磁盘,则可以使用该快照创建实例。

请注意,如果您打算通过同一启动磁盘快照创建多个实例,请考虑创建一个自定义映像,然后通过该映像创建实例。与快照相比,自定义映像可以更快速有效地为您的实例创建启动磁盘。

根据快照创建新的虚拟机实例启动磁盘

创建新实例时,您可以将启动磁盘的快照恢复到新的启动磁盘。

控制台

  1. 转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 选择您的项目,然后点击继续
  3. 点击创建实例按钮。
  4. 为您的实例指定名称。请参阅资源命名惯例
  5. 或者,更改此实例的地区

  6. 为您的实例选择机器配置

  7. 启动磁盘部分中,点击更改以配置您的启动磁盘。

    创建一个不大于 2 TB 的启动磁盘,以符合 MBR 分区的限制。

  8. 点击快照标签,然后从列表中选择一个快照。

  9. 点击选择

  10. 如需允许 HTTP 或 HTTPS 流量流向虚拟机实例,请选择允许 HTTP 流量允许 HTTPS 流量

    Cloud Console 会向您的实例中添加网络标记,并创建对应的入站防火墙规则,该规则允许 tcp:80 (HTTP) 或 tcp:443 (HTTPS) 上的所有传入流量。网络标记可将防火墙规则与实例相关联。如需了解详情,请参阅虚拟私有云文档中的防火墙规则概览

  11. 如需将辅助非启动磁盘添加到您的虚拟机实例,请执行以下操作:

    1. 点击管理、安全、磁盘、网络、单独租用
    2. 选择磁盘标签。
    3. 额外磁盘下,点击添加新磁盘
    4. 指定磁盘名称类型来源类型模式删除规则
    5. 点击完成
    6. 根据需要添加额外磁盘。
  12. 点击创建按钮以创建并启动实例。

gcloud

使用 gcloud compute instances create 命令并添加 --source-snapshot 标志:

gcloud compute instances create [INSTANCE_NAME] \
    --source-snapshot [BOOT_SNAPSHOT_NAME] \
    --boot-disk-size [BOOT_DISK_SIZE] \
    --boot-disk-type [BOOT_DISK_TYPE] \
    --boot-disk-device-name [BOOT_DISK_NAME]

其中:

  • [INSTANCE_NAME] 是新实例的名称
  • [BOOT_SNAPSHOT_NAME] 是要恢复到新实例的启动磁盘的启动磁盘快照的名称。
  • [BOOT_DISK_NAME] 是此实例的新启动磁盘的名称。
  • [BOOT_DISK_SIZE] 是新启动磁盘的大小(以 GB 为单位)。该大小必须等于或大于用于创建快照的来源磁盘的大小。此为可选属性。
  • [BOOT_DISK_TYPE] 是永久性磁盘的类型,即 pd-standardpd-ssd。此标志不是必需的。

或者,如果您还希望恢复非启动快照,请附加 --create-disk 标志并指定 source-snapshot。重复 --create-disk 标志,为要恢复的每个快照创建非启动磁盘。创建实例时,您最多可以添加 15 个非启动磁盘。

--create-disk source-snapshot=[SNAPSHOT_NAME],name=[DISK_NAME],size=[DISK_SIZE],type=[DISK_TYPE]

其中:

  • [SNAPSHOT_NAME] 是要恢复的非启动快照的名称。
  • [DISK_NAME] 是此实例的新非启动磁盘的名称。
  • [DISK_SIZE] 是新磁盘的大小(以 GB 为单位)。该大小必须等于或大于用于创建快照的来源磁盘的大小。此为可选属性。
  • [DISK_TYPE] 是永久性磁盘的类型,即 pd-standardpd-ssd。 此标志不是必需的。

API

当您使用 API 根据快照创建实例时,需要遵循以下限制:

  • 只能将一个永久性磁盘用作永久性启动磁盘。
  • 必须将永久性启动磁盘作为该实例的第一个磁盘挂接。
  • 如果您指定了 source 属性,则不能同时指定 initializeParams 属性。提供 source 表示永久性启动磁盘已存在,但 initializeParams 属性指示 Compute Engine 应创建新的永久性启动磁盘。

    如需根据启动磁盘快照创建实例,请在 disks 属性下指定 sourceSnapshot 字段。您可以选择为新启动磁盘指定 diskSizeGbdiskType 属性:

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances
{
  "name": "[INSTANCE_NAME]",
  "machineType": "machineTypes/[MACHINE_TYPE]"
  "networkInterfaces": [{
    "accessConfigs": [{
      "type": "ONE_TO_ONE_NAT",
      "name": "External NAT"
    }],
    "network": "global/networks/default"
  }],
  "disks": [{
     "boot": true,
     "initializeParams": {
       "sourceSnapshot": "global/snapshots/[BOOT_SNAPSHOT_NAME]",
       "diskSizeGb": "[BOOT_DISK_SIZE]",
       "diskType": "[BOOT_DISK_TYPE]"
    }
   }],
 }

其中:

  • [PROJECT_ID] 是您的项目 ID。
  • [ZONE] 是您要在其中创建新实例的地区。
  • [INSTANCE_NAME] 是要将快照恢复到的实例的名称
  • [MACHINE_TYPE] 是实例的机器类型
  • [BOOT_SNAPSHOT_NAME] 是要用于创建新实例的启动磁盘的快照的名称。
  • [BOOT_DISK_SIZE] 是新启动磁盘的大小(以 GB 为单位)。该大小必须等于或大于用于创建快照的来源磁盘的大小。此为可选属性。
  • [BOOT_DISK_TYPE] 是启动磁盘的类型,即 pd-standardpd-ssd。此为可选属性。

将非启动快照恢复到新实例

非启动快照是指您的实例仅用于数据存储的辅助永久性磁盘的备份。每次创建新实例时,您可以将非启动快照恢复到新磁盘。或者,您也可以将非启动快照恢复到现有实例

如需将非启动快照恢复到新实例,请在创建实例时遵循以下额外步骤。

控制台

从控制台将非启动快照恢复到新实例时,首根据每个快照创建一个磁盘。然后,在创建新实例时,挂接新磁盘。

  1. 将每个非启动快照恢复到新磁盘。

    1. 转到“磁盘”页面。

      转到“磁盘”页面

    2. 点击创建磁盘
    3. 指定磁盘的名称。请参阅资源命名惯例
    4. 选择此磁盘的区域地区

      注意:如果磁盘和实例位于同一地区,您只能将一个磁盘挂接到一个实例。

    5. 选择磁盘类型

    6. 来源类型下,选择快照

    7. 在新的来源快照字段下,选择要恢复到新磁盘的非启动快照。

    8. 点击创建以创建磁盘。

    9. 重复上述步骤,根据要恢复的每个快照创建磁盘。创建实例时,您最多可以添加 15 个辅助非启动磁盘。

  2. 转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  3. 点击创建实例

  4. 为您的实例指定名称。请参阅资源命名惯例

  5. 为此实例选择区域地区

    注意:如果磁盘和实例位于同一地区,您只能将一个磁盘挂接到一个实例。

  6. 为您的实例选择机器类型

  7. 如果要允许传入的外部流量,请更改实例的防火墙规则。

  8. 如需将磁盘挂接到实例,请执行以下操作:

    1. 点击管理、安全、磁盘、网络、单独租用
    2. 选择磁盘标签。
    3. 额外磁盘下,点击 挂接现有磁盘
    4. 在新的磁盘字段下,选择要挂接到此实例的磁盘。
    5. 为磁盘指定模式删除规则
    6. 点击完成
    7. 针对您要挂接的每个磁盘,重复上述步骤。创建实例时,您最多可以添加 15 个辅助非启动磁盘。
  9. 点击创建以创建并启动实例。

  10. 在使用挂接的磁盘之前,格式化并装载磁盘

gcloud

使用 gcloud compute instances create 命令创建新实例。对于要恢复的每个非启动快照,请添加 --create-disk 标志并指定 source-snapshot。创建实例时,您最多可以添加 15 个辅助非启动磁盘。

例如,要将两个非启动快照恢复到新实例,请使用以下命令:

gcloud compute instances create \
    --create-disk source-snapshot=[SNAPSHOT_1_NAME],name=[DISK_1_NAME],size=[DISK_1_SIZE],type=[DISK_1_TYPE] \
    --create-disk source-snapshot=[SNAPSHOT_2_NAME],name=[DISK_2_NAME],size=[DISK_2_SIZE],type=[DISK_2_TYPE]

其中:

  • [SNAPSHOT_1_NAME][SNAPSHOT_2_NAME] 是要恢复的非启动快照的名称。
  • [DISK_1_NAME][DISK_2_NAME] 是此实例的新非启动磁盘的名称。
  • [DISK_1_SIZE][DISK_2_SIZE] 是每个新非启动磁盘的大小(以 GB 为单位)。该大小必须等于或大于用于创建快照的来源磁盘的大小。此为可选属性。
  • [DISK_1_TYPE][DISK_2_TYPE] 是永久性磁盘的类型,即 pd-standardpd-ssd。此标志不是必需的。

API

使用 API 将非启动快照恢复到新实例时,需要遵循以下限制:

  • 永久性启动磁盘只能有一个。
  • 必须将永久性启动磁盘作为该实例的第一个磁盘挂接。
  • 如果您指定了 source 属性,则不能同时指定 initializeParams 属性。提供 source 表示永久性启动磁盘已存在,但 initializeParams 属性指示 Compute Engine 应创建新的永久性启动磁盘。

使用测试版 API,在 initializeParams 属性下指定 sourceSnapshot 字段。通过为要创建的每个非启动磁盘重复 initializeParams 属性,您最多可以添加 15 个辅助非启动磁盘。作为选项,您可以为您创建的任何磁盘指定 diskSizeGbdiskType 属性。

例如,如需将两个非启动快照恢复到新实例,请发出以下请求:

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances
{
  "name": "[INSTANCE_NAME]",
  "machineType": "machineTypes/[MACHINE_TYPE]"
  "networkInterfaces": [{
    "accessConfigs": [{
      "type": "ONE_TO_ONE_NAT",
      "name": "External NAT"
    }],
    "network": "global/networks/default"
  }],
  "disks": [{
     "autoDelete": "true",
     "boot": "true",
     "type": "PERSISTENT",
     "diskSizeGb": "[DISK_SIZE]",
     "diskType": "[DISK_TYPE]"
   },
   {
     "initializeParams": {
        "sourceSnapshot": "global/snapshots/[SNAPSHOT_1_NAME]",
        "diskSizeGb": "[DISK_SIZE]",
        "diskType": "[DISK_TYPE]"
     }
   },
   {
     "initializeParams": {
        "sourceSnapshot": "global/snapshots/[SNAPSHOT_2_NAME]",
        "diskSizeGb": "[DISK_SIZE]",
        "diskType": "[DISK_TYPE]"
     }
  }]
 }

其中:

  • [PROJECT_ID] 是您的项目 ID。
  • [ZONE] 是您要在其中创建新实例的地区。
  • [INSTANCE_NAME] 是要将快照恢复到的实例的名称
  • [MACHINE_TYPE] 是实例的机器类型
  • [SNAPSHOT_1_NAME][SNAPSHOT_2_NAME] 是要恢复到新实例上的新非启动磁盘的非启动快照的名称。
  • [DISK_SIZE] 是相应磁盘的大小(以 GB 为单位)。此为可选属性,但必须等于或大于用于创建快照的来源磁盘的大小。
  • [DISK_TYPE] 是相应永久性磁盘的类型,即 pd-standardpd-ssd。此为可选属性。

使用容器映像创建实例

如需在 Compute Engine 实例上部署和启动容器,请在创建实例时指定容器映像名称和可选配置参数。Compute Engine 使用最新版本的 Container-Optimized OS 公共映像(该映像安装了 Docker)创建实例。然后,Compute Engine 会在虚拟机启动时启动容器。如需了解详情,请参阅在虚拟机上部署容器

控制台

  1. 转到虚拟机实例页面。

    转到“虚拟机实例”页面

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

gcloud

运行 gcloud compute instances create-with-container 命令:

gcloud compute instances create-with-container [INSTANCE_NAME] \
     --container-image [CONTAINER_IMAGE]

其中:

  • [INSTANCE_NAME] 是新实例的名称
  • [CONTAINER_IMAGE] 是容器映像的名称。

例如,以下命令会创建名为 nginx-vm 的虚拟机实例,该实例可启动和运行容器映像 gcr.io/cloud-marketplace/google/nginx1:1.12

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

如果使用 Docker Hub 中的容器映像,必须始终指定完整的 Docker 映像名称。例如,指定以下映像名称以部署一个 Apache 容器映像:docker.io/httpd:2.4

创建可访问其他 Google Cloud 服务的实例

如果您计划在需要访问其他 Google Cloud 服务的虚拟机实例上运行应用,请在创建实例之前创建服务帐号,然后按照说明设置要以服务帐号的身份运行的实例。服务帐号是一个特殊帐号,您可以在应用代码中使用其凭据来访问其他 Google Cloud 服务。

如需详细了解服务帐号,请参阅服务帐号概览

在特定子网中创建实例

默认情况下,Google Cloud 会为每个项目创建一个名为 default自动模式 VPC 网络。如果您创建了一个实例,而没有指定其网络详细信息,Compute Engine 会使用默认 VPC 网络以及与实例位于同一区域的自动子网。

如需使用其他网络,或者您在自动模式下或自定义模式 VPC 网络中手动创建的子网,则必须在创建实例时指定子网。

控制台

  1. 转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 选择您的项目,然后点击继续
  3. 点击创建实例按钮。
  4. 为您的实例指定名称。请参阅资源命名惯例
  5. 或者,更改此实例的地区

  6. 如需允许 HTTP 或 HTTPS 流量流向虚拟机实例,请选择允许 HTTP 流量允许 HTTPS 流量

    Cloud Console 会向您的实例中添加网络标记,并创建对应的入站防火墙规则,该规则允许 tcp:80 (HTTP) 或 tcp:443 (HTTPS) 上的所有传入流量。网络标记可将防火墙规则与实例相关联。如需了解详情,请参阅虚拟私有云文档中的防火墙规则概览

  7. 展开管理、安全、磁盘、网络、单独租用部分。

  8. 网络标签的网络接口下方,指定网络详细信息。

    1. 网络字段中,选择包含您创建的子网的 VPC 网络。
    2. 子网字段中,选择实例将使用的子网。
  9. 如需将辅助非启动磁盘添加到您的虚拟机实例,请执行以下操作:

    1. 点击管理、安全、磁盘、网络、单独租用
    2. 选择磁盘标签。
    3. 额外磁盘下,点击添加新磁盘
    4. 指定磁盘名称类型来源类型模式删除规则
    5. 点击完成
    6. 根据需要添加额外磁盘。
  10. 点击创建按钮以创建并启动实例。

gcloud

运行 gcloud compute instances create 命令时,在 gcloud 命令行工具中,按照相同的说明通过映像快照创建实例,并添加 --subnet [SUBNET_NAME]--zone [ZONE_NAME] 标志:

gcloud compute instances create [INSTANCE_NAME] --subnet [SUBNET_NAME] \
--zone [ZONE_NAME]

其中:

  • [INSTANCE_NAME] 是实例的名称
  • [SUBNET_NAME] 是子网的名称。网络是根据指定的子网推断出来的。
  • [ZONE_NAME] 是其中创建了实例的地区的名称,例如 europe-west1-b。实例的区域是根据地区推断出来的。

在创建实例时,您最多可以添加 128 个辅助非启动磁盘。为您创建的每个辅助磁盘指定 --create-disk 标志。如需通过公共映像或库存映像创建辅助磁盘,请在 --create-disk 标志中指定 imageimage-project 属性。如需创建空白磁盘,请勿包含这些属性。作为选项,您可以添加磁盘 sizetype 属性。

gcloud compute instances create [INSTANCE_NAME] \
--subnet [SUBNET_NAME] \
--zone [ZONE_NAME] \
--image-family [IMAGE_FAMILY] \
--image-project [IMAGE_PROJECT] \
--create-disk image=[DISK_IMAGE],image-project=[DISK_IMAGE_PROJECT],size=[SIZE_GB],type=[DISK_TYPE]

其中:

  • [INSTANCE_NAME] 是新实例的名称
  • [SUBNET_NAME] 是子网的名称。
  • [ZONE_NAME] 是其中创建了实例的地区的名称,例如 europe-west1-b
  • [IMAGE_FAMILY]可用映像系列中的一种。
  • [IMAGE_PROJECT] 是该映像所属的映像项目
  • [DISK_IMAGE] 是辅助磁盘的来源映像。如需查看可用映像的列表,请运行 gcloud compute images list。对于空白磁盘,请勿指定磁盘映像或映像项目。
  • [DISK_IMAGE_PROJECT] 是磁盘映像所属的映像项目。对于空白磁盘,请勿指定磁盘映像或映像项目。
  • [SIZE_GB] 是辅助磁盘的大小。
  • [DISK_TYPE] 是永久性磁盘的类型,即 pd-standardpd-ssd

在使用磁盘之前,格式化并装载磁盘

API

按照 API 说明通过映像快照创建实例,但在请求正文中指定 subnet 字段。如需添加最多 128 个辅助非启动磁盘,请对您创建的每个磁盘使用 initializeParams 属性。如需添加空白磁盘,请勿添加来源映像。作为选项,您可以指定 diskSizeGbdiskTypelabels 属性。

...
"networkInterfaces": [
{
  "network": "global/networks/[NETWORK_NAME]",
  "subnetwork": "regions/[REGION]/subnetworks/[SUBNET_NAME]",
  "accessConfigs":
    {
      "name": "External NAT",
      "type": "ONE_TO_ONE_NAT"
    }
    {
      "initializeParams": {
         "diskSizeGb": "[SIZE_GB]",
         "sourceImage": "[IMAGE]"
    {
      "initializeParams": {
      "diskSizeGb": "[SIZE_GB]"
     }
 }...]

其中:

  • [IMAGE] 是辅助磁盘的来源映像。对于空白磁盘,请勿指定映像来源。
  • [SIZE_GB] 是磁盘大小。
  • [DISK_TYPE] 是永久性磁盘的类型,即 pd-standardpd-ssd

在使用磁盘之前,格式化并装载磁盘

后续步骤