Crea y aplica políticas de posición distribuida a las VMs


En este documento, se explica cómo crear una política de posición dispersa y aplicarla a una o más instancias de máquina virtual (VM) para mejorar la confiabilidad.

Una política de posición dispersa especifica que tus VMs deben colocarse físicamente muy separadas entre sí mediante la colocación en diferentes dominios de disponibilidad. Usa una política de posición distribuida para asegurarte de que tus VM se coloquen en hardware diferente, lo que reduce el impacto de las fallas de hardware subyacentes o optimiza la migración en vivo.

Puedes aplicar una política de posición distribuida cuando haces lo siguiente:

  • Creas o actualizas una VM.
  • Creas VMs de forma masiva.
  • Crea una plantilla de instancias. Luego, la plantilla de instancias aplica la política de posición distribuida cuando la usas para hacer lo siguiente:
    • Crea una VM.
    • Creas o actualizas un grupo de instancias administrado (MIG).

Antes de comenzar

  • Configura la autenticación si aún no lo hiciste. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar un código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Selecciona la pestaña para saber cómo planeas usar las muestras en esta página:

    gcloud

    1. Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init
    2. Configura una región y una zona predeterminadas.

    REST

    Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

      Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init

Funciones obligatorias

Para obtener los permisos que necesitas para crear y aplicar una política de posición distribuida a las VMs, pídele a tu administrador que te otorgue el rol de IAM de Administrador de instancias de Compute (v1) (roles/compute.instanceAdmin.v1) en la VM o el proyecto. Si quieres obtener más información para otorgar funciones, consulta Administra el acceso.

Este rol predefinido contiene los permisos necesarios para crear y aplicar una política de posición distribuida a las VMs. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para crear y aplicar una política de posición dispersa a las VMs:

  • Para crear políticas de posición: compute.resourcePolicies.create en el proyecto
  • Para aplicar una política de posición a una VM existente: compute.instances.addResourcePolicies en el proyecto

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

Restricciones

Además de las restricciones generales para las políticas de posición, las políticas de posición distribuida tienen las siguientes restricciones:

  • Solo puedes aplicar una política de posición dispersa a 8 VMs como máximo.

  • No puedes aplicar políticas de posición dispersa a las reservas de las VMs.

  • No puedes verificar la ubicación física de las VMs.

Crea una política de posición dispersa

Puedes crear una política de posición distribuida con gcloud CLI y REST.

gcloud

Para crear una política de posición dispersa, usa el comando gcloud compute resource-policies create group-placement con la marca --availability-domain-count.

gcloud compute resource-policies create group-placement POLICY_NAME \
    --availability-domain-count=DOMAIN_COUNT \
    --region=REGION

Reemplaza lo siguiente:

  • POLICY_NAME: El nombre de la política de posición dispersa que se creará.

  • DOMAIN_COUNT: La cantidad distinta de dominios de disponibilidad en los que se colocarán tus VMs. Cada dominio tiene su propia fuente de energía, enfriamiento y redes independiente. El valor debe estar entre 2 y 8, que es la cantidad máxima de VMs a las que puedes aplicar una política de posición dispersa.

  • REGION: la región en la que se creará la política.

REST

Para crear una política de posición distribuida, realiza una solicitud POST al método resourcePolicies.insert. En el cuerpo de la solicitud, incluye el campo availabilityDomainCount.

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

{
  "name": "POLICY_NAME",
  "groupPlacementPolicy": {
    "availabilityDomainCount": DOMAIN_COUNT
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto en el que deseas crear la política.

  • REGION: la región en la que deseas crear la política.

  • POLICY_NAME: El nombre de la política de posición dispersa que se creará.

  • DOMAIN_COUNT: La cantidad distinta de dominios de disponibilidad en los que se colocarán tus VMs. Cada dominio tiene su propia fuente de energía, enfriamiento y redes independiente. El valor debe estar entre 2 y 8, que es la cantidad máxima de VMs a las que puedes aplicar una política de posición dispersa.

Aplica políticas de posición dispersa

Puedes aplicar una política de posición dispersa a una VM existente o cuando creas VM, plantillas de instancias o MIGs.

Para crear un recurso de Compute Engine que especifique una política de posición dispersa, o aplicar la política de posición dispersa a una VM existente, elige uno de los siguientes métodos:

Aplica una política de posición dispersa a una VM existente

Puedes aplicar una política de posición distribuida a una VM existente con gcloud CLI y REST.

gcloud

Para aplicar una política de posición distribuida a una VM existente, usa el comando gcloud compute instances add-resource-policies con la marca --resource-policies.

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

Reemplaza lo siguiente:

  • VM_NAME: el nombre de una VM existente.

  • POLICY_NAME: el nombre de una política de posición dispersa existente.

  • ZONE: la zona donde existe la VM, que debe estar dentro de la región en la que se encuentra la política de posición dispersa.

REST

Para aplicar una política de posición distribuida a una VM existente, realiza una solicitud POST al método instances.addResourcePolicies. En el cuerpo de la solicitud, incluye el campo resourcePolicies.

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

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

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto en el que se encuentran la política de posición distribuida y la VM.

  • ZONE: la zona donde existe la VM, que debe estar dentro de la región en la que se encuentra la política de posición dispersa.

  • VM_NAME: el nombre de una VM existente.

  • REGION: la región en la que se encuentra la política de posición dispersa.

  • POLICY_NAME: el nombre de una política de posición dispersa existente.

Crea una VM que especifique una política de posición dispersa

Puedes crear una VM que especifique una política de posición distribuida existente con gcloud CLI y REST.

gcloud

Para crear una VM que especifique una política de posición dispersa, usa el comando gcloud compute instances create con la marca --resource-policies.

Por ejemplo, para crear una VM que tenga propiedades predeterminadas y especifique una política de posición dispersa, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • VM_NAME: El nombre de la VM que se creará.

  • POLICY_NAME: el nombre de una política de posición dispersa existente.

  • ZONE: la zona donde se creará la VM. Solo puedes crear una VM en una zona que esté dentro de la región en la que se encuentra la política de posición de expansión que especifiques.

REST

Para crear una VM que especifique una política de posición distribuida, realiza una solicitud POST al método instances.insert. En el cuerpo de la solicitud, incluye el campo resourcePolicies.

Por ejemplo, para crear una VM que tenga propiedades predeterminadas y especifique una política de posición dispersa, realiza la siguiente solicitud POST:

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

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

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto en el que se encuentra la política de posición distribuida.

  • ZONE: la zona donde se creará la VM. Solo puedes crear una VM en una zona que esté dentro de la región en la que se encuentra la política de posición dispersa que especifiques.

  • VM_NAME: El nombre de la VM que se creará.

  • REGION: la región en la que se encuentra la política de posición dispersa.

  • POLICY_NAME: el nombre de una política de posición dispersa existente.

Si deseas obtener más información sobre las opciones de configuración y los roles de IAM para crear una VM, consulta Crea e inicia una instancia de VM.

Crea VMs de forma masiva que especifiquen una política de posición dispersa

Puedes crear VMs de forma masiva que especifiquen una política de posición distribuida existente con gcloud CLI y REST.

gcloud

Para crear VMs de forma masiva que especifiquen una política de posición dispersa, usa el comando gcloud compute instances bulk create con las marcas --async y --resource-policies.

Por ejemplo, para crear VMs de forma masiva que tengan propiedades predeterminadas y especifiquen la misma política de posición dispersa, ejecuta el siguiente comando:

gcloud compute instances bulk create \
    --async \
    --count=COUNT \
    --name-pattern=NAME_PATTERN \
    --resource-policies=POLICY_NAME \
    --zone=ZONE

Reemplaza lo siguiente:

  • COUNT: la cantidad de VMs que se crearán.

  • NAME_PATTERN: el patrón de nombre para las VMs que se crearán. Usa el carácter de hash (#) para reemplazarlo por una secuencia de números. Por ejemplo, si especificas vm-#, se crean VMs con los nombres vm-1, vm-2, etc., hasta el número de VMs especificadas en COUNT.

  • POLICY_NAME: el nombre de una política de posición dispersa existente.

  • ZONE: la zona en la que se crearán las VMs de forma masiva. Solo puedes crear VMs en zonas que se encuentren dentro de la región de la política de posición de expansión que especifiques.

REST

Para crear VMs de forma masiva que especifiquen una política de posición distribuida, realiza una solicitud POST al método instances.bulkInsert. En el cuerpo de la solicitud, incluye el campo resourcePolicies.

Por ejemplo, para crear VMs de forma masiva que tengan propiedades predeterminadas y especifique la misma política de posición dispersa, realiza la siguiente solicitud POST:

POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert

{
  "count": "COUNT",
  "namePattern": "NAME_PATTERN",
  "instanceProperties": {
    "resourcePolicies": [
      "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
    ]
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto en el que se encuentra la política de posición distribuida.

  • ZONE: la zona en la que se crearán las VMs de forma masiva. Solo puedes crear VMs en zonas que se encuentren dentro de la región de la política de posición dispersa que especifiques.

  • COUNT: la cantidad de VMs que se crearán.

  • NAME_PATTERN: el patrón de nombre para las VMs que se crearán. Usa el carácter de hash (#) para reemplazarlo por una secuencia de números. Por ejemplo, si especificas vm-# para crear VMs con nombres vm-1, vm-2, y así sucesivamente, hasta el número de VMs especificadas en COUNT.

  • REGION: la región en la que se encuentra la política de posición dispersa.

  • POLICY_NAME: el nombre de una política de posición dispersa existente.

Para obtener más información sobre las opciones de configuración o los roles de IAM para crear VMs de forma masiva, consulta Crea VMs de forma masiva.

Crea una plantilla de instancias que especifique una política de posición dispersa

Puedes crear una plantilla de instancias que especifique una política de posición distribuida existente mediante gcloud CLI y REST.

Después de crear una plantilla de instancias, puedes usarla para hacer lo siguiente:

gcloud

Para crear una plantilla de instancias que especifique una política de posición dispersa, usa el comando gcloud compute instance-templates create con la marca --resource-policies.

Por ejemplo, para crear una plantilla de instancias global que tenga propiedades de VM predeterminadas e incluya una política de posición distribuida, ejecuta el siguiente comando:

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --resource-policies=POLICY_NAME

Reemplaza lo siguiente:

  • INSTANCE_TEMPLATE_NAME: es el nombre de la plantilla de instancias.

  • PROJECT_ID: El ID del proyecto en el que se encuentra la política de posición distribuida que deseas aplicar a la plantilla de instancias.

  • POLICY_NAME: El nombre de una política de posición de expansión existente.

REST

Para crear una plantilla de instancias que especifique una política de posición de expansión, realiza una solicitud POST al método instanceTemplates.insert. En el cuerpo de la solicitud, incluye el campo resourcePolicies.

Por ejemplo, para crear una plantilla de instancias global que tenga propiedades de VM predeterminadas y especifique una política de posición distribuida, realiza la siguiente solicitud POST:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "resourcePolicies": {
      "POLICY_NAME"
    }
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto en el que se encuentra la plantilla de instancias a la que deseas aplicar la política de posición distribuida.

  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancias.

  • POLICY_NAME: el nombre de una política de posición dispersa existente.

Si quieres obtener más información sobre las opciones de configuración para crear una plantilla de instancias, consulta Crea plantillas de instancias.

Aplica una política de posición a las VMs en un MIG

Después de crear una plantilla de instancias que especifique una política de posición dispersa, puedes usar la plantilla para hacer lo siguiente:

Si deseas aplicar una política de posición a un MIG, se recomienda crear o aplicar la política a un MIG regional con la forma dispersa cualquier zona. De esta manera, cada vez que un MIG regional necesita escalar horizontalmente mediante la creación de VM, elige la zona en la que se crearán las VMs según tus cuotas y requisitos de hardware.

Crea un MIG que especifique una política de posición dispersa

Puedes crear un MIG con una plantilla de instancias que especifique una política de posición distribuida mediante gcloud CLI y REST.

gcloud

Para crear un MIG mediante una plantilla de instancias que especifique una política de posición dispersa, usa el comando gcloud compute instance-groups managed create con la marca --template establecida en el nombre de la plantilla existente.

Por ejemplo, para crear un MIG regional con propiedades de VMs predeterminadas y la forma dispersa cualquier zona, ejecuta el siguiente comando:

gcloud compute instance-groups managed create MIG_NAME \
    --region=REGION \
    --size=SIZE \
    --target-distribution-shape=any-single-zone \
    --template=INSTANCE_TEMPLATE_NAME

Reemplaza lo siguiente:

  • MIG_NAME: el nombre del MIG que se creará.

  • REGION: la región en la que se crea el MIG, que debe coincidir con la región en la que se encuentra la política de posición dispersa.

  • SIZE: el tamaño del MIG.

  • INSTANCE_TEMPLATE_NAME: el nombre de una plantilla de instancias existente que especifica una política de posición dispersa.

REST

Para crear un MIG mediante una plantilla de instancias que especifique una política de posición distribuida, realiza una solicitud POST a los métodos instanceGroupManagers.insert o regionInstanceGroupManagers.insert. En el cuerpo de la solicitud, incluye el campo instanceTemplate y configúralo en el nombre de la plantilla existente.

Por ejemplo, para crear un MIG regional con propiedades de VM predeterminadas y la forma dispersa cualquier zona, realiza la siguiente solicitud POST:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers

{
  "name": "MIG_NAME",
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "targetSize": SIZE,
  "distributionPolicy": {
    "targetShape": "ANY_SINGLE_ZONE"
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto en el que se encuentran la política de posición distribuida y la plantilla de instancias que especifica la política de posición.

  • REGION: la región en la que se crea el MIG, que debe coincidir con la región en la que se encuentra la política de posición dispersa.

  • MIG_NAME: el nombre del MIG que se creará.

  • INSTANCE_TEMPLATE_NAME: el nombre de una plantilla de instancias existente que especifica una política de posición dispersa.

  • SIZE: el tamaño del MIG.

Para obtener más información sobre las opciones de configuración y los roles de IAM para crear MIG, consulta Situaciones básicas para crear MIG.

Aplica una política de posición dispersa a una MIG existente

Puedes aplicar una política de posición distribuida a un MIG existente con una plantilla de instancias que especifique la misma política de posición con gcloud CLI y REST.

gcloud

Para actualizar un MIG para usar una plantilla de instancias que especifique una política de posición dispersa, usa el comando gcloud compute instance-groups managed rolling-action start-update.

Por ejemplo, para actualizar un MIG regional para usar una plantilla de instancias que especifique una política de posición dispersa y reemplazar las VMs existentes del MIG con VMs nuevas que especifiquen las propiedades de la plantilla, ejecuta el siguiente comando:

gcloud compute instance-groups managed rolling-action start-update MIG_NAME \
    --region=REGION \
    --type=proactive \
    --version=template=INSTANCE_TEMPLATE_NAME

Reemplaza lo siguiente:

  • MIG_NAME: el nombre de un MIG existente.

  • REGION: la región en la que se encuentra el MIG. Solo puedes aplicar la política de posición distribuida a un MIG que se encuentre en la misma región.

  • INSTANCE_TEMPLATE_NAME: el nombre de una plantilla de instancias existente que especifica una política de posición dispersa.

REST

Para actualizar un MIG para usar una plantilla de instancias que especifique una política de posición de expansión y aplicar de forma automática las propiedades de la plantilla y la política de posición a las VMs existentes en el MIG, realiza una solicitud PATCH a los métodos instanceGroupManagers.insert o regionInstanceGroupManagers.insert.

Por ejemplo, para actualizar un MIG regional para usar una plantilla de instancias que especifique una política de posición dispersa y reemplazar las VMs existentes del MIG con VMs nuevas que especifiquen las propiedades de la plantilla, haz la siguiente solicitud PATCH:

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME

{
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "updatePolicy": {
    "type": "PROACTIVE"
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto que usaste para crear un MIG existente, la política de posición distribuida y la plantilla de instancias que especifica la política de posición distribuida.

  • REGION: la región en la que se encuentra el MIG. Solo puedes aplicar la política de posición distribuida a un MIG que se encuentre en la misma región.

  • MIG_NAME: el nombre de un MIG existente.

  • INSTANCE_TEMPLATE_NAME: el nombre de una plantilla de instancias existente que especifica una política de posición dispersa.

Si deseas obtener más información sobre las opciones de configuración y los roles de IAM para actualizar las VMs en un MIG, consulta Actualiza y aplica configuraciones nuevas a las VM en un MIG.

Próximos pasos