创建和启动虚拟机实例

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

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

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

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

准备工作

从映像创建实例

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

查看 Compute Engine 上的可用公共映像列表

在使用公共映像创建虚拟机之前,请先查看 Compute Engine 上的可用公共映像列表。

如需详细了解每个公共映像提供的功能,请参阅按操作系统提供功能支持

控制台

  1. 在 Google Cloud Console 中,转到映像页面。

    转到“映像”

gcloud

  1. 运行以下命令:

    gcloud compute images list
  2. 记下映像或映像系列的名称以及包含映像的项目。

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

    gcloud compute images describe VM_NAME \
        --project IMAGE_PROJECT
    

    替换以下内容:

API

  1. 运行以下命令:

    GET https://compute.googleapis.com/compute/v1/projects/IMAGE_PROJECT/global/images/
    
  2. 记下映像或映像系列的名称以及包含映像的项目。

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

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

    替换以下内容:

从公共映像创建实例

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

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

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

gcloud

  1. 选择公共映像。记下映像或映像系列的名称以及包含映像的项目。
  2. 使用 gcloud compute instances create 命令从映像系列或操作系统映像的特定版本创建虚拟机。

    如果您指定可选的 --shielded-secure-boot 标志,则 Compute Engine 会创建一个启用了以下所有三项安全强化型虚拟机功能的虚拟机:

    在 Compute Engine 启动您的虚拟机后,您必须停止该虚拟机以修改安全强化型虚拟机选项。

    gcloud compute instances create VM_NAME \
        [--image IMAGE | --image-family IMAGE_FAMILY] \
        --image-project IMAGE_PROJECT

    替换以下内容:

    • VM_NAME:新虚拟机的名称
    • IMAGEIMAGE_FAMILY:指定以下其中一项:
      • IMAGE:所需的公共映像版本。例如 --image debian-10-buster-v20200309
      • IMAGE_FAMILY映像系列。此项表示通过最新的未弃用的操作系统映像创建虚拟机。例如,如果您指定 --image-family debian-10,则 Compute Engine 会通过 Debian 10 映像系列中最新版本的操作系统映像创建虚拟机。
    • IMAGE_PROJECT:包含映像的项目
  3. 验证 Compute Engine 是否已创建该虚拟机:

    gcloud compute instances describe VM_NAME
    

    VM_NAME 替换为虚拟机名称。

API

  1. 选择公共映像。记下映像或映像系列的名称以及包含映像的项目。
  2. 使用 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/IMAGE"
         },
         "boot": true
       }
     ],
     "shieldedInstanceConfig": {
       "enableSecureBoot": ENABLE_SECURE_BOOT
     }
    }
    

    替换以下内容:

    • PROJECT_ID:要在其中创建虚拟机的项目的 ID。
    • PROJECT_ZONE:要在其中创建虚拟机的地区。
    • MACHINE_TYPE_ZONE:包含新虚拟机将使用的机器类型的地区。
    • MACHINE_TYPE:新虚拟机的预定义自定义机器类型。
    • VM_NAME:新虚拟机的名称
    • IMAGE_PROJECT:包含映像的项目。例如,如果您将 debian-10 指定为映像系列,请将 debian-cloud 指定为映像项目。
    • IMAGEIMAGE_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 映像系列中最新版本的操作系统映像创建虚拟机。
    • 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) 上的所有传入流量。网络标记可将防火墙规则与实例相关联。如需了解详情,请参阅 Virtual Private Cloud 文档中的防火墙规则概览

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

gcloud

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

gcloud compute instances create VM_NAME \
    --image-project IMAGE_PROJECT \
    [--image IMAGE | --image-family IMAGE_FAMILY]

替换以下内容:

  • VM_NAME:虚拟机的名称
  • IMAGE_PROJECT:包含映像的项目的名称。
  • IMAGEIMAGE_FAMILY:指定以下其中一项:

    • IMAGE:您的自定义映像的名称。例如 --image my-debian-image-v2
    • IMAGE_FAMILY:如果您在自定义映像系列中创建了自定义映像,请指定该自定义映像系列。此项表示通过自定义映像系列中最新的未弃用的操作系统映像操作系统版本创建虚拟机。例如,如果您指定 --image-family my-debian-family,则 Compute Engine 会通过自定义 my-debian-family 映像系列中最新的操作系统映像创建虚拟机。

API

在 API 中使用自定义映像创建实例的过程与使用公开可用映像创建实例的过程相同。

如需通过自定义映像创建虚拟机,请使用 instances.insert 方法,并在 sourceImage URI 中提供项目 ID(包含自定义映像的项目的 ID)和自定义映像名称。

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/IMAGE"
     },
     "boot": true
   }
 ],
 .....
}

替换以下内容:

  • PROJECT_ID:要在其中创建虚拟机的项目的 ID。
  • PROJECT_ZONE:要在其中创建虚拟机的地区。
  • MACHINE_TYPE_ZONE:包含新虚拟机将使用的机器类型的地区。
  • MACHINE_TYPE:新虚拟机的预定义自定义机器类型。
  • VM_NAME:新虚拟机的名称
  • IMAGE_PROJECT:包含自定义映像的项目的名称。
  • IMAGEIMAGE_FAMILY:指定以下其中一项:

    • IMAGE:您的自定义映像的名称。例如 "sourceImage": "projects/my-project-1234/global/images/my-debian-image-v2"
    • IMAGE_FAMILY:如果您在自定义映像系列中创建了自定义映像,请指定该自定义映像系列。此项表示通过自定义映像系列中最新的未弃用的操作系统映像操作系统版本创建虚拟机。例如,如果您指定 "sourceImage": "projects/my-project-1234/global/images/family/my-debian-family",则 Compute Engine 会通过自定义 my-debian-family 映像系列中最新版本的操作系统映像创建虚拟机。

创建具有额外的非启动磁盘的虚拟机

控制台

  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. 点击创建按钮以创建并启动实例。

gcloud

运行 gcloud compute instances create 命令以创建具有额外的非启动磁盘的实例。

在创建实例时,您最多可以添加 128 个辅助非启动磁盘。为您创建的每个辅助磁盘指定 --create-disk 标志。

如需通过公共映像或库存映像创建辅助磁盘,请在 --create-disk 标志中指定 imageimage-familyimage-project 属性。如需创建空白磁盘,请勿包含这些属性。可选操作:添加磁盘 sizetype 属性。

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

替换以下内容:

  • VM_NAME:新虚拟机的名称
  • IMAGEIMAGE_FAMILY。 指定以下其中一项:

    • IMAGE:所需的公共映像版本。例如 --image debian-10-buster-v20200309
    • IMAGE_FAMILY映像系列。此项表示通过最新的未弃用的操作系统映像创建虚拟机。例如,如果您指定 --image-family debian-10,则 Compute Engine 会通过 Debian 10 映像系列中最新版本的操作系统映像创建虚拟机。
  • IMAGE_PROJECT:包含映像的项目

  • 对于额外的磁盘,请替换以下内容:

    • DISK_IMAGEDISK_IMAGE_FAMILY:指定以下其中一项:
      • DISK_IMAGE:您要用作辅助磁盘的映像的名称。
      • DISK_IMAGE_FAMILY:要用作辅助磁盘的映像系列。
    • DISK_IMAGE_PROJECT:磁盘映像所属的映像项目。
    • SIZE_GB(可选):辅助磁盘的大小。
    • DISK_TYPE(可选):永久性磁盘的类型。例如 pd-ssd

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

API

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

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/IMAGE"
     },
     "boot": true
   },
   {
     "initializeParams": {
       "diskSizeGb": "SIZE_GB",
       "sourceImage": "projects/DISK_IMAGE_PROJECT/global/images/DISK_IMAGE",
       "diskType": "DISK_TYPE"
   },
   {
     "initializeParams": {
     "diskSizeGb": "SIZE_GB",
     "diskType": "DISK_TYPE"
   }
    }...]

替换以下内容:

  • PROJECT_ID:要在其中创建虚拟机的项目的 ID。
  • PROJECT_ZONE:要在其中创建虚拟机的地区。
  • MACHINE_TYPE_ZONE:包含新虚拟机将使用的机器类型的地区。
  • MACHINE_TYPE:新虚拟机的预定义自定义机器类型。
  • VM_NAME:新虚拟机的名称
  • IMAGE_PROJECT:包含自定义映像的项目的名称。
  • IMAGEIMAGE_FAMILY:指定以下其中一项:
    • IMAGE:您的自定义映像的名称。例如 "sourceImage": "projects/my-project-1234/global/images/my-debian-image-v2"
    • IMAGE_FAMILY:如果您在自定义映像系列中创建了自定义映像,请指定该自定义映像系列。此项表示通过自定义映像系列中最新的未弃用的操作系统映像操作系统版本创建虚拟机。例如,如果您指定 "sourceImage": "projects/my-project-1234/global/images/family/my-debian-family",则 Compute Engine 会通过自定义 my-debian-family 映像系列中最新版本的操作系统映像创建虚拟机。
  • 对于额外的磁盘,请替换以下内容:

    • SIZE_GB:磁盘大小。
    • DISK_IMAGEDISK_IMAGE_FAMILY:为辅助磁盘指定来源映像或映像系列:
      • DISK_IMAGE:您要用作辅助磁盘的映像的名称。例如 "sourceImage": "projects/DISK_IMAGE_PROJECT/global/images/DISK_IMAGE"
      • DISK_IMAGE_FAMILY:要用作辅助磁盘的映像系列。例如 "sourceImage": "projects/DISK_IMAGE_PROJECT/global/images/family/DISK_IMAGE_FAMILY"
    • 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 VM_NAME \
    --image IMAGE \
    --image-project IMAGE_PROJECT

替换以下内容:

  • VM_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  e2-standard-2               10.240.0.4   104.198.53.60  RUNNING

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

gcloud compute instances create VM_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

替换以下内容:

  • VM_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 VM_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

替换以下内容:

  • VM_NAME:新虚拟机的名称
  • BOOT_SNAPSHOT_NAME:要恢复到新实例启动磁盘的启动磁盘快照的名称。
  • BOOT_DISK_SIZE(可选):新启动磁盘的大小(以 GB 为单位)。该大小必须等于或大于用于创建快照的来源磁盘的大小。
  • BOOT_DISK_TYPE(可选):永久性启动磁盘的类型。例如 pd-ssd
  • BOOT_DISK_NAME:此实例的新启动磁盘的名称。

可选操作:如果您还希望创建恢复非启动快照,请附加 --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": "VM_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:您要在其中创建新实例的可用区。
  • VM_NAME:您要将快照恢复到的虚拟机的名称
  • MACHINE_TYPE:实例的机器类型
  • BOOT_SNAPSHOT_NAME:您要用于创建新实例启动磁盘的快照的名称。
  • BOOT_DISK_SIZE(可选):新启动磁盘的大小(以 GB 为单位)。该大小必须等于或大于用于创建快照的来源磁盘的大小。
  • BOOT_DISK_TYPE(可选):启动磁盘的类型,即 pd-standardpd-ssd

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

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

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

控制台

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

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

    1. 在 Google Cloud Console 中,转到磁盘页面。

      转到“磁盘”

    2. 点击创建磁盘

    3. 指定磁盘的名称。请参阅资源命名惯例

    4. 选择此磁盘的区域地区

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

    5. 选择磁盘类型

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

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

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

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

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

    转到“虚拟机实例”

  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 VM_NAME \
    --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

替换以下内容:

  • VM_NAME:新虚拟机的名称
  • SNAPSHOT_1_NAMESNAPSHOT_2_NAME:您要恢复的非启动快照的名称。
  • DISK_1_NAMEDISK_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": "VM_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:您要在其中创建新实例的可用区。
  • VM_NAME:您要将快照恢复到的虚拟机的名称
  • MACHINE_TYPE:实例的机器类型
  • DISK_SIZE(可选):相应磁盘的大小(以 GB 为单位)。如果提供此属性,则它必须等于或大于用于创建快照的来源磁盘的大小。
  • DISK_TYPE(可选):相应永久性磁盘的类型,即 pd-standardpd-ssd
  • SNAPSHOT_1_NAMESNAPSHOT_2_NAME:您要恢复到新实例上新非启动磁盘的非启动快照的名称。

从容器映像创建实例

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

控制台

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

    转到“虚拟机实例”

  2. 点击创建实例

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

  4. 容器部分中,选中将一个容器映像部署到此虚拟机实例 (Deploy a container image to this VM instance) 复选框。

  5. 指定要使用的容器映像,例如:

    • 如需从 Cloud Launcher 中选择 NGINX 1.12 容器映像,请运行以下命令:

      gcr.io/cloud-marketplace/google/nginx1:1.12

    • 如需从 Docker Hub 部署 Apache 容器映像,请始终指定完整的 Docker 映像名称:

      docker.io/httpd:2.4

  6. 可选操作:点击高级容器选项。如需了解详情,请参阅配置选项以便运行容器

  7. 点击创建以创建实例、启动实例并启动容器。

gcloud

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

gcloud compute instances create-with-container VM_NAME \
    --container-image CONTAINER_IMAGE

替换以下内容:

  • VM_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 部署 Apache 容器映像,请始终指定完整的 Docker 映像名称:

docker.io/httpd:2.4

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

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

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

在特定子网中创建实例

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

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

控制台

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

    转到“虚拟机实例”

  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 VM_NAME \
    --subnet SUBNET_NAME \
    --zone ZONE_NAME

替换以下内容:

  • VM_NAME:实例的名称
  • SUBNET_NAME:子网的名称。网络是根据指定的子网推断出来的。
  • ZONE_NAME:在其中创建实例的可用区,例如 europe-west1-b。实例的区域是根据可用区推断出来的。

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

gcloud compute instances create VM_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

替换以下内容:

  • VM_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"
     }
 }...]

替换以下内容:

  • NETWORK_NAME:要在其中创建实例的网络
  • REGION:要在其中创建实例的区域的名称
  • SUBNET_NAME:子网的名称
  • SIZE_GB:磁盘大小
  • IMAGE:辅助磁盘的来源映像对于空白磁盘,请勿指定映像来源

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

后续步骤