创建和启动虚拟机实例

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

在创建虚拟机时,您可为虚拟机创建一个或多个磁盘。也可以在创建虚拟机后为其添加更多磁盘。在您创建虚拟机实例后,Compute Engine 会自动将其启动。

如需了解更具体或更复杂的虚拟机创建,请参阅以下资源:

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

准备工作

通过映像创建虚拟机实例

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

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

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

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

控制台

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

    转到“映像”

gcloud

  1. 运行以下命令:

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

  3. 可选:如需确定映像是否支持安全强化型虚拟机功能,请运行以下命令:

    gcloud compute images describe IMAGE_NAME \
        --project=IMAGE_PROJECT
    

    请替换以下内容:

    如果映像支持安全强化型虚拟机功能,则输出中会显示以下行:type: UEFI_COMPATIBLE

API

  1. 运行以下命令:

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

  3. 可选:如需确定映像是否支持安全强化型虚拟机功能,请运行以下命令:

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

    请替换以下内容:

    如果映像支持安全强化型虚拟机功能,则输出中会显示以下行:type: UEFI_COMPATIBLE

通过公共映像创建虚拟机实例

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. 可选操作:如果您选择了支持安全强化型虚拟机功能的操作系统映像,则可以修改安全强化型虚拟机设置:如需修改安全强化型虚拟机设置,请点击管理、安全、磁盘、网络、单独租用部分中的安全标签页,并根据需要执行以下操作:

  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
        --machine-type=MACHINE_TYPE

    请替换以下内容:

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

      • IMAGE:公共映像的特定版本

        例如 --image=debian-10-buster-v20200309

      • IMAGE_FAMILY映像系列

        此项表示通过最新的未弃用的操作系统映像创建虚拟机。例如,如果您指定 --image-family=debian-10,则 Compute Engine 会通过 Debian 10 映像系列中最新版本的操作系统映像创建虚拟机。

    • IMAGE_PROJECT:包含映像的项目

    • MACHINE_TYPE:新虚拟机的预定义自定义机器类型

      如需获取可用区中可用的机器类型列表,请使用带有 --zones 标志的 gcloud compute machine-types list 命令

  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/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
    • 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. 可选操作:更改此虚拟机的可用区。Compute Engine 会随机列出每个区域内的可用区,以鼓励跨多个可用区使用。

  6. 为您的虚拟机选择机器配置

  7. 启动磁盘部分中,点击更改以配置您的启动磁盘。 之后,执行以下操作:

    1. 选择自定义映像标签。
    2. 显示以下项目的映像下拉列表中,选择您的项目。
    3. 映像下拉列表中,选择所需的映像。
    4. 选择启动磁盘类型。
    5. 指定大小。
    6. 点击选择
  8. 如需允许 HTTP 或 HTTPS 流量流向虚拟机,请选择允许 HTTP 流量允许 HTTPS 流量

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

  9. 点击创建以创建并启动虚拟机。

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 方法

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/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
  • 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. 选择允许 HTTP 流量允许 HTTPS 流量,以允许传送到虚拟机的 HTTP 或 HTTPS 流量。选择其中一项后,Compute Engine 会向您的虚拟机添加一个网络标记,以将防火墙规则与该虚拟机相关联。然后,Compute Engine 会创建相应的入站防火墙规则,该规则允许 tcp:80 (HTTP) 或 tcp:443 (HTTPS) 上的所有传入流量。

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

    1. 点击管理、安全、磁盘、网络、单独租用部分。
    2. 点击磁盘标签页。
    3. 额外磁盘下方,点击添加新磁盘
    4. 指定磁盘名称类型来源类型模式删除规则。如需详细了解如何添加新磁盘,请参阅创建和挂接磁盘
    5. 点击完成
  11. 点击创建以创建并启动虚拟机。

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(可选):永久性磁盘类型的完整或部分网址

      例如 https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/pd-ssd。如需查看可用磁盘类型,请运行 gcloud compute disk-types list 命令

    对于空白磁盘,请勿指定 DISK_IMAGEDISK_IMAGE_FAMILYDISK_IMAGE_PROJECT 参数。

API

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

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/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
  • 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:永久性磁盘类型的完整或部分网址

    例如 https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/pd-ssd

    对于空白磁盘,请勿指定 DISK_IMAGEDISK_IMAGE_FAMILYDISK_IMAGE_PROJECT 参数。

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

通过共享映像创建虚拟机实例

如果其他用户与您共享映像,您可以使用该映像创建虚拟机。

控制台

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

    转到“虚拟机实例”

  2. 选择您的项目并点击继续
  3. 点击创建实例
  4. 为您的虚拟机指定名称。请参阅资源命名惯例
  5. 可选操作:更改此虚拟机的可用区。Compute Engine 会随机列出每个区域内的可用区,以支持跨多个可用区使用。
  6. 为您的虚拟机选择机器配置
  7. 启动磁盘部分中,点击更改以配置您的启动磁盘。然后按以下步骤操作:
    1. 选择自定义映像标签。
    2. 显示以下项目的映像下拉列表中,选择映像项目。
    3. 映像下拉列表中,选择所需的映像。
    4. 点击选择
  8. 如需允许 HTTP 或 HTTPS 流量流向虚拟机,请选择允许 HTTP 流量允许 HTTPS 流量

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

  9. 点击创建以创建并启动虚拟机。

gcloud

使用 gcloud compute instances create command 创建虚拟机,并使用 --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

API

按照 API 说明通过公共映像创建虚拟机,但在请求正文中指定 image 字段。如需添加空白磁盘,请勿指定映像来源。您可以选择指定 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. 可选操作:更改此虚拟机的可用区。Compute Engine 会随机列出每个区域内的可用区,以鼓励跨多个可用区使用。

  6. 为您的虚拟机选择机器配置

  7. 启动磁盘部分中,点击更改以配置您的启动磁盘。 之后,执行以下操作:

    1. 点击快照标签,然后从列表中选择一个快照。
    2. 点击选择
  8. 如需允许 HTTP 或 HTTPS 流量流向虚拟机,请选择允许 HTTP 流量允许 HTTPS 流量

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

  9. 点击创建以创建并启动虚拟机。

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:此虚拟机的新启动磁盘名称

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-ssd

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

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

如需将非启动快照恢复到新虚拟机,请在创建虚拟机时按照以下额外的步骤执行操作。

控制台

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

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

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

      转到“磁盘”

    2. 点击创建磁盘

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

    4. 选择此磁盘的区域地区。磁盘和虚拟机必须位于同一可用区。

    5. 选择磁盘类型

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

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

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

    重复上述步骤,根据要恢复的每个快照创建磁盘。创建虚拟机时,您最多可以添加 15 个非启动磁盘。

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

    转到虚拟机实例

  3. 点击创建实例

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

  5. 选择此虚拟机的区域地区。磁盘和虚拟机必须位于同一可用区。

  6. 为您的虚拟机选择机器类型

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

  8. 如需将磁盘挂接到虚拟机,请执行以下操作:

    1. 点击管理、安全、磁盘、网络、单独租用
    2. 选择磁盘标签。
    3. 额外磁盘下,点击挂接现有磁盘
    4. 在新的磁盘字段下,选择要挂接到此虚拟机的磁盘。
    5. 为磁盘指定模式删除规则
    6. 点击完成

    针对您要挂接的每个磁盘,重复上述步骤。创建虚拟机时,您最多可以添加 15 个非启动磁盘。

  9. 点击创建以创建并启动虚拟机。

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(可选):永久性磁盘的类型

    例如 https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/pd-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(可选):相应永久性磁盘的类型的完整或部分网址

    例如 https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/pd-ssd

  • SNAPSHOT_1_NAMESNAPSHOT_2_NAME:要恢复到新虚拟机上的新非启动磁盘的非启动快照名称

从容器映像创建虚拟机实例

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

如需通过容器映像创建虚拟机,您必须使用 Cloud Console 或 gcloud

控制台

  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 网络。如需使用其他网络或者您在自动模式或自定义模式 VPC 网络中手动创建的子网,您必须在创建虚拟机时指定子网。

在子网中创建虚拟机时,请考虑以下规则:

  • 如果您没有指定网络或子网,Compute Engine 会使用默认 VPC 网络和与虚拟机位于同一区域的自动子网。
  • 如果您未指定网络,Compute Engine 会根据指定的子网推断网络。
  • 如果您指定了网络,则必须指定子网,并且此子网必须属于同一个网络。否则,虚拟机创建会失败。

控制台

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

    转到虚拟机实例

  2. 选择您的项目并点击继续

  3. 点击创建实例

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

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

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

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

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

  8. 点击网络标签页。在网络接口下,指定网络详细信息。

    1. 网络字段中,选择包含您创建的子网的 VPC 网络。
    2. 子网字段中,选择实例将使用的子网。
  9. 点击创建以创建并启动虚拟机。

gcloud

使用 gcloud 命令行工具,按照使用映像创建虚拟机使用快照创建虚拟机的说明执行操作,然后在运行 gcloud compute instances create 命令时添加 --subnet=SUBNET_NAME--zone=ZONE 标志:

gcloud compute instances create VM_NAME \
    --network=NETWORK_NAME \
    --subnet=SUBNET_NAME \
    --zone=ZONE

请替换以下内容:

  • VM_NAME:虚拟机的名称
  • NETWORK_NAME(可选):网络的名称
  • SUBNET_NAME:子网的名称

    如需查看网络中的子网列表,请使用 gcloud compute networks subnets list 命令。

  • ZONE:在其中创建虚拟机的可用区,例如 europe-west1-b

    虚拟机的区域是根据可用区推断出来的。

API

按照使用映像创建虚拟机使用快照创建虚拟机的 API 说明执行操作,但在请求正文中指定 subnet 字段。如需添加空白磁盘,请勿添加来源映像。您可以选择指定 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:非启动磁盘的来源映像

    对于空白磁盘,请勿指定映像来源

问题排查

如需查找解决常见虚拟机创建错误的方法,请参阅排查虚拟机创建问题

后续步骤

亲自尝试

如果您是 Google Cloud 新手,请创建一个帐号来评估 Compute Engine 在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。

免费试用 Compute Engine