创建和启动虚拟机实例

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

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

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

准备工作

从映像创建实例

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

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

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

从公开映像创建实例

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

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

Console

  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

在创建实例之前,请选择要用于您实例的启动磁盘的操作系统映像。使用不带任何标志的 gcloud compute images list 命令可以查看非受防护的虚拟机公共映像及其映像 ID、映像系列和映像项目的完整列表:

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://www.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] 是该映像所属的映像项目

在创建实例时,您最多可以添加 15 个辅助非启动磁盘。为您创建的每个辅助磁盘指定 --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-vm-secure-boot:停用安全启动。安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。如需了解详情,请参阅安全启动
  • --no-shielded-vm-vtpm:停用虚拟可信平台模块 (vTPM)。vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)

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

    以下示例展示了如何创建停用了安全启动的 Ubuntu 受防护的虚拟机实例:

    gcloud beta compute instances create my-instance
    --image-family ubuntu-1804-uefi --image-project gce-uefi-images
    --no-shielded-vm-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 属性,您可以在创建虚拟机实例时添加多达 15 个辅助非启动磁盘。使用公共映像或私有映像创建额外磁盘。要添加空白磁盘,请勿指定映像来源。或者,您可以将 diskSizeGbdiskType 属性包括在其中。

def addInstance(http, listOfHeaders):
  url = "https://www.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]"
       }
     },
     {
       "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。对于空白磁盘,请勿指定映像来源。
  • [SIZE_GB] 是磁盘大小。
  • [DISK_TYPE] 是永久性磁盘的类型,即 pd-standardpd-ssd

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

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()

从自定义映像创建实例

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

Console

  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] 是一个可选字段。使用公共映像或私有映像。如果未指定映像,则磁盘将为空。

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

在创建实例时,您最多可以添加 15 个辅助非启动磁盘。为您创建的每个辅助磁盘指定 --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 属性,您可以在创建虚拟机实例时创建多达 15 个辅助非启动磁盘。使用公共映像或私有映像创建额外磁盘。要添加空白磁盘,请定义不带 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

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

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

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

Console

  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://www.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</pre>

在创建实例时,您最多可以添加 15 个辅助非启动磁盘。为您创建的每个辅助磁盘指定 --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 字段。通过为每个额外磁盘指定 initalizeParams 字段,您最多可以添加 15 个辅助非启动磁盘。要添加空白磁盘,请勿指定映像来源。或者,您可以指定 diskSizeGbdiskType 属性。

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

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

通过快照创建实例

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

Console

  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 命令行工具,您无法像在控制台中一样使用快照直接创建实例。首先,通过快照创建一个新的独立永久性启动磁盘。然后使用该磁盘创建新实例。

  1. 使用 gcloud compute disks create 命令通过快照创建独立的永久性启动磁盘

    gcloud compute disks create [DISK_NAME] --source-snapshot [SNAPSHOT_NAME]
    
  2. 使用 gcloud compute instances create 命令创建新实例,并使用 --disk 标志和 boot=yes 属性挂接磁盘。

    gcloud compute instances create [INSTANCE_NAME] --disk name=[DISK_NAME],boot=yes
    

    在创建实例时,您最多可以添加 15 个辅助非启动磁盘。为您创建的每个辅助磁盘指定 --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 中,您无法像在控制台中一样使用快照直接创建实例。首先,通过快照创建一个新的独立永久性启动磁盘。然后使用该磁盘创建新实例。

限制:

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

要从快照创建实例,请执行以下操作:

  1. 通过快照创建独立的永久性启动磁盘

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks
    
    {
      "name": "[DISK_NAME]",
      "sourceSnapshot": "zones/[ZONE]/snapshots/[SNAPSHOT_NAME]"
    }
    
  2. 创建新实例时挂接磁盘。将用于创建新实例的属性包括在请求正文中。将带有您要附加的永久性磁盘的网址的 source 字段包括在 disks 属性中。要添加辅助非启动磁盘(最多 15 个),请对每个磁盘使用 initializeParams 属性。要添加空白磁盘,请勿在其中包括来源映像。或者,您可以指定 diskSizeGbdiskType 属性。

    POST https://www.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": [{
         "source": "zones/[ZONE]/disks/[DISK_NAME]",
         "boot": true
       }],
       "initializeParams": [{
          "diskSizeGb": "[SIZE_GB]",
          "sourceImage": "[IMAGE]"
        }
       {
       "initializeParams": {
       "diskSizeGb": "[SIZE_GB]"
       }
    }...]
    

    其中:

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

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

通过容器映像创建实例

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

Console

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

    转到“虚拟机实例”页面

  2. 点击创建实例
  3. 为您的实例指定名称
  4. 容器部分中,选中将一个容器映像部署到此虚拟机实例 (Deploy a container image to this VM instance) 复选框。
  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 Platform 服务的实例

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

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

在特定子网中创建实例

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

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

Console

  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 命令行工具,按照相同的说明通过映像或快照创建实例,然后在使用 gcloud compute instances create 命令时添加 --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。实例的区域是根据地区推断出来的。

在创建实例时,您最多可以添加 15 个辅助非启动磁盘。为您创建的每个辅助磁盘指定 --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 字段。要添加最多 15 个辅助非启动磁盘,请对您创建的每个磁盘使用 initializeParams 属性。要添加空白磁盘,请勿添加来源映像。或者,您可以指定 diskSizeGbdiskType 属性。

...
"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 文档