创建单租户节点

创建单租户节点,以物理方式分离您的实例与其他项目的实例。每个节点都与一个物理服务器相关联,并且是该服务器上运行的唯一节点。在您的节点内,您可以运行各种大小的多个实例,而无需与其他项目共享主机硬件。节点可以实时迁移到全新的主机系统,并且无需停止它们的主机虚拟机实例。

阅读单租户节点价格了解如何计算单租户节点的价格和折扣。

阅读单租户节点概览以了解单租户节点的优势、用例和功能。

准备工作

限制

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

创建和使用单租户节点

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

  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": "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.instancetempates.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": "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] 是要用于创建此组的实例模板的名称。模板必须具有指向所需节点组的节点相似性。

配置节点相似性

节点相似性确定了您的实例和托管实例组用作主机系统的节点。默认情况下,每个节点都具有以下相似性标签:

  • 组中的每个节点都具有一个与节点组名称匹配的相似性标签:
    • 键: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 node-groups create production-group \
        --node-template production-template --target-size 5 --zones us-west1-b
    
    gcloud compute node-groups create development-group-east1 \
        --node-template development-template --target-size 1 --zones us-east1-d
    
    gcloud compute 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 相似性的节点组上运行。

  6. 对于开发实例,请创建 node-affinity-dev.json 文件,以更清晰地指明您希望开发实例上的相似性如何运行。例如,您可以创建一个文件,该文件可将实例配置为在具有 workload=frontend 相似性的任何节点组上运行(只要相似性不是 environment=prod):

    [{
    "key" : "workload",
    "operator" : "IN",
    "values" : ["frontend"]
    },
    {
    "key" : "environment",
    "operator" : "NOT",
    "values" : ["prod"]
    }
    ]
    
  7. 对于开发,您可以创建单个实例来进行测试(而不是整个实例组)。使用 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 文档