创建运行自定义机器类型的虚拟机

Compute Engine 提供了预定义机器类型,可供您在创建虚拟机实例时使用。预定义的机器类型中的 vCPU 数量和内存量是预先设置的,按固定价格计费。

如果预定义虚拟机不能满足您的需求,您可以使用自定义虚拟化硬件设置创建虚拟机实例。具体来说,您可以创建具有自定义 vCPU 数量和内存量的虚拟机实例,实际上就是使用自定义机器类型。通用机器系列提供了自定义机器类型。创建自定义虚拟机时,您要部署 E2、N2、N2D 或 N1 机器系列中的自定义虚拟机。

自定义虚拟机非常适合以下场景:

  • 不适合使用预定义虚拟机类型的工作负载。
  • 工作负载需要更高的处理能力或更多的内存,但又不需要更高级别的机器类型所提供的全面升级。

准备工作

价格

Google 根据虚拟机使用的 vCPU 数量和内存时长收取自定义虚拟机的使用费用。这与预定义机器类型的计费方式不同。如需了解详情,请参阅虚拟机价格

自定义虚拟机与其他实例一样,最低按 1 分钟收取起步费,但针对自定义机器类型的持续使用折扣的计算方式有所不同。如需了解详情,请参阅自定义虚拟机的持续使用折扣

以 GB 或 MB 表示内存

在 Google Cloud 工具和文档中,机器类型的内存以千兆字节 (GB) 为单位计算,其中 1 GB 为 230 个字节。此计量单位也称为吉比字节 (GiB)。将内存从 GB 转换成 MB 时,1 GB = 1024 MB。

在 API 中,内存必须以 MB 为单位提供。如果您使用 Google Cloud CLI,则可以 GB 或 MB 为单位提供虚拟机的总内存。但是,gcloud CLI 要求内存值必须为整数,因此您不能提供浮点值。例如,如需表示 5.75 GB 内存,请将其转换为以 MB 为单位的数值。在此例中,5.75 GB 为 5888 MB。

创建运行自定义机器类型的虚拟机实例

在创建虚拟机实例之前,请务必阅读并了解用于创建此机器类型的自定义规范

控制台

  1. 在 Google Cloud Console 中,转到创建实例页面。

    转到“创建实例”

  2. 可用区列表中,选择您要在其中托管此虚拟机的可用区。系列列表已过滤,以仅包含所选可用区中可用的机器类型系列。

  3. 机器配置部分中,选择通用

    1. 系列列表中,对于 N1 自定义机器类型,点击第一代中的 N1,或对于第二代自定义机器类型,点击 E2N2N2D
    2. 机器类型列表中,选择自定义
    3. 如需指定虚拟机实例的 vCPU 数量和内存量,请拖动滑块或在文本框中输入值。在您更改 vCPU 数量和内存量时,控制台会显示虚拟机的预估费用。
  4. 继续创建虚拟机。

gcloud

自定义机器类型的 gcloud 命令略有不同,具体取决于机器类型系列。

对于 N1 机器类型,请使用 gcloud compute instances create 命令并指定以下其中一个选项:

  • --custom-cpu--custom-memory 标志。
  • --machine-type=custom-[NUMBER_OF_CPUS]-[NUMBER_OF_MB] 标志。

例如,以下命令将创建一个运行配备了 4 个 vCPU 和 5 GB 总内存的 N1 机器类型的实例:

gcloud compute instances create example-instance \
    --custom-cpu=4 --custom-memory=5

对于 N2 机器类型,请使用 gcloud compute instances create 命令并指定以下其中一个选项:

  • --custom-cpu--custom-memory--custom-vm-type 标志。
  • --machine-type=n2-custom-NUMBER_OF_CPUS-NUMBER_OF_MB 标志。

如果使用 --custom-memory 标志,请以 GB 或 MB 为单位指定总内存量。该属性必须是整数,因此,如果要指定 0.25 GB 的内存增量,请将该值转换为以 MB 为单位的数值。

如需指定增量值(如 2.5 GB 内存),请将该值转换为以 MB 为单位的数值,并在提供该值时加上 MB 后缀。下面的示例将创建一个运行 N2 机器类型的实例:

gcloud compute instances create example-instance \
    --custom-cpu=6 --custom-memory=3072MB --custom-vm-type=n2

或者,您可以使用以下格式指定自定义机器类型:

gcloud compute instances create example-instance \
    --machine-type n2-custom-NUMBER_OF_CPUS-NUMBER_OF_MB

替换以下内容:

  • NUMBER_OF_CPUS:您需要的 CPU 数量。
  • NUMBER_OF_MB:内存量(以 MB 为单位)。

例如:

gcloud compute instances create example-instance --machine-type=n2-custom-6-3072

对于 N2D 或 E2 机器类型,请使用 gcloud compute instances create 命令并添加以下选项之一:

  • --custom-cpu--custom-memory--custom-vm-type 标志。
  • --machine-type=n2d-custom-NUMBER_OF_CPUS-NUMBER_OF_MB 标志。
  • --machine-type=e2-custom-NUMBER_OF_CPUS-NUMBER_OF_MB 标志。

对于 E2 共享核心自定义机器类型,请使用相同的 gcloud compute instances create 命令并添加共享核心机器大小:microsmallmedium

  • --machine-type=e2-custom SHARED_CORE_MACHINE_SIZE-NUMBER_OF_MB 标志。

例如:

gcloud compute instances create example-instance \
    --machine-type=e2-custom-medium-NUMBER_OF_MB

如果使用 --custom-memory 标志,请以 GB 或 MB 为单位指定总内存量。该属性必须是整数,因此,如果要为内存指定 0.25 GB 的增量,请将该值转换为以 MB 为单位的数值。

如需指定增量值(如 2.5 GB 内存),请将该值转换为以 MB 为单位的数值,并在提供该值时加上 MB 后缀。下面的示例将创建一个运行 E2 机器类型的实例:

gcloud compute instances create example-instance \
    --custom-cpu=6 --custom-memory=3072MB --custom-vm-type=e2

或者,您可以使用以下格式指定自定义机器类型:

gcloud compute instances create example-instance \
    --machine-type=e2-custom-NUMBER_OF_CPUS-NUMBER_OF_MB

替换以下内容:

  • NUMBER_OF_CPUS:您需要的 CPU 数量。
  • NUMBER_OF_MB:内存量(以 MB 为单位)。

例如:

gcloud compute instances create example-instance --machine-type=e2-custom-6-3072

API

在 API 中,请按照正常方式创建您的实例创建请求,但在指定 machineType 值时需使用下面的其中一种格式。请将 NUMBER_OF_CPUSAMOUNT_OF_MEMORY_MB 分别替换为您所需的 CPU 数量和内存量。请以 MB 为单位提供内存。

  • 对于 N1 机器类型,请使用以下格式:

    zones/ZONE/machineTypes/custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY_MB
    
  • 对于 N2 机器类型,请使用以下格式:

    zones/ZONE/machineTypes/n2-custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY_MB
    
  • 对于 N2D 机器类型,请使用以下格式:

    zones/ZONE/machineTypes/n2d-custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY_MB
    
  • 对于 E2 机器类型,请使用以下格式:

    zones/ZONE/machineTypes/e2-custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY_MB
    
  • 对于 E2 共享核心自定义机器类型,请使用:

    zones/ZONE/machineTypes/e2-custom-SHARED_CORE_MACHINE_SIZE-AMOUNT_OF_MEMORY_MB
    

例如,以下网址将创建配备了 4 个 vCPU 和内存为 5 GB (5120 MB) 的实例:

zones/us-central1-f/machineTypes/custom-4-5120

类似地,您可以使用自定义机器类型创建抢占式实例实例组

向机器类型添加扩展内存

默认情况下,每种机器类型都具有特定数量的内存,具体取决于机器。例如,如果您创建自定义 N1 虚拟机,则每个 vCPU 最多可以配备 6.5 GB 的内存。对于自定义 N2 虚拟机,此数量最多增加至每个 vCPU 8 GB 的内存。

对于某些工作负载,此内存量可能不够用。您可以支付额外的费用,为每个 vCPU 提供超出默认限制的更多内存。这称为扩展内存。

借助扩展内存,您可以向机器类型添加内存,而不受每个 vCPU 的内存限制。您可以添加高达相应机器类型特定限制的扩展内存:

  • 对于 N1 机器类型,您最多可以为每个虚拟机添加到 624 GB 的总内存。
  • 对于 N2 机器类型,您最多可以为每个虚拟机添加 640 GB 的总内存。
  • 对于 N2D 机器类型,您最多可以为每个虚拟机添加 768 GB 的总内存。
  • 扩展内存不适用于 E2 机器类型。

如果您还需要更多的内存,则必须使用一种特大内存机器类型,该类型让您可以创建具有 1.4 TB 总内存的虚拟机实例。

确定您是否需要扩展内存

某些工作负载需要超出每个 vCPU 的默认容量的内存,才能实现最佳效果。基于内存中高性能分析数据库的工作负载,包括关系型数据库和 NoSQL 数据库,如 MS SQL Server、MongoDB 和 MemcacheD/Redis,都属于这一类。操作系统和软件堆栈的基于 vCPU 的许可也使得选择最佳虚拟机内存配置对于预定义的机器类型更具挑战性。使用扩展内存,您可以添加虚拟机所需的尽可能多的内存,以实现最佳性价比。

价格

使用自定义机器类型时,如果每个 vCPU 的内存量不超过默认数量,则按照 N1 自定义机器类型价格N2 自定义机器类型价格收费。E2 自定义机器类型和 E2 共享核心自定义机器类型具有相同的价格方案。

对于高于默认量的内存,Compute Engine 会根据 N1 扩展自定义内存价格N2 扩展自定义内存价格对扩展内存收费。 扩展内存的价格不同于低于默认阈值的内存价格。

扩展内存的价格会因区域而异。使用扩展内存运行的实例与其他实例一样,也按 1 分钟收取起步费。扩展内存也符合持续使用折扣的条件。

如需了解详情,请参阅自定义机器类型的持续使用折扣扩展自定义内存价格

限制

  • 您只能为自定义机器类型添加扩展内存。不能向预定义机器类型添加。
  • 您可以为每个 vCPU 添加的内存不受限制,但您可以向每个虚拟机实例添加的内存量存在上限。对于 N1 机器类型,您最多可以添加到 624 GB 的内存。对于 N2 机器类型,您可以添加高达 640 GB 的内存。对于 N2D 机器类型,您可以添加高达 768 GB 的内存。
  • N2 和 N2D 机器类型仅在部分区域和可用区中提供。
  • 您必须以 256 MB 为增量指定内存。
  • 扩展内存不符合承诺使用折扣的条件。

在创建实例期间添加扩展内存

如需创建使用扩展内存的虚拟机实例,请按照以下说明进行操作。

控制台

  1. 在 Google Cloud Console 中,转到创建实例页面。

    转到“创建实例”

  2. 可用区列表中,选择您要在其中托管此虚拟机的可用区。系列列表已过滤,以仅包含所选可用区中可用的机器类型系列。

  3. 机器配置部分中,选择通用

    1. 系列列表中,对于 N1 自定义机器类型,点击第一代中的 N1,或对于第二代自定义机器类型,点击 N2N2D
    2. 机器类型列表中,选择自定义
    3. 如需指定 vCPU 数量,请拖动核心滑块或在文本框中输入值。
    4. 如需添加扩展内存,请选择扩展内存,然后执行以下操作:

      1. 如需指定虚拟机实例的内存量,请拖动内存滑块或在文本框中输入值。

      在您更改 vCPU 数量和内存量时,控制台会显示虚拟机的预估费用。

  4. 继续创建虚拟机。

gcloud

对于 N1 机器类型,请使用 gcloud 命令和 instances create 子命令,并在其后指定 --custom-extensions 标志以启用扩展内存。然后使用 --custom- memory 参数指定所需的总内存。

gcloud compute instances create example-instance  \
    --custom-extensions --custom-cpu=2 --custom-memory=15

对于 N2 机器类型,请使用 gcloud 命令和 instances create 子命令。然后依次设置 --custom-extensions--custom-cpu--custom-memory--custom-vm-type 标志,以指定 N2 机器类型:

gcloud compute instances create example-instance \
    --custom-extensions --custom-cpu=2 --custom-memory=16 \
    --custom-vm-type=n2

对于 N2D 机器类型,请使用 gcloud 命令和 instances create 子命令。然后依次设置 --custom-extensions--custom-cpu--custom-memory--custom-vm-type 标志,以指定 N2D 机器类型:

gcloud compute instances create example-instance \
    --custom-extensions --custom-cpu=2 --custom-memory=16 \
    --custom-vm-type=n2d

API

API 中,请按照正常方式构造您的实例创建请求,但在指定 machineType 值时需使用下面的其中一种格式:

  • 对于 N1 机器类型,请使用以下格式:

    zones/ZONE/machineTypes/custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY-ext
    
  • 对于 N2 机器类型,请使用以下格式:

    zones/ZONE/machineTypes/n2-custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY-ext
    
  • 对于 N2D 机器类型,请使用以下格式:

    zones/ZONE/machineTypes/n2d-custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY-ext
    

替换以下内容:

  • NUMBER_OF_CPUS:vCPU 数量。
  • AMOUNT_OF_MEMORY:内存(以 MB 为单位)。

例如,以下命令指定了配备 2 个 vCPU 和 20 GB 内存的 N2 机器类型:

zones/ZONE/machineTypes/n2-custom-2-20480-ext

向现有的虚拟机实例添加扩展内存

如需向现有实例添加更多内存,您必须先停止实例。 实例停止后,请按照以下说明向虚拟机添加更多内存。

控制台

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

    转到虚拟机实例

  2. 从虚拟机列表中选择您要修改的已停止虚拟机。

  3. 点击页面顶部的修改

  4. 机器配置中,选择通用

  5. 机器类型列表中,选择自定义

  6. 选择所需的 vCPU 数量。

  7. 如需添加扩展内存,请选择扩展内存,然后指定所需的内存量。

  8. 保存更改。

gcloud

在 Google Cloud CLI 中,使用 instances set-machine-type 子命令,并在其后指定 --custom-extensions 标志和现有 --custom-memory 参数。

例如,如需向名为 example-instance 的虚拟机实例添加 2 GB 内存(该实例目前在 us-central1-b 地区运行配备了 2 个 vCPU 和 13 GB 内存的 N1 机器类型),请使用以下命令:

gcloud compute instances set-machine-type example-instance \
   --zone=us-central1-b --custom-cpu=2 \
   --custom-memory=15 --custom-extensions

API

API 中,向 setMachineType 方法发出 POST 请求,并在请求正文中指定所需的机器类型。请使用以下格式之一:

  • 对于 N1 机器类型,请使用以下格式:

    zones/ZONE/machineTypes/custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY-ext
    
  • 对于 N2 机器类型,请使用以下格式:

    zones/ZONE/machineTypes/n2-custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY-ext
    
  • 对于 N2D 机器类型,请使用以下格式:

    zones/ZONE/machineTypes/n2d-custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY-ext
    

替换以下内容:

  • NUMBER_OF_CPUS:vCPU 数量。
  • AMOUNT_OF_MEMORY:内存(以 MB 为单位)。

例如,以下请求使用配备 2 个 vCPU 和 15 GB 内存的机器类型:

zones/ZONE/machineTypes/custom-2-15360-ext

例如:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/setMachineType

{
    machineType: "zones/us-central1-f/machineTypes/custom-2-15360-ext"
}

后续步骤