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


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

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

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

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

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

准备工作

  • 查看布置政策的限制
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

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

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

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

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      如需了解详情,请参阅 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:现有布置政策的名称。

后续步骤