创建单租户节点

单租户节点是物理服务器,专门用于托管特定项目的虚拟机实例。在单租户节点上托管您的虚拟机可确保您的虚拟机实例不与其他项目中的虚拟机实例共享物理硬件。如需详细了解单租户节点的工作方式,请参阅单租户节点概览页面。

您可以创建由多个节点组成的节点组。一个节点组可以包含各种大小的实例,这些实例全都与其他项目隔离。您可以设置节点相似性,以确保虚拟机实例在特定节点组中运行。

如需了解如何计算单租户节点的价格和折扣,请参阅单租户节点价格

准备工作

限制

在创建和使用单租户节点之前,请查看单租户节点概览的限制部分。

创建和使用单租户节点

通常,在单租户节点上创建实例需要以下流程:

  1. 创建节点模板,该模板指定了节点类型或 vCPU 和内存要求。另外,请指定区域和可选的节点相似性标签。创建虚拟机时,您可以指定虚拟机仅在与节点相似性标签匹配的节点上运行。
  2. 使用模板创建包含一个或多个单租户节点的节点组。当您不再需要节点时,可以将节点数量减少为零。
  3. 在节点组上创建实例:
    • 使用任何预定义的机器类型或自定义机器类型在节点组上创建各个虚拟机实例。机器类型必须具有两个或更多 vCPU。
    • 使用实例模板在节点组上创建托管实例组。虽然自动调节程序可以控制节点上的托管实例组的大小,但自动调节程序无法控制节点组的大小。

创建节点组和实例

创建节点模板,为节点组中的节点定义属性。创建模板后,请使用该模板创建一个或多个节点组。然后,在这些节点组上创建新实例。

Console

使用 Google Cloud Platform Console 创建节点及其实例:

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

    转到“单租户节点”页面。

  2. 点击创建节点模板以开始创建节点模板。
  3. 指定要在其中运行节点组的区域。
  4. 指定您希望节点组使用的节点类型。或者,您可以指定最小可用节点,以允许节点组在任何可用节点类型上运行。
  5. 或者,您可以添加节点相似性标签,以定义哪些实例自动在节点组上自行调度。如果将相似性标签留空,您仍可以按节点组名称或稍后按单个节点名称在节点组上调度实例。
  6. 点击创建以完成节点模板的创建。

使用节点模板创建节点组。

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

    转到“单租户节点”页面。

  2. 点击创建节点组以开始创建节点组。
  3. 指定要在其中运行节点组的地区。您必须在同一区域中拥有节点模板。
  4. 指定要使用的节点模板。
  5. 指定要在组中运行的节点数。稍后您可以更改此数量。
  6. 点击创建以完成节点组的创建。

创建在节点组中或特定节点上运行的实例。如果您使用了特定节点相似性标签,则可以按照常规流程创建实例,并在单独租用设置下指定节点相似性。对于本示例,请直接在节点组详情页面中创建实例:

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

    转到“单租户节点”页面。

  2. 点击要在其中创建实例的节点组的名称。
  3. 点击创建实例以在此节点组中的任意位置创建实例。如果希望实例在组中的特定节点上运行,请点击该组中单个节点的名称以查看该节点的详细信息。然后,点击创建实例以在该节点上创建实例。
  4. 为您的实例配置设置。由于您已选择节点组或特定节点,因此系统将为您指定区域、地区和默认节点相似性标签。
  5. 点击创建以完成实例的创建。

gcloud

使用 gcloud 命令行工具创建节点及其实例:

  1. 使用 compute sole-tenancy node-types list 命令确定可供您使用的节点类型:

    gcloud compute sole-tenancy node-types list
    

    Compute Engine 会定期地将较旧的节点类型替换为较新的节点类型。替换节点类型后,您将可以使用旧的节点类型创建节点组,并且必须升级您的节点模板以使用新的节点类型。

  2. 使用 compute sole-tenancy node-templates create 命令创建新的节点模板。由于可用节点类型列表将随时间而发生变化,请配置节点模板以使用灵活的节点类型要求。例如,请指定 --node-requirements vCPU=any,memory=any,localSSD=0,它允许节点在没有本地 SSD 容量的任何可用节点类型上运行。

    gcloud compute sole-tenancy node-templates create [TEMPLATE_NAME] \
        --region [REGION] --node-requirements vCPU=any,memory=any,localSSD=0
    

    其中:

    • [TEMPLATE_NAME] 是新节点模板的名称。
    • [REGION] 是您将使用此模板的区域。

    或者,您可以选择要在模板中使用的特定节点类型。此模板灵活性较低,但可以确保仅当节点完全满足您的 vCPU 和系统内存要求时,方可创建节点。

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

    其中:

    • [TEMPLATE_NAME] 是新节点模板的名称。
    • [NODE_TYPE] 是要用于此模板的节点类型。例如,您可以指定 n1-node-96-624 节点类型以创建具有 96 个 vCPU 和 624 GB 内存的节点。
    • [REGION] 是您将使用此模板的区域。
  3. 创建节点模板后,请创建节点组。使用 compute sole-tenancy node-groups create 命令:

    gcloud compute sole-tenancy node-groups create [GROUP_NAME] --zone [ZONE] \
        --node-template [TEMPLATE_NAME] --target-size [TARGET_SIZE]
    

    其中:

    • [GROUP_NAME] 是新节点组的名称。
    • [ZONE] 是此节点组所在的地区。此地区必须与您使用的节点模板位于同一区域。
    • [TEMPLATE_NAME] 是您要用于创建此组的节点模板的名称。
    • [TARGET_SIZE] 是要在组中创建的节点数。
  4. 创建节点组后,您可以使用 compute instances create 命令在节点组中创建实例。请指定指向节点组名称的 --node-group 标志。例如,您可以创建运行自定义机器类型的实例:

    gcloud compute instances create [INSTANCE_NAME] --zone [ZONE] \
        --image-family [IMAGE_FAMILY] --image-project [IMAGE_PROJECT] \
        --node-group [GROUP_NAME] --custom-cpu [VCPUS] --custom-memory [MEMORY]
    

    其中:

    • [INSTANCE_NAME] 是新实例的名称。
    • [ZONE] 是节点组所在的地区。
    • [IMAGE_FAMILY]可用映像系列中的一种。
    • [IMAGE_PROJECT] 是该映像系列所属的映像项目
    • [GROUP_NAME] 是您要在其中查找此实例的节点组的名称。
    • [VCPUS] 是要用于此实例的 vCPU 数量。
    • [MEMORY] 是实例的内存量(以 256 MB 为增量)。例如,您可以指定 5.25GB5376MB

    (可选)您还可以在节点组中创建托管实例组。使用 instance-templates create 命令创建实例模板,并添加指向您的节点组名称的 --node-group 标志:

    gcloud compute instance-templates create [INSTANCE_TEMPLATE] \
        --image-family [IMAGE_FAMILY] --image-project [IMAGE_PROJECT] \
        --node-group [GROUP_NAME] \
        --custom-cpu [VCPUS] --custom-memory [MEMORY]
    

    其中:

    • [INSTANCE_TEMPLATE] 是新实例模板的名称。
    • [IMAGE_FAMILY]可用映像系列中的一种。
    • [IMAGE_PROJECT] 是该映像系列所属的映像项目
    • [GROUP_NAME] 是您要在其中查找此实例的节点组的名称。
    • [VCPUS] 是要用于此实例的 vCPU 数量。
    • [MEMORY] 是实例的内存量(以 256 MB 为增量)。例如,您可以指定 5.25GB5376MB

    使用 compute instance-groups managed create 命令创建实例组:

    gcloud compute instance-groups managed create [INSTANCE_GROUP_NAME] \
        --zone [ZONE] --size [SIZE] --template [INSTANCE_TEMPLATE]
    

    其中,您需要替换以下项:

    • [INSTANCE_GROUP_NAME] 是此实例组的名称。
    • [SIZE] 是要包含在此实例组中的虚拟机实例数。您的节点组必须具有足够的资源来容纳此托管实例组中的实例。
    • [INSTANCE_TEMPLATE] 是要用于创建此组的实例模板的名称。模板必须具有指向所需节点组的节点相似性。
    • [ZONE] 是节点组所在的地区。

API

使用 Compute Engine API 中的方法创建节点及其实例:

  1. 在 API 中,使用 compute.nodetypes.list 方法构造 GET 请求以检索可用节点类型的列表:

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/nodeTypes
    

    其中:

    • [PROJECT_ID] 是您的项目 ID。
    • [ZONE] 是要从中检索可用节点类型的地区。
  2. 构造针对 compute.nodetemplates.insert 方法的 POST 请求以创建新的节点模板。为获得最大的灵活性,请指定一个 nodeTypeFlexibility 属性并将 cpusmemory 值设置为 any,以允许节点可以在没有本地 SSD 容量的任何可用节点类型上运行。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/nodeTemplates
    
    {
     "name": "[TEMPLATE_NAME]",
     "nodeTypeFlexibility": {
      "cpus": "any",
      "memory": "any"
     }
    }
    

    其中:

    • [PROJECT_ID] 是您的项目 ID。
    • [REGION] 是要从中检索可用节点类型的地区。
    • [TEMPLATE_NAME] 是新节点模板的名称。

    或者,您可以选择要在模板中使用的特定节点类型。此模板灵活性较低,但可以确保仅当节点完全满足您的 vCPU 和系统内存要求时,方可创建节点。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/nodeTemplates
    
    {
     "name": "[TEMPLATE_NAME]",
     "nodeType": "[NODE_TYPE]"
    }
    

    其中:

    • [PROJECT_ID] 是您的项目 ID。
    • [TEMPLATE_NAME] 是新节点模板的名称。
    • [NODE_TYPE] 是要用于此模板的节点类型。例如,您可以指定 n1-node-96-624 节点类型以创建具有 96 个 vCPU 和 624 GB 内存的节点。
    • [REGION] 是您将使用此模板的区域。
  3. 创建节点模板后,请创建节点组。使用 compute.nodeGroups.insert 方法:

    POST https://www.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] 是您要用于创建此组的节点模板的名称。
  4. 创建节点组后,您可以使用 compute.instances.insert 方法在节点组中创建实例。指定指向节点组名称的 nodeAffinities 条目。例如,您可以创建使用自定义机器类型的实例:

    POST https://www.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-group-name",
        "operator": "IN",
        "values": [
         "[GROUP_NAME]"
        ]
       }
      ]
     },
     "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.instanceTemplates.insert 方法创建实例模板,并指定一个指向您的节点组名称的 nodeAffinities 条目:

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instance-templates
    
    {
    "name": "[TEMPLATE_NAME]",
    "properties": {
       "machineType": "custom-[VCPUS]-[MEMORY]",
       "name": "[INSTANCE_NAME]",
       "scheduling": {
        "nodeAffinities": [
         {
          "key": "compute.googleapis.com/node-group-name",
          "operator": "IN",
          "values": [
           "[GROUP_NAME]"
          ]
         }
        ]
       },
       "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] 是节点模板和子网所在的区域。
    • [TEMPLATE_NAME] 是新实例模板的名称。
    • [IMAGE_FAMILY]可用映像系列中的一种。
    • [IMAGE_PROJECT] 是该映像系列所属的映像项目
    • [GROUP_NAME] 是您要在其中查找此实例的节点组的名称。
    • [VCPUS] 是要用于此实例的 vCPU 数量。
    • [MEMORY] 是实例的内存量(以 MB 为单位)。例如,您可以将其指定为 5376MB
    • [NETWORK] 是要将实例连接到的网络的名称。
    • [SUBNETWORK] 是您要将该实例连接到的子网的名称。

    使用 compute.instanceGroupManagers.insert 方法创建实例组:

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers
    
    {
     "baseInstanceName": "default",
     "name": "[INSTANCE_GROUP_NAME]",
     "targetSize": [SIZE],
     "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE]"
    }
    

    其中:

    • [PROJECT_ID] 是您的项目 ID。
    • [ZONE] 是节点组所在的地区。
    • [INSTANCE_GROUP_NAME] 是此实例组的名称。
    • [BASE_INSTANCE_NAME] 是托管实例组中每个实例的前缀名称。
    • [SIZE] 是要包含在此实例组中的虚拟机实例数。您的节点组必须具有足够的资源来容纳此托管实例组中的实例。
    • [INSTANCE_TEMPLATE] 是要用于创建此组的实例模板的名称。该模板必须具有指向所需节点组的节点相似性。

单租户节点选项

下面介绍您可为节点模板指定的其他选项。

“最少数量的服务器”重启选项

设置此选项即指定:如果发生维护事件,系统将尽量在同一物理服务器上重启该节点组中的虚拟机。如果同一物理服务器不可用,则系统将创建新的物理服务器并将其添加到该节点组。

该选项与节点相似性标签有所不同,后者只是确保在具有特定标签的节点上创建某些虚拟机,但不会影响底层物理服务器在节点组的整个生命周期内是否保持不变。

如需指定此选项,请执行以下操作:

Console

“创建节点模板”页面上,展开高级节点重启配置并选择最少数量的服务器

gcloud

使用 gcloud 工具,在创建节点模板时指定 --server-binding restart-node-on-minimal-servers 标志。

API

发出直接 HTTP 请求来创建节点模板,同时提供 serverBinding 对象并将 type: restart-node-on-minimal-servers 字符串添加到该请求中:

{
  "serverBinding":
    {
      "type": "RESTART_NODE_ON_MINIMAL_SERVERS"
    }
}

配置节点相似性

您可以配置节点相似性或反相似性,以确定您的实例和托管实例组使用哪些节点作为主机系统。设置节点相似性时,您应明确选择哪些单租户节点托管哪些虚拟机。

默认情况下,系统会为每个节点分配以下相似性标签:

  • 节点组中的每个节点都具有一个与该节点组的名称匹配的相似性标签:
    • 键:compute.googleapis.com/node-group-name
    • 值:节点组的名称。
  • 每个节点都有一个与节点名称匹配的相似性标签。系统会自动生成节点名称:
    • 键:compute.googleapis.com/node-name
    • 值:具体节点的名称。

您可以配置其他相似性标签或反相似性标签,以使您的实例仅在您所需的节点组上运行,或仅与具有相同相似性的实例共享节点。这样,您就可以将所有敏感数据保存在特定节点组上,从而与 Compute Engine 上运行的其他节点组和其他虚拟机实例分离开来。

例如,如果您想要创建两个不同的节点组,以分别用于开发环境和生产工作负载,您可以按照以下流程进行操作:

  1. 使用两个不同的标签(workload=frontend,environment=prodworkload=frontend,environment=dev)创建两个节点模板。workload 标签用于指示这些节点组要用于 frontend 工作负载,而 environment 标签用于区分 prod 环境和 dev 环境:

    gcloud compute sole-tenancy node-templates create production-template \
       --node-requirements vCPU=any,memory=any,localSSD=0 --node-affinity-labels workload=frontend,environment=prod
    
    gcloud compute sole-tenancy node-templates create development-template \
       --node-requirements vCPU=any,memory=any,localSSD=0 --node-affinity-labels workload=frontend,environment=dev
    
  2. 使用生产和开发模板创建几个节点组。例如,您可能拥有一个大型生产节点组和多个较小的开发节点组。(可选)您可以在不同的地区中创建这些组,并让这些组具有不同的目标大小,以便适应工作负载的规模:

    gcloud compute sole-tenancy node-groups create production-group \
        --node-template production-template --target-size 5 --zones us-west1-b
    
    gcloud compute sole-tenancy node-groups create development-group-east1 \
        --node-template development-template --target-size 1 --zones us-east1-d
    
    gcloud compute sole-tenancy node-groups create development-group-east2 \
        --node-template development-template --target-size 1 --zones us-east1-d
    
  3. 对于生产实例,请创建 node-affinity-prod.json 文件,以更清晰地指明您希望生产实例上的相似性如何运行。例如,您可以创建一个文件,该文件指示实例仅在同时具有 workload=frontendenvironment=prod 相似性的节点上运行:

    [{
    "key" : "workload",
    "operator" : "IN",
    "values" : ["frontend"]
    },
    {
    "key" : "environment",
    "operator" : "IN",
    "values" : ["prod"]
    }
    ]
    
  4. 使用 node-affinity-prod.json 文件创建实例模板,使该模板具有要用于生产虚拟机实例的属性:

    gcloud compute instance-templates create production-template \
        --image-family production-images --image-project my-project \
        --node-affinity-file node-affinity-prod.json \
        --custom-cpu 3 --custom-memory 4096
    
  5. 使用生产节点上运行的生产模板启动实例组:

    gcloud compute instance-groups managed create production-group \
        --zone us-west1-b --size 4 --template production-template
    

    该实例组中的实例即会启动,并仅在具有 workload=frontendenvironment=prod 相似性的节点组上运行。

配置反相似性标签

上面的示例介绍了如何使用相似性标签。您还可以使用反相似性标签,以确保您的虚拟机避免使用具有特定标签的节点。假设除了上面创建的生产虚拟机实例之外,您还想要创建一些虚拟机实例来进行开发,但不希望将它们与生产实例托管在相同节点上。

  1. 对于开发实例,请创建 node-affinity-dev.json 文件,以更清楚地说明您希望在开发实例上执行相似性的方式。例如,您可以创建文件来将实例配置为在具有 workload=frontend 相似性(只要不具有 environment=prod 相似性即可)的任何节点组上运行:

    [{
    "key" : "workload",
    "operator" : "IN",
    "values" : ["frontend"]
    },
    {
    "key" : "environment",
    "operator" : "NOT",
    "values" : ["prod"]
    }
    ]
    
  2. 对于开发,您可以创建单独的实例来进行测试,而不需要创建整个实例组。使用 node-affinity-dev.json 文件创建该实例。例如,如果要测试名为 development-image-1 的特定开发映像,您可以使用以下命令创建实例并配置它的相似性:

    gcloud compute instances create dev-1 \
        --image development-image-1 --image-project my-project \
        --node-affinity-file node-affinity-dev.json \
        --custom-cpu 3 --custom-memory 4096 --zone us-east1-d
    

    此实例将启动,并仅在具有 workload=frontend 的节点组上运行。但是,它们不会在配置了 environment=prod 相似性的任何节点组上运行。

要创建您自己的相似性配置,请创建节点模板并使用您自己的相似性键和值运行节点。然后,使用您自己的 affinity.json 文件来配置实例,这些文件确定了您的实例可以在哪些节点上运行。

后续步骤

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

发送以下问题的反馈:

此网页
Compute Engine 文档