自备许可


本文档介绍了 Google Cloud 如何支持在 Compute Engine 中使用具有专用硬件要求的自带许可 (BYOL)。在尝试将具备现有许可的映像引入 Google Cloud 之前,请查看您的许可条款及条件。

如果自带具有专用硬件要求的现有物理核心或物理处理器许可,则需要您自带媒体,并在与您的许可相符的硬件配置(例如单租户节点)上运行该媒体。您可以在任何支持单租户节点的地区中引入具备现有许可的映像;虽然您无需为引入具备现有许可的映像支付额外的费用,但仍必须根据您的协议支付许可费用。

单租户节点是物理服务器,专门用于为项目托管虚拟机 (VM) 实例。您可以配置单租户节点来支持各种工作负载要求,例如最大限度地减少物理服务器和核心数量的要求。请参阅您的许可协议,以确定哪些配置选项最适合您的工作负载。

为了支持自带许可并帮助您管理与您的许可相关的合规性要求,Google Cloud 提供了执行以下操作的相应工具:导入映像,使用单租户节点管理专用硬件上的虚拟机,最大限度地减少物理核心使用量,以及跟踪物理核心使用量以用于报告。

如需将具备现有许可的映像引入 Google Cloud,您必须执行以下操作:

  1. 根据您的许可协议准备映像。

  2. 激活您的许可。

  3. 导入虚拟磁盘文件并通过这些磁盘文件创建映像。

  4. 创建单租户节点模板。

  5. 根据节点模板创建单租户节点组。

  6. 使用导入的虚拟磁盘文件在该节点组上预配虚拟机。

  7. 跟踪虚拟机的许可使用情况。为了帮助您报告许可使用情况,Google 提供了一些工具来帮助您跟踪许可使用情况以及物理核心和处理器使用情况

  8. 向您的供应商报告许可使用情况。

如果您需要支持服务或对许可有疑问,请联系您的许可转销商。如果您需要支持服务或对将具备现有许可的映像引入 Google Cloud 有疑问,请联系 Google Cloud 支持团队

此外,有一些许可场景(例如与具有 RHEL 和 SLES 的 Linux BYOS 相关的许可以及 Microsoft 应用)不需要单租户节点。如果您正在考虑自备来自 Microsoft 应用(例如 SharePoint Server 和 SQL Server)的许可,请使用 Microsoft 许可移动性

准备工作

  1. 查看节点组维护政策

  2. 申请更多 CPU 配额:新项目获得的 CPU 配额为 72。请确保您有足够的 CPU 配额来支持您的节点组。例如,n1-node-96-624 节点类型包含 96 个 CPU,如果节点组使用最少数量的节点 (2),则 CPU 配额必须至少为 192。根据您的设置和工作负载的需求,您可能还需要为虚拟机或 IP 地址请求配额调整。

  3. 启用 Cloud Build API:您必须启用 Cloud Build API,才能导入操作系统映像。启用此 API 时,Compute Engine 会向您的项目授予相应的 IAM 角色,以便您可以将映像导入项目。要列出向您的项目授予的角色,请使用 gcloud projects get-iam-policy 命令。如需了解如何向您的项目授予角色,请参阅管理对 Compute Engine 资源的访问权限

  4. 启用 Cloud Logging API:如果您的许可协议要求您跟踪物理服务器使用情况,请启用此 API。启用此 API 后,您可以使用 BigQuery(Google 强烈推荐)导入和查看服务器使用情况信息,例如物理核心数。如需了解如何确定物理核心数,请参阅分析单租户节点使用率

通过离线虚拟磁盘导入和创建映像

如需为虚拟机预配您的现有许可,您必须自备媒体。 基于 Google Cloud 付费映像的映像不符合自备许可 (BYOL) 的条件,因为付费映像需要 Google 的随用随付许可。

如果您的本地环境中已有包含您所需软件配置或许可的虚拟磁盘(黄金磁盘或黄金映像),则导入虚拟磁盘工具可帮助您执行以下操作:

  1. 使用受支持的操作系统导入自定义虚拟磁盘,并根据这些磁盘创建映像。

  2. 设置适当的许可配置。

  3. 安装与 Google Cloud 兼容所需的软件包和驱动程序。

在为虚拟机导入虚拟磁盘文件之前,请从虚拟机内下载并运行预检工具,以确认文件中不存在不兼容性。此外,由于来自第三方的软件可能会干扰 Compute Engine 驱动程序的安装,因此 Google 建议您在导入映像前先移除第三方软件。

要使用您自己的许可启动虚拟机,请导入一个包含您要使用的操作系统的虚拟磁盘。您可以从 Cloud Storage 存储分区和本地工作站导入虚拟磁盘。从本地工作站导入虚拟磁盘文件时,映像导入工具会将映像文件上传到 Cloud Storage,并在必要时创建新的 Cloud Storage 存储分区。然后,导入工具会将该映像文件复制到 Compute Engine 并通过虚拟磁盘文件创建可启动映像。

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

控制台

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

    转到“映像”

  2. 点击创建映像

  3. 为映像指定名称。

  4. 来源下,选择虚拟磁盘(VMDK、VHD)

  5. Cloud Storage 文件下,选择浏览并浏览到要导入的映像的 Cloud Storage 位置。

  6. 虚拟磁盘上的操作系统下,选择要导入的映像的操作系统。

  7. 确保安装客机软件包处于选中状态,以便要导入的映像可启动。

  8. 展开许可密钥选项。在操作系统许可下,选择使用您自己的许可密钥

  9. 点击创建以导入映像。

gcloud

运行 gcloud compute images import 可以导入虚拟磁盘文件并通过该虚拟磁盘文件创建磁盘映像:

gcloud compute images import IMAGE_NAME \
    --source-file VMDK_NAME \
    --os OS

请替换以下内容:

  • IMAGE_NAME:为通过虚拟磁盘文件创建的映像指定的名称。
  • VMDK_NAME:要用于导入和创建映像的虚拟磁盘的名称。您可以从以下位置导入 VMDK 文件:

    • 本地文件:如果要从本地文件导入,请使用该文件的绝对路径或相对路径。根据虚拟磁盘的大小和网络连接的速度,上传操作可能需要运行几十分钟。
    • Cloud Storage:如果从 Cloud Storage 导入,Cloud Storage 存储分区必须属于您要用于导入虚拟磁盘的项目,并且您必须将文件的完整路径指定为 gs://BUCKET_NAME/OBJECT_NAME。将 BUCKET_NAME 替换为 Cloud Storage 存储分区的名称,将 OBJECT_NAME 替换为 Cloud Storage 对象的名称。
  • OS:磁盘映像的操作系统。必须是受支持的操作系统

激活许可

在确认您导入的是兼容的操作系统后,您需要负责检查您的许可协议是否允许您自带许可,以及您是否有权使用 Google 提供的客机操作系统映像和许可导入环境。此外,您还需要负责根据您的许可协议为导入操作准备客机操作系统映像。

如需激活许可,请使用启动脚本和激活密钥,或者设置 Cloud Key Management Service。您无法依靠 Compute Engine 许可服务器来使用现有的许可激活映像。

导入映像并激活许可后,请根据导入的映像将虚拟机预配到单租户节点上。

创建单租户节点模板

导入映像后,创建单租户节点模板。您将使用此节点模板创建在其中运行映像的单租户节点组。

节点模板页面不会列出模板的区域和可用区,但节点组必须在您创建节点模板的区域内的可用区中创建。要创建模板,必须先创建节点组,但只需完成选择区域和可用区的步骤。之后,您可以根据需要创建模板,而无需继续创建节点组。

您可以在创建模板时在单租户节点模板中设置节点亲和性标签。

控制台

  1. 在 Google Cloud Console 中,转到单租户节点页面。

    转到“单租户节点”

  2. 点击创建节点组

  3. 为节点组输入名称

  4. 为节点组选择区域可用区

    记下您使用的区域和可用区。当您稍后创建基于此节点模板的节点组时,节点组必须位于您创建节点模板的区域内的可用区中。

  5. 节点模板属性下,选择创建节点模板

  6. 创建节点模板对话框中,指定名称节点类型本地 SSDGPU 加速器

  7. CPU 过度使用下,选择是否启用 CPU 过度使用。

  8. 可选:在亲和性标签下,点击添加亲和性标签,将键值对添加为节点亲和性标签

  9. 点击创建以完成节点模板的创建。

  10. 点击取消以取消创建节点组。

gcloud

使用 gcloud compute sole-tenancy node-templates create 可以创建单租户节点模板。

gcloud compute sole-tenancy node-templates create TEMPLATE_NAME \
    --node-type NODE_TYPE \
    --region REGION

替换以下内容:

  • TEMPLATE_NAME:要创建的节点模板的名称。
  • NODE_TYPE:节点组中的节点的单租户节点类型。节点组中的所有节点都相同,并通过节点模板指定的参数创建。
  • REGION:要在其中创建节点模板的地区。

API

使用 nodeTemplates.insert 可以创建单租户节点模板。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/nodeTemplates

{
   "name": "TEMPLATE_NAME",
   "nodeType": "NODE_TYPE"
   "nodeAffinityLabels": {
      "KEY": "VALUE"
   }
}

请替换以下内容:

  • PROJECT_ID:您的项目的 ID。
  • REGION:要在其中创建节点模板的地区。
  • TEMPLATE_NAME:要创建的节点模板的名称。
  • NODE_TYPE:节点组中的节点的单租户节点类型。节点组中的所有节点都相同,并通过节点模板指定的参数创建。
  • "KEY": "VALUE":以英文逗号分隔的亲和性标签(表示为键值对)列表。您只能在创建节点模板时为节点模板指定亲和性标签。

创建单租户节点组

如需根据节点模板创建节点组,节点组必须位于您创建节点模板的区域内的可用区中。单租户节点组会继承单租户节点模板指定的属性。单租户节点组具有您必须指定的其他值。

控制台

  1. 在 Google Cloud Console 中,转到单租户节点页面。

    转到“单租户节点”

  2. 点击创建节点组

  3. 节点组属性下,输入节点组的名称

  4. 为节点组选择区域可用区

    如果您在该区域或可用区有可用的模板,则在您点击继续后,模板将列在节点模板属性下。

  5. 点击继续

  6. 节点模板属性下,选择作为节点组的基础的节点模板。节点组必须位于您创建节点模板的区域中,因此,在为节点组选择模板时,请从您要创建节点组的可用区所属的区域内选择模板。如果不存在节点模板,您可以创建一个

  7. 点击继续

  8. 配置自动扩缩下,将自动扩缩模式设置为下列值之一。如需了解详情,请参阅自动扩缩节点组

    • 开启:让系统自动向节点组添加节点或从中移除节点。
    • 仅横向扩容:在需要额外容量时向节点组添加节点。
    • 关闭:手动管理节点组的大小。
  9. 指定节点组的节点数下限。如果您启用了节点组自动扩缩器,请指定节点组的大小范围(最小和最大节点数),或指定该组的节点数。您可以稍后手动更改任一值。

  10. 点击继续

  11. 可选:在配置维护设置下,将维护政策设置为以下值之一。借助维护政策,您可以配置节点组上的虚拟机在主机维护事件期间的行为。如需了解详情,请参阅维护政策

    • 默认
    • 就地重新启动
    • 在节点组内迁移
  12. 点击创建

gcloud

使用 gcloud compute sole-tenancy node-groups create命令 可以创建单租户节点组。

gcloud compute sole-tenancy node-groups create GROUP_NAME \
    --node-template TEMPLATE_NAME \
    --target-size GROUP_SIZE \
    --zone ZONE \
    --maintenance-policy MAINTENANCE_POLICY

替换以下内容:

  • GROUP_NAME:要创建的单租户节点组的名称。
  • TEMPLATE_NAME:要根据其创建节点组的节点模板的名称。
  • GROUP_SIZE:节点组的初始大小。节点组自动扩缩器会自动管理单租户节点组的大小,您也可以手动管理大小。
  • ZONE:要在其中创建节点组的区域。此项必须与节点模板位于同一区域。
  • MAINTENANCE_POLICY:节点组的维护政策。将维护政策设为以下某个值。如果未设置任何值,则使用 default 作为维护政策。

    • default
    • migrate-within-node-group
    • restart-in-place

API

使用 nodeGroups.insert 可以创建单租户节点组。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/nodeGroups?initialNodeCount=GROUP_SIZE

{
  "nodeTemplate": "/regions/REGION/nodeTemplates/TEMPLATE_NAME",
  "name": "GROUP_NAME",
  "maintenancePolicy": "MAINTENANCE_POLICY"
}

替换以下内容:

  • PROJECT_ID:要在其中创建节点组的项目的 ID。
  • ZONE:要在其中创建节点组的区域。此项必须与节点模板位于同一区域。
  • GROUP_SIZE:节点组的初始大小。节点组自动扩缩器会自动管理单租户节点组的大小,您也可以手动管理大小。
  • REGION:节点模板所在的地区。
  • TEMPLATE_NAME:要根据其创建节点组的节点模板的名称。
  • GROUP_NAME:要创建的单租户节点组的名称。
  • MAINTENANCE_POLICY:节点组的维护政策。将维护政策设为以下某个值。如果未设置任何值,则使用 DEFAULT 作为维护政策。

    • DEFAULT
    • RESTART_IN_PLACE
    • MIGRATE_WITHIN_NODE_GROUP

预配单租户虚拟机

在节点组上预配虚拟机,并指定虚拟机的重启行为。如果您之前指定了节点组在维护事件期间重启同一节点组中托管的虚拟机,则在该节点组上创建新虚拟机实例时,指定新虚拟机执行以下操作之一:

  • 因维护事件在重启后迁移。
  • 停止虚拟机,然后在同一主机上重启。如果同一主机不可用,则预配新服务器,并且不重复使用之前主机的物理 ID。

控制台

如果您在模板中有节点亲和性标签,则可以使用代管式实例组 (MIG) 创建多个虚拟机,并在单租户节点设置下指定节点亲和性标签,或者通过节点组详细信息页面创建各个虚拟机:

  1. 在 Google Cloud Console 中,转到单租户节点页面。

    转到“单租户节点”

  2. 点击要在其中预配虚拟机的节点组的名称

  3. 通过执行以下操作之一可以在单租户节点上创建虚拟机:

    • 如需在单租户节点组中的任意位置创建虚拟机,请点击创建实例
    • 如需在特定单租户节点上创建虚拟机,请点击单租户节点组的名称,然后点击单租户节点的名称,再点击创建实例
  4. 配置单租户虚拟机。由于您已选择节点组或特定节点,因此区域可用区节点亲和性标签已经由模板指定。

  5. 通过指定机器系列系列机器类型来选择机器配置。选择与单租户节点类型对应的系列

  6. 为单租户虚拟机选择启动磁盘,即之前导入的虚拟磁盘映像。

  7. 选择管理标签页:

    • 可用性政策 > 主机维护时下,选择虚拟机的重启行为。
    • 自动重启下,选择启用(推荐)停用
  8. 点击创建

gcloud

使用 gcloud compute instances create 命令可以在单租户节点组上预配单租户虚拟机。

gcloud compute instances create VM_NAME \
    --machine-type MACHINE_TYPE
    --image IMAGE_NAME \
    --zone ZONE \
    --node-group GROUP_NAME \
    RESTART_BEHAVIOR \
    --maintenance-policy MAINTENANCE_POLICY

替换以下内容:

  • VM_NAME:要创建的虚拟机的名称。
  • MACHINE_TYPE:新虚拟机的机器类型。
  • IMAGE_NAME:要用于创建虚拟机的映像。 这是在导入过程中创建的映像。
  • ZONE:要在其中创建虚拟机的地区。
  • GROUP_NAME:要在其中预配虚拟机的节点组的名称。
  • RESTART_BEHAVIOR:此虚拟机的重启行为。将重启行为设为以下某个值:

    • --restart-on-failure
    • --no-restart-on-failure
  • MAINTENANCE_POLICY:维护事件期间的虚拟机行为。将维护政策设为以下某个值:

    • MIGRATE
    • TERMINATE

API

使用 instances.insert 方法可以在单租户节点组上预配单租户虚拟机。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/VM_ZONE/instances

{
  "name": "VM_NAME",
  "machineType": "/zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "scheduling": {
    "nodeAffinities": [
      {
        "key": "node-group",
        "operator": "IN",
        "values": [
        "GROUP_NAME"
        ]
      }
    ],
    "onHostMaintenance": "MAINTENANCE_POLICY",
    "automaticRestart": "AUTOMATIC_RESTART"
  },
  "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。
  • VM_ZONE:要在其中创建虚拟机的区域。
  • VM_NAME:新虚拟机的名称。
  • MACHINE_TYPE_ZONE:机器类型所在的区域。
  • MACHINE_TYPE:要在其中预配虚拟机的机器类型。
  • GROUP_NAME:要在其中预配虚拟机的节点组的名称。
  • MAINTENANCE_POLICY:维护事件期间的虚拟机行为,设置为 MIGRATETERMINATE
  • AUTOMATIC_RESTART:指定在 Compute Engine 停止虚拟机时,虚拟机是否自动重启。默认值为 true
  • NETWORK:虚拟机所连接网络的名称。
  • SUBNETWORK:虚拟机所连接子网的名称。
  • IMAGE_PROJECT:来源映像所属的映像项目。
  • IMAGE_FAMILY:来源映像的映像系列。

后续步骤