更新虚拟机租用


本页面介绍如何通过修改虚拟机的节点亲和性标签来更新虚拟机的租用。

默认情况下,Compute Engine 会将虚拟机部署在多租户主机。在多租户主机上,虚拟机通常会与其他项目和客户的虚拟机共享主机资源。将虚拟机迁移到单租户节点时,您的项目可独享并完全控制单租户节点硬件。您是该节点上的唯一租户,因此您的工作负载会与其他项目及其虚拟机的工作负载隔离开来。

通过修改节点亲和性标签,您可以通过以下方式迁移虚拟机:

  • 从多租户主机迁移到单租户节点组或节点
  • 从单租户节点组或节点迁移到多租户主机
  • 从一个单租户节点迁移到另一个单租户节点或节点组
  • 从单租户节点组迁移到其他单租户节点组或节点

将工作负载临时迁移到单独租用节点

由于工作负载的要求变化不定(例如需要定期进行进一步隔离以检查性能,或需要更改合规性规定),您可能需要暂时将特定工作负载迁移到单租户节点。然后,在不再需要单独租用时,将虚拟机重新部署到多租户主机。如果您修改虚拟机的租用,Compute Engine 会保留虚拟机的配置。

重新平衡单租户工作负载

除了将虚拟机迁入和迁出单租户节点和节点组之外,您还可以在节点和节点组之间迁移虚拟机,这有助于您整合节点并重新平衡工作负载。如果迁移虚拟机,则需要重启,因此请根据工作负载的可用性要求来计划迁移虚拟机。

限制

  • 当您迁移已在单租户节点上运行的虚拟机时,该虚拟机可能会在其他节点上重启。如果通过节点组名称或通过使用 node-group-name 默认亲和性标签来指定虚拟机的单独租用,则虚拟机可能会在节点组中的任何节点上重启。如果虚拟机的单独租用是通过相似性或反相似性自定义相似性标签来指定的,则虚拟机可能会在该地区中任何节点组的任何节点上重启。

准备工作

  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

将虚拟机迁移到单独租用节点

通过将虚拟机从其他节点或节点组或者从多租户主机迁移到特定单租户节点或节点组来更新租用。

gcloud

  1. 停止虚拟机。

    gcloud compute instances stop VM_NAME
    

    VM_NAME 替换为要停止的虚拟机的名称。

  2. 通过指定要向其中迁移虚拟机的节点组来更新租用。

    gcloud compute instances set-scheduling VM_NAME \
        --node-group=NODE_GROUP_NAME
    

    替换以下内容:

    • VM_NAME:要迁移到特定节点组的虚拟机的名称

    • NODE_GROUP_NAME:要向其中迁移虚拟机的节点组的名称

    或者,您也可以使用节点名称或使用亲和性标签将虚拟机迁移到单租户节点。如需了解详情,请参阅 gcloud compute instances set-scheduling 命令

  3. 启动虚拟机。

    gcloud compute instances start VM_NAME
    

    VM_NAME 替换为要在亲和性标签文件的内容先前指定的节点组上启动的虚拟机的名称。

REST

  1. 停止虚拟机。如需详细了解此命令,请参阅 instances.stop

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
    

    替换以下内容:

    • PROJECT_ID:包含要停止的虚拟机的项目 ID

    • ZONE:项目所在的区域

    • VM_NAME:要停止的虚拟机的名称

  2. 通过指定要向其中迁移虚拟机的节点组来更新租用。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
    
    {
      "nodeAffinities": [
        {
          "key": "compute.googleapis.com/node-group-name",
          "operator": "IN",
          "values": [
            "NODE_GROUP_NAME"
          ]
        }
      ]
    }
    

    替换以下内容:

    • PROJECT_ID:包含要迁移的虚拟机的项目 ID

    • ZONE:项目所在的区域

    • VM_NAME:要迁移到特定节点组的虚拟机的名称

    • NODE_GROUP_NAME:要向其中迁移虚拟机的节点组的名称

    或者,您也可以使用节点名称或使用亲和性标签将虚拟机迁移到单租户节点。如需了解详情,请参阅 instances.setScheduling 方法

  3. 启动虚拟机。如需详细了解此命令,请参阅 instances.start

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
    

    替换以下内容:

    • PROJECT_ID:包含要启动的虚拟机的项目 ID

    • ZONE:项目所在的区域

    • VM_NAME:要启动的虚拟机的名称

将虚拟机迁出单独租用节点

如果您的虚拟机不再需要专用硬件(例如,在要求将您的虚拟机与其他虚拟机隔离的事件之后),可以将该虚拟机从单租户节点迁移到多租户主机。

gcloud

  1. 停止虚拟机。

    gcloud compute instances stop VM_NAME
    

    VM_NAME 替换为要停止的虚拟机的名称。

  2. 清除虚拟机的节点亲和性,以便将虚拟机迁移到多租户主机。

    gcloud compute instances set-scheduling VM_NAME --clear-node-affinities
    

    VM_NAME 替换为要移除节点相似性的虚拟机的名称。

  3. 在多租户主机上启动虚拟机。

    gcloud compute instances start VM_NAME
    

    VM_NAME 替换为您之前清除过节点相似性的虚拟机的名称。

REST

  1. 停止虚拟机。如需详细了解此命令,请参阅 instances.stop

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
    

    替换以下内容:

    • PROJECT_ID:包含要停止的虚拟机的项目 ID

    • ZONE:项目所在的区域

    • VM_NAME:要停止的虚拟机的名称

  2. 清除虚拟机的节点亲和性,以便将虚拟机迁移到多租户主机。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
    
    {
      "nodeAffinities": []
    }
    

    替换以下内容:

    • PROJECT_ID:包含要迁移的虚拟机的项目 ID

    • ZONE:项目所在的区域

    • VM_NAME:要清除其节点亲和性的虚拟机的名称

  3. 在多租户主机上启动虚拟机。如需详细了解此命令,请参阅 instances.start

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
    

    替换以下内容:

    • PROJECT_ID:包含要启动的虚拟机的项目 ID

    • ZONE:项目所在的区域

    • VM_NAME:要启动的虚拟机的名称

后续步骤