替换、移除或删除布置政策


本文档介绍如何替换、移除或删除布置政策。

在以下情况下,替换、移除或删除布置政策非常有用:

  • 替换虚拟机 (VM) 实例中的布置政策,以将该虚拟机移至相对于其他虚拟机的不同位置。

  • 如果您不再关注该虚拟机相对于其他虚拟机的位置,从虚拟机中移除布置政策。

  • 如果不再需要布置政策,将其删除。

准备工作

  • 查看布置政策的限制
  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 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 时进行身份验证

所需的角色

如需获得替换、移除或删除布置政策所需的权限,请让您的管理员为您授予项目的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含替换、移除或删除布置政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需替换、移除或删除布置政策,您需要具备以下权限:

  • 从虚拟机中替换或移除布置政策: compute.instances.update on the project
  • 删除布置政策: compute.resourcePolicies.delete on the project

您也可以使用自定义角色或其他预定义角色来获取这些权限。

替换虚拟机中的布置政策

在将虚拟机中的分散布置政策替换为紧凑布置政策之前,请确保该虚拟机使用受支持的机器类型和主机维护政策。如果您需要先更新虚拟机,然后再替换其布置政策,请执行以下任一操作或两者:

替换虚拟机中的布置政策后,您必须重启虚拟机,才能使新应用的布置政策生效。

如需替换虚拟机中的布置政策,请选择以下选项之一:

gcloud

  1. 创建一个空的 YAML 文件。

  2. 如需将虚拟机的属性导出到您刚刚创建的 YAML 文件中,请使用 gcloud compute instances export 命令

    gcloud compute instances export VM_NAME \
        --destination=FILE_PATH \
        --zone=ZONE
    

    替换以下内容:

    • VM_NAME:指定布置政策的现有虚拟机的名称。

    • FILE_PATH:您在上一步中创建的 YAML 文件的路径。

    • ZONE:该虚拟机所在的可用区。

  3. 在 YAML 配置文件中,修改 resourcePolicies 字段的值以指定其他布置政策。

    resourcePolicies:
    - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME
    

    替换以下内容:

    • PROJECT_ID:布置政策所在项目的 ID。您只能指定与虚拟机位于同一项目中的布置政策。

    • REGION:布置政策所在的区域。

    • POLICY_NAME:布置政策的名称。

  4. 如需更新虚拟机并重启它,请使用 gcloud compute instances update-from-file 命令,并将 --most-disruptive-allowed-action 标志设置为 RESTART

    gcloud compute instances update-from-file VM_NAME \
        --most-disruptive-allowed-action=RESTART \
        --source=YAML_FILE \
        --zone=ZONE
    

    替换以下内容:

    • VM_NAME:虚拟机的名称。

    • YAML_FILE:包含您在上一步中修改的配置数据的 YAML 文件的路径。

    • ZONE:该虚拟机所在的可用区。

REST

  1. 创建一个空 JSON 文件。

  2. 如需查看现有虚拟机的属性,请向 instances.get 方法发出 GET 请求。

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

    替换以下内容:

    • PROJECT_ID:虚拟机所在项目的 ID。

    • ZONE:该虚拟机所在的可用区。

    • VM_NAME:指定布置政策的现有虚拟机的名称。

  3. 在您在上一步中创建的空 JSON 文件中,执行以下操作:

    1. 输入 GET 请求输出中的虚拟机属性。

    2. 找到 resourcePolicies 字段,然后修改其值以指定其他布置政策。

      "resourcePolicies": [
        "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
      ]
      

      替换以下内容:

      • PROJECT_ID:布置政策所在项目的 ID。您只能指定与虚拟机位于同一项目中的布置政策。

      • REGION:布置政策所在的区域。

      • POLICY_NAME:布置政策的名称。

  4. 如需更新虚拟机并重启它,请向 instances.update 方法发出 PUT 请求。在该请求中,执行以下操作:

    • 在请求网址中添加 most_disruptive_allowed_action 查询参数并设置为 RESTART

    • 对于请求正文,请使用您在上一步中创建和更新的 JSON 文件中的虚拟机配置详细信息。

    PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME?most_disruptive_allowed_action=RESTART
    
    {
      ...
      "resourcePolicies": [
        "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
      ],
      ...
    }
    

如需详细了解如何更新虚拟机的属性,请参阅更新虚拟机属性

从虚拟机中移除布置政策

如果您要从虚拟机中移除具有两个或更多可用性域的分散布置政策,则无需停止虚拟机即可移除。如果您要移除紧凑布置政策或仅具有一个可用性域的分散布置政策,则必须先停止虚拟机,然后才能移除挂接到该虚拟机的布置政策。

从虚拟机中移除布置政策不会影响其物理位置。但是,如果虚拟机正在实时迁移,Compute Engine 可能会将虚拟机移至其他物理位置。

如需从虚拟机中移除布置政策,请选择以下选项之一:

gcloud

如需从虚拟机中移除布置政策,请使用 gcloud compute instances remove-resource-policies 命令

gcloud compute instances remove-resource-policies VM_NAME \
    --resource-policies=POLICY_NAME \
    --zone=ZONE

替换以下内容:

  • VM_NAME:指定布置政策的现有虚拟机的名称。

  • POLICY_NAME:应用于虚拟机的布置政策的名称。如需验证布置政策的名称,请查看虚拟机的详细信息并检查 resourcePolicies 字段的值。

  • ZONE:该虚拟机所在的可用区。

REST

如需从虚拟机中移除布置政策,请向 instances.removeResourcePolicies 方法发出 POST 请求。

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

{
  "resourcePolicies": [
    "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  ]
}

替换以下内容:

  • PROJECT_ID:虚拟机所在项目的 ID。

  • ZONE:该虚拟机所在的可用区。

  • VM_NAME:指定布置政策的现有虚拟机的名称。

  • REGION:布置政策所在的区域。

  • POLICY_NAME:应用于虚拟机的布置政策的名称。如需验证布置政策的名称,请查看虚拟机的详细信息并检查 resourcePolicies 字段的值。

删除布置政策

仅当未将某个布置政策应用于任何 Compute Engine 资源时,才能删除该布置政策。否则,删除布置政策会失败。如果您要删除应用于一个或多个 Compute Engine 资源的布置政策,请执行以下任一操作:

  • 如果仅将政策应用于虚拟机,并且您希望保留虚拟机,请执行以下操作:

    1. 按照本文档中所述从虚拟机中移除布置政策

    2. 按照本部分中所述删除布置政策。

  • 否则,请执行以下操作:

    1. 可选:按照本文档中所述从要保留的任何虚拟机中移除布置政策

    2. 按以下顺序删除应用了该布置政策的所有其他 Compute Engine 资源:

      1. 虚拟机

      2. 预订

      3. 实例模板

    3. 按照本部分中所述删除布置政策。

如需删除布置政策,请选择以下选项之一:

gcloud

如需删除布置政策,请使用 gcloud compute resource-policies delete 命令

gcloud compute resource-policies delete POLICY_NAME \
    --region=REGION

替换以下内容:

  • POLICY_NAME:现有布置政策的名称。

  • REGION:布置政策所在的区域。

REST

如需删除布置政策,请向 resourcePolicies.delete 方法发出 DELETE 请求。

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME

替换以下内容:

  • PROJECT_ID:布置政策所在项目的 ID。

  • REGION:布置政策所在的区域。

  • POLICY_NAME:现有布置政策的名称。

后续步骤