创建和启动虚拟机实例

本文档介绍如何使用启动磁盘映像、启动磁盘快照或容器映像创建虚拟机 (VM) 实例。从启动磁盘映像创建虚拟机实例时,您可以使用常规映像或安全强化型虚拟机映像。安全强化型虚拟机映像可提供诸如符合 UEFI 标准的固件、安全启动和受 vTPM 保护的测量启动等安全功能。 在您创建虚拟机实例后,Compute Engine 会自动将其启动。

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

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

准备工作

从映像创建实例

此部分介绍如何通过特定操作系统的映像创建实例。启动磁盘映像包含引导加载程序、启动文件系统和在实例上运行的操作系统。

对于高级用户,您可以创建自定义映像来代替 Compute Engine 提供的公共映像。

您可以在 Google Cloud Platform Console、gcloud 命令行工具或 API 中使用映像创建实例。

通过公共映像创建实例

公开映像由 Google、开放源代码社区和第三方供应商提供和维护。默认情况下,所有项目都可以访问这些映像,并可以使用这些映像通过常见操作系统映像创建实例。

如需创建实例,请为需要使用的操作系统指定映像系列。Compute Engine 提供了多个 Linux 发行版,其中的部分发行版同时以常规映像和安全强化型虚拟机映像的形式提供。如果您为实例选用本地 SSD 存储,则无法使用安全强化型虚拟机的完整性监控功能,也无法使用 vTPM 保护数据。如需可用映像系列的列表,请参阅公共映像

控制台

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

    转到“虚拟机实例”页面

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

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

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

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

  8. 操作系统映像标签中,选择一个映像。
    选择显示支持安全强化型虚拟机功能的映像,以仅查看安全强化型虚拟机映像。

  9. 点击选择

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

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

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

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

    1. 点击管理、安全、磁盘、网络、单独租用部分的安全标签。
    2. 若要停用安全启动,请取消选中开启安全启动。 安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。 如需了解详情,请参阅安全启动
    3. 如果要停用虚拟可信平台模块 (vTPM),请取消选中开启 vTPM。vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)

    4. 如果要停用完整性监控,请清除开启完整性监控复选框。借助完整性监控功能,您可以使用 Stackdriver 监控安全强化型虚拟机实例的启动完整性。如需了解详情,请参阅完整性监控

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

gcloud

在创建实例之前,请选择要用于您实例的启动磁盘的操作系统映像。 如需查看非安全强化型虚拟机公共映像及其映像 ID、映像系列和映像项目的列表,请运行不带任何标志的 gcloud compute images list 命令:

gcloud compute images list

如需查看安全强化型虚拟机公共映像的列表,请运行带有以下标志的 gcloud compute images list 命令:

gcloud compute images list --project gce-uefi-images --no-standard-images

选择映像后,使用 gcloud compute instances create 命令来创建实例。

如需使用最新版本的操作系统映像,请指定 --image-family--image-project 标志。例如,debian-9 是返回最新版本的未弃用的 Debian 9 映像的映像系列,debian-cloud 是映像项目。

使用映像系列中的最新映像创建实例:

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

其中:

  • [INSTANCE_NAME] 是新实例的名称。
  • [IMAGE_FAMILY]可用映像系列中的一种。
  • [IMAGE_PROJECT] 是该映像系列所属的映像项目

示例响应:

Created [https://compute.googleapis.com/compute/v1/projects/myproject/zones/[ZONE]/instances/[INSTANCE_NAME]].
NAME            ZONE   MACHINE_TYPE  INTERNAL_IP   EXTERNAL_IP    STATUS
[INSTANCE_NAME] [ZONE] n1-standard-1 10.105.155.92 173.255.114.53 RUNNING

如果需要使用特定的映像版本,而不是最新版本,请指定 --image--image-project 标志。例如,如需创建使用 debian-9-stretch-v20170619 Debian 映像的实例,请指定 --image debian-9-stretch-v20170619--image-project debian-cloud

使用特定版本的映像创建实例:

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

其中:

  • [INSTANCE_NAME] 是新实例的名称。
  • [IMAGE_ID] 是特定映像。
  • [IMAGE_PROJECT] 是该映像所属的映像项目

在创建实例时,您最多可以添加 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

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

如果您选择支持安全强化型虚拟机的映像,则可以选择使用以下某个标志更改实例的安全强化型虚拟机设置:

  • --no-shielded-secure-boot:停用安全启动。安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。如需了解详情,请参阅安全启动
  • --no-shielded-vtpm:停用虚拟可信平台模块 (vTPM)。vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)

  • --no-shielded-integrity-monitoring:停用完整性监控。借助完整性监控功能,您可以使用 Stackdriver 监控安全强化型虚拟机实例的启动完整性。 如需了解详情,请参阅完整性监控

以下示例展示了如何创建停用了安全启动的 Ubuntu 安全强化型虚拟机实例:

gcloud beta compute instances create my-instance \
  --image-family ubuntu-1804-lts --image-project gce-uefi-images \
  --no-shielded-secure-boot

API

如需在 API 中启动实例,请发送请求并指定以下属性:

  • 来源映像
  • 网络接口
  • 机器类型
  • 如果您的 VPC 网络是自定义模式 VPC 网络,您还必须指定要在其中创建实例的子网。
  • 如果选择支持安全强化型虚拟机的映像,则可以在请求正文中选择使用以下布尔值项更改实例的安全强化型虚拟机设置:

    • enableSecureBoot:启用或停用安全启动。安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。 如需了解详情,请参阅安全启动
    • enableVtpm:启用或停用虚拟可信平台模块 (vTPM)。vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)

    • enableIntegrityMonitoring:启用或停用完整性监控。借助完整性监控功能,您可以使用 Stackdriver 报告监控和验证安全强化型虚拟机实例的运行时启动完整性。如需了解详情,请参阅完整性监控

确定您的资源属性后,创建请求正文并发出 API 请求。如需详细了解如何构建 API 请求和处理 API 响应,请参阅创建 API 请求和处理响应

发出 API 请求

如果您使用 API 客户端库,则可以通过直接调用 REST API 或使用 instances().insert 方法来启动新实例。以下是每个选项的示例:

REST

在 API 中,使用相同的请求正文构建向实例 URI 发出的 POST 请求。通过对每个额外磁盘使用 initializeParams 属性,您可以在创建虚拟机实例时添加多达 128 个辅助非启动磁盘。使用公共映像或私有映像创建额外磁盘。如需添加空白磁盘,请勿指定映像来源。作为选项,您可以将 diskSizeGbdiskTypelabels 属性包括在其中。

def addInstance(http, listOfHeaders):
  url = "https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances"

  body = {
    "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",
       "initializeParams": {
         "sourceImage": "projects/[IMAGE_PROJECT]/global/images/family/[IMAGE]",
         "labels": {
           "key": "[LABEL_KEY]",
           "value": "[LABEL_VALUE]",
         }
       }
     },
     {
       "initializeParams": {
          "diskSizeGb": "[SIZE_GB]",
          "sourceImage":"[IMAGE]"
       },
       {
       "initializeParams": {
          "diskSizeGb": "[SIZE_GB]"
       }
     }]

  bodyContentURLEncoded = urllib.urlencode(bodyContent)
  resp, content = http.request(uri=url, method="POST", body=dumps(bodyContent), headers=listOfHeaders)

  print resp
  print content

其中:

  • [INSTANCE_NAME] 是实例的名称。
  • [PROJECT_ID] 是您的项目 ID。
  • [ZONE] 是此实例所在的地区
  • [MACHINE_TYPE] 是该实例的机器类型
  • [IMAGE_PROJECT] 是映像所属的映像项目,例如 debian-cloudubuntu-os-cloud 等。
  • [IMAGE]可用公共映像系列中的一种。例如,family/debian-9 使用最新版本的 Debian 9 映像。或者,您也可以使用特定映像版本,例如不带 family/ 路径的 debian-9-stretch-v20170619。对于空白磁盘,请勿指定映像来源。
  • [LABEL_KEY][LABEL_VALUE] 是要应用于磁盘的标签。labels 字段为可选字段。
  • [SIZE_GB] 是磁盘大小。
  • [DISK_TYPE] 是永久性磁盘的类型,即 pd-standardpd-ssd

如果使用空白辅助磁盘创建实例,请为这些磁盘设置格式并进行装载,以供访客操作系统使用。

Python 版 Cloud 客户端库

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 流量。

    GCP 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 流量。

    GCP 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]

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

其中:

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

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

根据快照创建虚拟机实例

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

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

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

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

控制台

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

    转到“虚拟机实例”页面

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

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

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

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

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

  9. 点击选择

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

    GCP 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

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

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

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

在特定子网中创建实例

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

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

控制台

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

    转到“虚拟机实例”页面

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

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

    GCP 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

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

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档