使用单租户节点自带许可

Compute Engine 提供使用单租户节点自带许可 (BYOL) 的功能,以支持限制物理硬件用量的许可要求。具体来说,您可以使用单租户节点将自定义映像导入 Compute Engine 中,使用该映像启动虚拟机,并启用就地重启功能,以便让该虚拟机尽可能在同一物理服务器上重启。通过使用单租户节点来托管您的虚拟机,您可以确保这些虚拟机在完全专供您使用的硬件上运行,同时限制物理核心用量。Compute Engine 还可提供服务器用量报告,便于您通过跟踪物理硬件信息来了解许可用量。

如需了解此功能(包括要求和工作负载注意事项)的概览,请参阅概览页面。

准备工作

查看受支持的操作系统和许可要求

在开始此过程之前,请确保您的操作系统兼容,并且您已查看许可和激活部分。您要负责确保您的许可协议允许按照本文档所述的方式在 BYOL 环境中使用软件。此外,您还必须根据您的协议准备 BYOL 客机映像。

如果您有任何疑问或需要其他支持,请联系您的许可转销商(若是许可问题)或 Google Cloud 支持团队(若是有关此功能的问题)。

查看受支持的区域

此功能仅适用于特定区域。如需获取完整列表,请参阅价格和可用性

考虑您的工作负载

此功能更适合某些工作负载。如需了解一般性的建议,请参阅工作负载注意事项

创建新项目并申请配额

如果您还没有项目,请创建一个新项目

新项目的 CPU 配额限制为 100 个 CPU。这一配额可能无法满足您的需求。如果您的项目需要更多配额,可以通过 Cloud Console 中的“配额”页面申请调整配额。您可能还需要增加其他资源(例如 IP 地址)的配额,具体取决于您的设置。

启用 Cloud Build API

此功能使用 Cloud Build 服务导入和创建 Compute Engine 映像。您必须启用 Cloud Build API 才能使用此功能。

启用 Cloud Build API

Compute Engine 还会为 Cloud Build 服务帐号授予以下角色,以使其能够将映像导入 Compute Engine 中:

  • roles/iam.serviceAccountTokenCreator
  • roles/compute.admin
  • roles/iam.serviceAccountUser

启用 Stackdriver Logging 以审核日志记录

如果许可要求报告物理服务器用量,请先启用 Stackdriving Logging API,然后再将虚拟机启动到单租户节点。如此您便能够使用 BigQuery(强烈推荐)导入和查看服务器用量信息。

启用 Stackdriver Logging API

通过设置日志记录,您可以利用 BigQuery 来跟踪相关信息(例如物理核心数用量),以满足您的许可需求。如需了解详情,请参阅确定服务器用量

创建虚拟磁盘文件

您必须已有一个虚拟磁盘文件(VMDK、VHD)才能将映像导入 Compute Engine 中。您不能通过安装映像(例如 iso、img、DVD、USB 等)将操作系统直接安装到虚拟机上,也不能在 Compute Engine 虚拟机上进行就地操作系统升级。

创建虚拟磁盘文件的步骤因环境而异;请参阅与您的操作系统对应的文档。

导入虚拟磁盘文件

要使用您自己的许可启动虚拟机,您需要导入一个包含您要使用的操作系统的虚拟磁盘。您可以使用 gcloud 命令行工具导入您的文件;gcloud 工具支持从 Cloud Storage 存储分区或本地工作站导入 VHD 或 VMDK。如果虚拟磁盘托管在本地机器上,则导入过程会先将文件上传到 Cloud Storage 存储分区,然后再将映像导入到 Compute Engine 中。

在导入虚拟机的磁盘之前,请先下载我们的预检工具并在虚拟机内部运行该工具。此预检工具可帮助验证在迁移到 Google Cloud 时是否存在不兼容情况

如需全面了解映像导入工具,请参阅导入虚拟磁盘

准备就绪后,请运行以下 gcloud 命令来导入您的虚拟磁盘:

gcloud compute images import [IMAGE_NAME] \
    --source-file [SOURCE_FILE] \
    --os [OS]

其中:

  • [IMAGE_NAME] 是您要为此映像指定的名称。
  • [SOURCE_FILE] 是一个虚拟磁盘文件,可以托管在本地,也可以存储在 Cloud Storage 中。如果您的虚拟磁盘是本地文件,您可以使用绝对路径或相对路径。如果您的虚拟磁盘文件已存储在 Cloud Storage 中,则该文件必须位于同一项目中要用于导入过程的存储分区内,并且您必须按 gs://[BUCKET_NAME]/[OBJECT_NAME] 格式指定该文件的完整路径。

  • [OS]SOURCE_FILE 的 Windows 操作系统。支持的 Windows 操作系统如下:

    • windows-2008r2-byol
    • windows-2012-byol
    • windows-2012r2-byol
    • windows-2016-byol
    • windows-2019-byol
    • windows-7-byol
    • windows-8-1-x64-byol
    • windows-10-byol

请注意,Cloud Storage 中存储的文件和 Compute Engine 中的映像会产生费用。在确认映像已正确导入并且已作为 Compute Engine 实例正常启动后,您可以从 Cloud Storage 中删除虚拟磁盘文件。

如果为 --source-file 指定了本地文件,则上传操作可能需要运行几十分钟,具体取决于虚拟磁盘的大小和网络连接的速度。

创建映像后,您可以使用 IAM 角色或权限与项目或组织外部的用户共享该映像

gcloud projects add-iam-policy-binding [PROJECT_ID] \
    --member user:[USER_EMAIL] \
    --role roles/compute.imageUser

在这种情况下,[PROJECT_ID] 是您要授予其访问权限的映像所属的项目。

然后,用户就可以通过在其请求中指定该映像所属项目的 ID 来访问该映像。例如:

gcloud compute instances create my-vm \
    --custom-cpu 4 \
    --custom-memory 8 \
    --image https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images/[IMAGE_NAME] \
    --zone us-central1-a \
    --node-affinity-file node-affinity-prod.json \
    --restart-on-failure \
    --maintenance-policy terminate

使用您自己的许可启动虚拟机实例

导入映像后,您可以使用导入的映像在单租户节点上启动虚拟机实例,并指定 restart-node-on-minimal-servers 属性以启用就地重启功能。该属性可确保在发生维护事件时虚拟机尽可能在同一物理服务器上重启。如果同一物理服务器不可用,则系统将创建新的物理服务器并将其添加到节点组中。Compute Engine 会报告新服务器的 ID。

如果根据许可和产品条款的性质,物理核心或套接字用量对于 BYOL 工作负载无关紧要,您可以仅使用单租户节点,而省略就地重启功能。这可确保您的虚拟机实例位于专用硬件上,但无法最大限度减少所用底层物理服务器的数量。

请按照以下步骤启动您的虚拟机实例(详细说明如下):

  1. 使用 Google Cloud Console、gcloud 命令行工具或 API 创建节点模板,并根据需要启用就地重启功能。

  2. 使用新模板创建节点组。

  3. 最后,在该节点组中使用导入的映像创建虚拟机。

在节点上调度多个虚拟机后,这些虚拟机会在发生重启和维护事件时遵循相同的物理相似性标签。这意味着,虽然底层物理服务器可能会变更,但您可以使用标签选择器来确保某些虚拟机始终位于相同节点(具有对应的节点相似性)或永不共用同一节点(节点反相似性)。

为方便起见,系统会自动向配置了 restart-node-on-minimal-servers 选项的所有单租户节点额外添加一个相似性标签,该标签类似于节点名称和节点组名称。您可以将此标签添加到相似性文件中,以确保您的虚拟机仅在启用了 restart-node-on-minimal-server 功能的节点上启动。该标签如下所示:

  • 键:compute.googleapis.com/node-server-binding-type
  • 值:restart-node-on-minimal-server

控制台

  1. 创建节点模板,并将重启选项设置为最少数量的服务器。

    1. 转到创建节点模板页面。

      转到“创建节点模板”页面

    2. 为该模板输入一个名称。
    3. 指定要在其中运行您的节点组的区域。
    4. 指定您的节点组要使用的节点类型。 或者,您可以指定最小可用节点,以允许节点组在任何可用节点类型上运行。
    5. 根据需要为实例指定节点相似性标签。例如,您可以指定 workload=front-endenvironment=prod 标签。
    6. 展开高级节点重启配置
    7. 选择最少数量的服务器
    8. 创建您的节点模板。
  2. 使用节点模板预配节点组。

    1. 转到创建节点组页面。

      转到“创建节点组”页面

    2. 为该节点组输入一个名称。
    3. 指定要在其中运行您的节点组的地区。您必须在同一区域中拥有节点模板。
    4. 指定要使用的节点模板。
    5. 指定要在该节点组中运行的节点数。您可在稍后更改此数量。
    6. 点击创建以完成节点组的创建。
  3. 创建在节点组中或特定节点上运行的实例。 如果您使用了特定节点相似性标签,则可以按照常规流程创建实例,并在单独租用设置下指定节点相似性。在本示例中,请直接在节点组详情页面中创建实例。

    1. 转到单租户节点页面。

      转到“单租户节点”页面

    2. 点击要在其中创建实例的节点组的名称。
    3. 点击创建实例以在此节点组中的任意位置创建实例。如果希望实例在组中的特定节点上运行,请点击该组中单个节点的名称以查看该节点的详细信息。然后,点击创建实例以在该个别节点上创建实例。
    4. 为您的实例配置设置。由于您已选择节点组或特定节点,因此系统将为您指定区域、地区和默认节点相似性标签。
    5. 选择管理标签页。
    6. 可用性政策 > 主机维护期间下,选择终止。

    7. 自动重启下,选择启用(推荐)。

    8. 点击创建以完成实例的创建。

gcloud

  1. 创建节点模板并设置 restart-node-on-minimal-servers 标志。根据需要为实例选择节点相似性标签。 例如:

    gcloud compute sole-tenancy node-templates create my-node-template \
        --node-type n1-node-96-624 \
        --region us-east1 \
        --node-affinity-labels workload=front-end,environment=prod \
        --server-binding restart-node-on-minimal-servers
    
  2. 使用节点模板预配节点组。例如,以下命令会使用在上一步中创建的节点模板创建一个由两个实例组成的实例组:

     gcloud compute sole-tenancy node-groups create my-node-group \
         --node-template my-node-template \
         --target-size 2 \
         --zone us-east1-b
    
  3. 创建节点相似性文件,其中包含节点组的对应相似性标签。这可确保仅在包含所有这些标签的节点上创建您的虚拟机。例如:

     // CREATE AFFINITY LABEL FILE
     cat > node-affinity-prod.json
     [{
       "key" : "workload",
       "operator" : "IN",
       "values" : ["front-end"]
       },
       {
       "key" : "environment",
       "operator" : "IN",
        "values" : ["prod"]
      },
      {
        "key" : "compute.googleapis.com/node-server-binding-type",
        "operator" : "IN",
        "values" : "restart-node-on-minimal-server"
      }]
    
  4. 启动虚拟机实例并指定相似性标签文件。例如,以下请求会使用导入的映像在 us-east1-b 地区中创建一个配备 4 个 CPU 和 8 GB 内存的虚拟机。此外,该请求还会设置 --restart-on-failure- 标志和 terminate 维护政策,这是使用您自己许可的虚拟机目前接受的唯一政策。

     gcloud compute instances create my-vm \
         --custom-cpu 4 --custom-memory 8 \
         --image my-imported-image \
         --zone us-east1-b \
         --node-affinity-file node-affinity-prod.json \
         --restart-on-failure --maintenance-policy terminate
    

API

  1. 创建节点模板并设置 RESTART_NODE_ON_MINIMAL_SERVERS 属性。同时为您的实例选择节点相似性标签。例如:

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/nodeTemplates
    
    {
       "name": "[TEMPLATE_NAME]",
       "nodeType": "[NODE_TYPE]"
       "nodeAffinityLabels": {
          "[KEY]": "[VALUE]"
       },
       "serverBinding":
       {
         "type": "RESTART_NODE_ON_MINIMAL_SERVERS"
       }
    }
    

    其中:

    • [PROJECT_ID] 是您的项目 ID。
    • [TEMPLATE_NAME] 是新节点模板的名称。
    • [NODE_TYPE] 是要用于此模板的节点类型。例如,您可以指定 n1-node-96-624 节点类型来创建配备 96 个 vCPU 和 624 GB 内存的节点。
    • [KEY]:[VALUE] 是以英文逗号分隔的相似性标签列表。
    • [REGION] 是此模板要用于的区域。
  2. 创建节点模板后,请创建节点组。使用 compute.nodeGroups.insert 方法:

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/nodeGroups?initialNodeCount=[TARGET_SIZE]
    
    {
     "nodeTemplate": "regions/[REGION]/nodeTemplates/[TEMPLATE_NAME]",
     "name": "[GROUP_NAME]"
    }
    

    其中:

    • [PROJECT_ID] 是您的项目 ID。
    • [ZONE] 是此节点组所在的地区。此地区必须与您使用的节点模板位于同一区域。
    • [TARGET_SIZE] 是您要在该节点组中创建的节点数。
    • [REGION] 是节点模板所在的区域。
    • [TEMPLATE_NAME] 是新节点模板的名称。
    • [GROUP_NAME] 是新节点组的名称。
    • [TEMPLATE_NAME] 是您要用于创建此节点组的节点模板的名称。
  3. 创建节点组后,您可以使用 compute.instances.insert 方法在该节点组中创建实例。请指定 nodeAffinities 条目,使其指向您的节点组名称。例如,您可以创建运行自定义机器类型的实例:

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances
    
    {
     "machineType": "zones/[ZONE]/machineTypes/custom-[VCPUS]-[MEMORY]",
     "name": "[INSTANCE_NAME]",
     "scheduling": {
      "nodeAffinities": [
       {
        "key": "compute.googleapis.com/node-server-binding-type",
        "operator": "IN",
        "values": [
         "restart-node-on-minimal-server"
        ]
       }
      ]
     },
     "networkInterfaces": [
      {
       "network": "global/networks/[NETWORK]",
       "subnetwork": "regions/[REGION]/subnetworks/[SUBNETWORK]"
      }
     ],
     "disks": [
      {
       "boot": true,
       "initializeParams": {
        "sourceImage": "projects/[IMAGE_PROJECT]/global/images/family/[IMAGE_FAMILY]"
       }
      }
     ]
    }
    

    其中:

    • [PROJECT_ID] 是您的项目 ID。
    • [INSTANCE_NAME] 是新实例的名称。
    • [ZONE] 是您的节点组所在的地区。
    • [REGION] 是节点模板和您的子网所在的区域。
    • [IMAGE_FAMILY] 是一种可用的映像系列。
    • [IMAGE_PROJECT] 是该映像系列所属的映像项目。
    • [GROUP_NAME] 是您要在其中查找此实例的节点组的名称。
    • [VCPUS] 是要用于此实例的 vCPU 数量。
    • [MEMORY] 是此实例所需的内存量(以 MB 为单位)。例如,您可以将其指定为 5376MB
    • [NETWORK] 是您要将您的实例连接到的网络的名称。
    • [SUBNETWORK] 是您要将您的实例连接到的子网的名称。

后续步骤

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

发送以下问题的反馈:

此网页
Compute Engine 文档