Distribuye instancias mediante MIG regionales

En esta página, se describe cómo crear grupos de instancias administrados (MIG) con instancias que se distribuyen en una sola región.

A diferencia de los grupos de instancias zonales administrados que pertenecen a una sola zona, los grupos de instancias regionales administrados mejoran la disponibilidad de la aplicación, ya que distribuyen las instancias en varias zonas dentro de una sola región. Por ejemplo, de forma predeterminada, un grupo de instancias regionales administrado en la región us-east1 mantiene una distribución uniforme de instancias en tres zonas dentro de la región: us-east1-b, us-east1-c y us-east1-d.

En las regiones que contienen más de tres zonas, el grupo de instancias regionales administrado selecciona tres de esas zonas para crear instancias. También puedes realizar una elección selectiva de las zonas para crear instancias, o bien elegir crear instancias en regiones con menos de tres zonas. Por ejemplo, para acelerar las cargas de trabajo con GPU, selecciona zonas que admitan GPU.

Al igual que los grupos de instancias zonales administrados, los grupos de instancias regionales administrados admiten el ajuste de escala automático y el balanceo de cargas internas y externas.

Antes de comenzar

Limitaciones

  • Cada grupo de instancias regionales administrado puede contener hasta 2,000 instancias.
  • Cuando se actualiza un grupo de instancias administrado, no se pueden especificar más de 1,000 instancias en una única solicitud.
  • No puedes usar grupos de instancias regionales administrados con un balanceador de cargas que use la opción de balanceo maxRate.

Elige grupos de instancias regionales administrados

Google recomienda el uso de grupos de instancias regionales administrados en vez de grupos de instancias zonales administrados, ya que permiten distribuir la carga de la aplicación en varias zonas, en lugar de limitar la aplicación a una sola zona o administrar varios grupos de instancias en diferentes zonas. Esta replicación protege contra fallas zonales y situaciones imprevistas en las que un grupo completo de instancias de una sola zona funciona mal. Si eso sucede, la aplicación puede continuar con la entrega de tráfico desde instancias que se ejecutan en otra zona de la misma región.

En el caso de una falla de zona, o bien si un grupo de instancias de una zona deja de responder, un grupo de instancias regionales administrado continúa con la admisión de tus instancias de VM de la siguiente manera:

  • La cantidad de instancias que forman parte del grupo de instancias regionales administrado de las zonas restantes continúa con la entrega de tráfico. No se agregan nuevas instancias ni se redistribuyen instancias (a menos que configures el ajuste de escala automático).

  • Una vez que la zona con errores se recupera, el grupo de instancias retoma la entrega de tráfico desde esa zona.

Cuando desees diseñar aplicaciones robustas y escalables, usa los grupos de instancias regionales administrados.

Redistribución proactiva de instancias

De forma predeterminada, un grupo de instancias regionales administrado intenta mantener una distribución uniforme de las instancias de VM en las zonas de la región para maximizar la disponibilidad de tu aplicación en caso de una falla al nivel de la zona.

Si borras o abandonas instancias de VM de tu grupo y esto provoca una distribución desigual entre zonas, el grupo redistribuye proactivamente las instancias a fin de restablecer una distribución uniforme.

Para restablecer una distribución uniforme entre zonas, el grupo borra instancias en zonas con más instancias de VM y agrega nuevas instancias en zonas con menos instancias de VM. El grupo elige automáticamente qué instancias borrar.

La redistribución proactiva restablece una distribución uniforme entre zonas.
Ejemplo de redistribución proactiva

Por ejemplo, supongamos que tienes un grupo de instancias regionales administrado con 4 instancias distribuidas en 3 zonas: a, b y c. Si borras 3 instancias de VM en c, el grupo intenta un nuevo balanceo para que las instancias vuelvan a distribuirse de manera uniforme en las zonas. En este caso, el grupo borra 2 instancias (una de a y otra de b) y crea 2 instancias en la zona c, de modo que cada zona tenga 3 instancias y se logre una distribución uniforme. No hay forma de seleccionar qué instancias se borran. El grupo pierde capacidad de forma temporal mientras se inician las nuevas instancias.

Para evitar la redistribución automática de tus instancias, puedes desactivar la redistribución proactiva de instancias cuando creas o actualizas un grupo de instancias regionales administrado.

Esto es útil cuando necesitas hacer lo siguiente:

  • Deseas borrar o abandonar VM del grupo sin afectar otras instancias de VM en ejecución. Por ejemplo, puedes borrar una instancia de VM de trabajador por lotes después de completar el trabajo sin afectar a otros trabajadores.
  • Proteger las VM que poseen apps con estado de la eliminación automática no deseada mediante la redistribución proactiva.
La inhabilitación de la redistribución proactiva puede afectar la capacidad durante una falla zonal.
Distribución desigual después de inhabilitar la redistribución proactiva

Si desactivas la redistribución proactiva de instancias, un grupo de instancias administrado no agrega ni quita proactivamente instancias para lograr el balanceo, pero aún converge de manera oportunista hacia el balanceo durante las operaciones de cambio de tamaño, a fin de tratar cada operación de cambio de tamaño como una oportunidad para balancear el grupo. Por ejemplo, cuando se reduce el escalamiento, el grupo usa automáticamente el cambio de escalamiento como una oportunidad para quitar instancias de zonas más grandes; y cuando se aumenta el escalamiento, el grupo aprovecha la oportunidad con el fin de agregar instancias a zonas más pequeñas.

Aprovisiona el tamaño correcto del grupo de instancias administrado para garantizar la disponibilidad

Una variedad de eventos puede hacer que una o más instancias no estén disponibles. Puedes ayudar a mitigar este problema mediante varios servicios de Google Cloud si haces lo siguiente:

Sin embargo, incluso si usas estos servicios, tus usuarios pueden experimentar problemas si muchas de tus instancias no están disponibles de forma simultánea.

A fin de estar preparado para el caso extremo en el que una zona falla o un grupo completo de instancias deja de responder, Google recomienda el aprovisionamiento en exceso de tu grupo de instancias administrado. En función de las necesidades de la aplicación, el aprovisionamiento en exceso del grupo previene que tu sistema falle por completo si una zona o un grupo de instancias deja de responder.

Google hace recomendaciones sobre el aprovisionamiento en exceso con la prioridad de mantener la aplicación disponible para tus usuarios. Estas recomendaciones incluyen el aprovisionamiento y el pago de más instancias de VM de las que tu aplicación podría necesitar en el día a día. Determina el aprovisionamiento en exceso según las necesidades de la aplicación y las limitaciones de costos.

Estima el tamaño recomendado del grupo de instancias

Compute Engine recomienda que aprovisiones suficientes instancias de modo que, si todas las instancias en una zona no están disponibles, las instancias restantes aún cumplan con la cantidad mínima de instancias que necesitas.

Usa la siguiente tabla para determinar el tamaño mínimo recomendado de tu grupo de instancias:

Cantidad de zonas VM adicionales Total de VM recomendadas
2 +100% 200%
3 +50% 150%
4 +33% 133%

La cantidad recomendada de VM adicionales es inversamente proporcional a la cantidad de zonas en las que se encuentra tu grupo de instancias administrado. Por lo tanto, puedes reducir la cantidad de VM adicionales mediante la distribución uniforme de tu aplicación en una mayor cantidad de zonas.

Aprovisiona un grupo de instancias regionales administrado en tres o más zonas

Cuando creas un grupo de instancias regionales administrado en una región con al menos tres zonas, Google recomienda el aprovisionamiento en exceso de tu grupo de instancias en al menos un 50%. De forma predeterminada, un grupo de instancias regionales administrado crea instancias en tres zonas. Tener instancias de VM en tres zonas ya te ayuda a preservar al menos 2/3 de tu capacidad de servicio; y si falla una sola zona, las otras dos zonas de la región pueden continuar con la entrega de tráfico sin interrupción. Si se aprovisiona en exceso al 150%, puedes asegurarte de que, si se pierde 1/3 de la capacidad, las zonas restantes admitirán el 100% del tráfico.

Por ejemplo, si necesitas 20 instancias de VM en tu grupo de instancias administrado en tres zonas, recomendamos —como mínimo— un 50% adicional de instancias. En este caso, el 50% de 20 son 10 instancias más para un total de 30 instancias en el grupo de instancias. Si creas un grupo de instancias regionales administrado con un tamaño de 30, el grupo distribuye sus instancias de la manera más uniforme posible en las tres zonas como se muestra a continuación:

Zona Cantidad de instancias
ejemplo-zona-1 10
ejemplo-zona-2 10
ejemplo-zona-3 10

Si alguna de las zonas falla, aún tienes 20 instancias que entregan tráfico.

Aprovisiona un grupo de instancias regionales administrado en dos zonas

Para aprovisionar tus instancias en dos zonas en lugar de tres, Google recomienda duplicar la cantidad de instancias. Por ejemplo, si necesitas 20 instancias de VM para tu servicio, distribuidas en dos zonas, recomendamos que configures un grupo de instancias regionales administrado con 40 instancias, de modo que cada zona tenga 20 instancias cada una. Si falla una sola zona, todavía tienes 20 instancias que entregan tráfico.

Zona Cantidad de instancias
ejemplo-zona-1 20
ejemplo-zona-2 20

Si la cantidad de instancias en tu grupo no es fácilmente divisible en dos zonas, Compute Engine divide las instancias de la manera más uniforme posible y coloca aleatoriamente las instancias restantes en una de las zonas.

Aprovisiona un grupo de instancias regionales administrado en una zona

Es posible crear un grupo de instancias regionales administrado con solo una zona. Esto es similar a crear un grupo de instancias zonales administrado.

No se recomienda crear un grupo de instancias regionales administrado de una sola zona porque ofrece la garantía mínima para aplicaciones con alta disponibilidad. Si la zona falla, todo tu grupo de instancias administrado dejará de estar disponible, lo que podría interrumpir a tus usuarios.

Selecciona zonas para tu grupo

La configuración predeterminada para un grupo de instancias regionales administrado es distribuir instancias de la manera más uniforme posible en tres zonas. Por varias razones, es probable que desees seleccionar zonas específicas para la aplicación. Por ejemplo, si necesitas GPU para tus instancias, puedes seleccionar solo zonas que admitan GPU. Es posible que tengas discos persistentes que solo están disponibles en ciertas zonas, o bien que desees comenzar con instancias de VM en solo unas pocas zonas en lugar de hacerlo en tres zonas aleatorias dentro de una región.

Si deseas elegir la cantidad de zonas o las zonas específicas en las que se debe ejecutar el grupo de instancias, debes hacerlo cuando creas el grupo por primera vez. Después de elegir zonas específicas durante la creación, no puedes cambiar o actualizar las zonas más tarde.

  • Para seleccionar más de tres zonas dentro de una región, debes especificar las zonas individuales de forma explícita. Por ejemplo, para seleccionar las cuatro zonas dentro de una región, debes proporcionar las cuatro zonas de forma explícita en tu solicitud. Si no lo haces, Compute Engine selecciona tres zonas de forma predeterminada.

  • Para seleccionar dos o menos zonas en una región, debes especificar las zonas individuales de forma explícita. Incluso si la región solo contiene dos zonas, debes especificar explícitamente las zonas en tu solicitud.

Independientemente de si eliges zonas específicas o si solo deseas seleccionar la región y permitir que Compute Engine cree instancias en todas las zonas dentro de la región, las nuevas instancias de VM se distribuyen uniformemente en todas las zonas de forma predeterminada. Como práctica recomendada, asegúrate de aprovisionar suficientes instancias de VM para admitir tus aplicaciones en la cantidad especificada de zonas.

Crea un grupo de instancias regionales administrado

Crea un grupo de instancias regionales administrado en la herramienta de línea de comandos de gcloud, Console o la API.

Si no hay suficiente capacidad en cada zona para admitir instancias del grupo de instancias, Compute Engine crea tantas instancias como sea posible y volverá a intentar crear las instancias restantes cuando haya una cuota adicional disponible.

Debido a que vas a crear un grupo de instancias regionales administrado, ten en cuenta que ciertos recursos, como los discos persistentes, son zonales. Si especificas recursos zonales en tu plantilla de instancias, como discos persistentes adicionales, el disco debe estar presente en todas las zonas para que pueda adjuntarse a las instancias creadas por este grupo de instancias regionales administrado.

De manera predeterminada, si no especificas explícitamente zonas individuales en tu solicitud, Compute Engine elige de forma automática tres zonas para crear instancias. Si necesitas crear instancias en más o en menos de tres zonas, o si deseas elegir qué zonas se usan, proporciona una lista de zonas en tu solicitud. Para obtener más información, consulta selecciona zonas para tu grupo.

De forma predeterminada, la redistribución proactiva de instancias está habilitada. Si necesitas administrar la cantidad de instancias en cada zona de forma manual, puedes inhabilitar la redistribución proactiva de instancias, pero no podrás configurar el ajuste de escala automático. Para obtener más información, consulta Redistribución proactiva de instancias.

Console

  1. En Cloud Console, ve a la página Grupos de instancias.

    Ir a la página Grupos de instancias

  2. Haz clic en Crear grupo de instancias para crear un grupo de instancias nuevo.
  3. En Ubicación, selecciona Varias zonas.
  4. Elige la región deseada.
  5. Si deseas elegir zonas específicas, haz clic en Configurar zonas para seleccionar las zonas que deseas usar.
  6. Si deseas inhabilitar la redistribución proactiva de instancias, haz lo siguiente
    1. Asegúrate de que el Modo de ajuste de escala automático esté establecido en Desactivado.
    2. Establece la opción Redistribución de instancias en Desactivado.
  7. Elige una plantilla de instancias para el grupo o crea una nueva.
  8. Especifica la cantidad de instancias para este grupo. Recuerda aprovisionar suficientes instancias para admitir tu aplicación si ocurre una falla de zona.
  9. Continúa con el resto del proceso de creación del grupo de instancias administrado.

gcloud

Todos los grupos de instancias administrados requieren una plantilla de instancias. Crea una plantilla de instancias si no tienes una. Por ejemplo, el siguiente comando crea una plantilla de instancias básica con propiedades predeterminadas:

gcloud compute instance-templates create example-template

Luego, usa el subcomando instance-groups managed create con la marca --region. Por ejemplo, este comando crea un grupo de instancias regionales administrado en tres zonas dentro de la región us-east1:

gcloud compute instance-groups managed create example-rmig \
    --template example-template --base-instance-name example-instances \
    --size 30 --region us-east1

Si deseas seleccionar las zonas específicas que el grupo debe usar, proporciona la marca --zones:

gcloud compute instance-groups managed create example-rmig \
    --template example-template --base-instance-name example-instances \
    --size 30 --zones us-east1-b,us-east1-c

Si deseas inhabilitar la redistribución proactiva de instancias, establece la marca --instance-redistribution-type en NONE. No puedes inhabilitar la redistribución proactiva de instancias si el ajuste de escala automático está habilitado.

gcloud compute instance-groups managed create example-rmig \
    --template example-template --base-instance-name example-instances \
    --size 30 --instance-redistribution-type NONE

API

Todos los grupos de instancias administrados requieren una plantilla de instancias. Crea una plantilla de instancias si no tienes una.

En la API, realiza una solicitud POST para el método regionInstanceGroupManagers.insert. En el cuerpo de la solicitud, incluye el nombre y el tamaño del grupo, el nombre base para las instancias del grupo y la URL de la plantilla de instancias que desees.

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

{
  "baseInstanceName": "[BASE_INSTANCE_NAME]",
  "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE_NAME]",
  "name": "[INSTANCE_GROUP_NAME]",
  "targetSize": "[TARGET_SIZE]",
  "distributionPolicy": {
     "zones": [
       {"zone": "zones/[ZONE]"},
       {"zone": "zones/[ZONE]"}
      ]
   }
}

En el ejemplo anterior, se ilustra lo siguiente:

  • [PROJECT_ID] es el ID del proyecto de esta solicitud.
  • [REGION] es la región del grupo de instancias.
  • [BASE_INSTANCE_NAME] es el nombre de la instancia para cada instancia que se crea como parte del grupo de instancias. Por ejemplo, un nombre de instancia base de example-instance crearía instancias con nombres como example-instance-[RANDOM_STRING] en los que [RANDOM_STRING] es generado por el servidor.
  • [INSTANCE_TEMPLATE_NAME] es la plantilla de instancias para usar.
  • [TARGET_SIZE] es la cantidad de instancias de destino del grupo de instancias.

Si deseas seleccionar zonas específicas o crear instancias en una región con menos o más de tres zonas, incluye la propiedad distributionPolicy en tu solicitud y proporciona una lista de zonas. Reemplaza [ZONE] por el nombre de la zona en la que deseas crear instancias.

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

{
  "baseInstanceName": "[BASE_INSTANCE_NAME]",
  "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE_NAME]",
  "name": "[INSTANCE_GROUP_NAME]",
  "targetSize": "[TARGET_SIZE]",
  "distributionPolicy": {
     "zones": [
       {"zone": "zones/[ZONE]"},
       {"zone": "zones/[ZONE]"}
      ]
   }
}

Por ejemplo, lo siguiente crea un grupo de instancias llamado example-rmig con 10 instancias distribuidas en las zonas us-east1-b y us-east1-c:

POST https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-east1/instanceGroupManagers
{

  "baseInstanceName": "example-instance",
  "instanceTemplate": "global/instanceTemplates/example-instance",
  "name": "example-rmig",
  "targetSize": 10,
  "distributionPolicy": {
      "zones": [
        {"zone": "zones/us-east1-b"},
        {"zone": "zones/us-east1-c"}
      ]
   }
}

Si deseas inhabilitar la redistribución proactiva de instancias, incluye la propiedad updatePolicy en tu solicitud y establece instanceRedistributionType en NONE.

No puedes inhabilitar la redistribución proactiva de instancias si el ajuste de escala automático está habilitado.

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

{
  "baseInstanceName": "[BASE_INSTANCE_NAME]",
  "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE_NAME]",
  "name": "[INSTANCE_GROUP_NAME]",
  "targetSize": "[TARGET_SIZE]",
  "updatePolicy": {
     "instanceRedistributionType": "NONE"
   },
}

Genera una lista de instancias en un grupo de instancias regionales administrado

A fin de obtener una lista de instancias para tu grupo de instancias regionales administrado, usa Cloud Console, el comando instance-groups managed list-instances en la herramienta de línea de comandos de gcloud o realiza una solicitud al método regionInstanceGroupManagers.listManagedInstances.

Console

  1. En Cloud Console, ve a la página Grupos de instancias.

    Ir a la página Grupos de instancias

  2. Haz clic en el nombre del grupo de instancias regionales administrado del que deseas ver las instancias.

La página de detalles del grupo de instancias se carga con una lista de instancias en el grupo.

gcloud

Ejecuta el comando instance-groups managed list-instances:

gcloud compute instance-groups managed list-instances [INSTANCE_GROUP_NAME] --region [REGION]

En el ejemplo anterior, se ilustra lo siguiente:

  • [INSTANCE_GROUP_NAME] es el nombre del grupo de instancias.
  • [REGION] es la región del grupo de instancias.

Por ejemplo, con el siguiente comando, se genera una lista de las instancias que forman parte de un grupo de instancias llamado example-rmig en la región us-east1:

gcloud compute instance-groups managed list-instances example-rmig --region us-east1

API

En la API, crea una solicitud GET vacía para el método regionInstanceGroupManagers.listManagedInstances.

GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/instanceGroupManagers/[INSTANCE_GROUP_NAME]

Por ejemplo:

GET https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-east1/instanceGroupManagers/example-rmig

Actualiza un grupo de instancias regionales administrado

Puedes actualizar un grupo de instancias regionales administrado mediante el actualizador de grupo de instancias. El actualizador te permite actualizar un subconjunto de tus instancias o todas tus instancias dentro de un grupo a una nueva plantilla de instancias. También puedes usar el actualizador para realizar actualizaciones Canary y controlar la velocidad de tu actualización.

Del mismo modo, también puedes cambiar la plantilla de instancias de un grupo de instancias sin actualizar las instancias existentes mediante elcomando set-instance-template en gcloud o el método setInstanceTemplate en la API. Ten en cuenta que el cambio de la plantilla de instancias no actualiza de manera automática las instancias existentes a la nueva plantilla de instancias. Debes recrear instancias individuales o ejecutar el actualizador de grupo de instancias para aplicar los cambios. Sin embargo, las nuevas instancias de VM del grupo utilizarán la nueva plantilla de instancias.

Inhabilita y vuelve a habilitar la redistribución proactiva de instancias

La redistribución proactiva de instancias mantiene una cantidad par de instancias en las zonas seleccionadas de la región. Esta configuración maximiza la disponibilidad de tu aplicación en caso de una falla en el nivel de la zona.

La redistribución proactiva de instancias está activada de forma predeterminada en los grupos de instancias regionales administrados, pero puedes desactivarla en los grupos de instancias administrados sin ajuste de escala automático. Cuando la redistribución proactiva de instancias está desactivada, el grupo no intenta redistribuir proactivamente las instancias entre las zonas. Esto es útil si necesitas hacer lo siguiente:

  • Borrar o abandonar manualmente las instancias de VM del grupo sin afectar otras instancias en ejecución
  • Borrar automáticamente una instancia de trabajador por lotes cuando finaliza el trabajo sin afectar a otros trabajadores
  • Proteger las instancias mediante aplicaciones con estado de la eliminación automática no intencionada a causa de la redistribución proactiva de instancias

Si quitas o abandonas las instancias de VM del grupo y provocas un desbalanceo de instancias entre las zonas, debes volver a balancear el grupo de forma manual antes de habilitar nuevamente la redistribución proactiva. Para volver a balancear manualmente el grupo, cambia su tamaño o quita instancias de zonas con más instancias.

Cuando cambias el tamaño de un grupo de instancias administrado que tiene desactivada la redistribución proactiva de instancias, el grupo aún converge de manera oportunista hacia el balanceo y trata cada operación de cambio de tamaño como una oportunidad para balancear el grupo: cuando el grupo crece, este siempre intenta agregar instancias a las zonas con la menor cantidad de VM; cuando el grupo se reduce, este siempre quita instancias de las zonas con la mayor cantidad de instancias.

Ejemplo de cambio de tamaño manual de un grupo para lograr una redistribución uniforme

Usa la consola, la herramienta de gcloud o la API para crear un grupo de instancias con la redistribución proactiva de instancias inhabilitada, o a fin de activar o desactivar la redistribución proactiva de instancias para un grupo existente.

Crear un grupo con redistribución proactiva inhabilitada

Console

  1. En Cloud Console, ve a la página Grupos de instancias.

    Ir a la página Grupos de instancias

  2. Haz clic en Crear grupo de instancias para crear un grupo de instancias nuevo.
  3. En Ubicación, selecciona Varias zonas.
  4. Elige la región deseada.
  5. Si deseas elegir zonas específicas, haz clic en Configurar zonas para seleccionar las zonas que deseas usar.
  6. Para inhabilitar la redistribución proactiva de instancias, haz lo siguiente:
    1. Asegúrate de que el Modo de ajuste de escala automático esté establecido en Desactivado.
    2. Establece la Redistribución de instancias en Desactivado.
  7. Elige una plantilla de instancias para el grupo o crea una nueva.
  8. Especifica la cantidad de instancias para este grupo. Recuerda aprovisionar suficientes instancias para admitir tu aplicación si ocurre una falla de zona.
  9. Continúa con el resto del proceso de creación del grupo de instancias administrado.

gcloud

Para crear un nuevo grupo de instancias regionales administrado sin redistribución proactiva de instancias, usa el comando gcloud compute instance-groups managed create con la marca --instance-redistribution-type establecida en NONE.

gcloud compute instance-groups managed create [INSTANCE_GROUP_NAME] \
    --template [TEMPLATE] \
    --size [SIZE] \
    --zones [ZONES] \
    --instance-redistribution-type NONE

En el ejemplo anterior, se ilustra lo siguiente:

  • [INSTANCE_GROUP_NAME] es el nombre del grupo de instancias.
  • [TEMPLATE] es el nombre de la plantilla de instancias que se usará para el grupo.
  • [SIZE] es el tamaño de destino del grupo de instancias.
  • [ZONES] es la lista de zonas en la única región en la que necesitas implementar instancias de VM.

Por ejemplo:

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c \
    --instance-redistribution-type NONE

API

Para crear un grupo de instancias regionales administrado sin ajuste de escala automático ni redistribución proactiva de instancias, crea una solicitud POST a fin de invocar el método regionInstanceGroupManagers.insert. En el cuerpo de la solicitud, incluye la propiedad updatePolicy y establece su campo instanceRedistributionType en NONE.

POST
https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/instanceGroupManagers/[INSTANCE_GROUP_NAME]
{
    "name": "[INSTANCE_GROUP_NAME]",
    "baseInstanceName": "[BASE_INSTANCE_NAME]",
    "instanceTemplate": "global/instanceTemplates/[TEMPLATE]",
    "targetSize": "[TARGET_SIZE]",
    "distributionPolicy": {
        "zones": [
            {"zone": "zones/[ZONE]"},
            {"zone": "zones/[ZONE]"}
        ]
    },
    "updatePolicy": {
        "instanceRedistributionType": "NONE"
    }
}

En el ejemplo anterior, se ilustra lo siguiente:

  • [PROJECT_ID] es el ID del proyecto de esta solicitud.
  • [REGION] es la región del grupo de instancias.
  • [INSTANCE_GROUP_NAME] es el nombre del grupo de instancias.
  • [BASE_INSTANCE_NAME] es el prefijo del nombre de cada instancia. El sufijo del nombre de instancia se genera automáticamente.
  • [TEMPLATE] es el nombre de la plantilla de instancias que se usará para el grupo.
  • [TARGET_SIZE] es el tamaño de destino del grupo de instancias.
  • [ZONE] es el nombre de una zona en la única región en la que necesitas implementar instancias de VM.

Desactiva la redistribución proactiva de instancias

Antes de poder desactivar la redistribución proactiva de instancias, debes desactivar el ajuste de escala automático.

Console

  1. En Cloud Console, ve a la página Grupos de instancias.

    Ir a la página Grupos de instancias

  2. Selecciona el grupo de instancias para actualizar y haz clic en Editar grupo.
  3. Asegúrate de que el Modo de ajuste de escala automático esté establecido en Desactivado.
  4. Establece la Redistribución de instancias en Desactivado para inhabilitar la redistribución automática.
  5. Haz clic en Guardar.

gcloud

A fin de desactivar la redistribución proactiva de instancias para un grupo de instancias regionales administrado sin ajuste de escala automático, usa el comando compute instance-groups managed update con la marca --instance-redistribution-type establecida en NONE.

 gcloud compute instance-groups managed update [INSTANCE_GROUP_NAME]
    --instance-redistribution-type NONE \
    --region [REGION]

En el ejemplo anterior, se ilustra lo siguiente:

  • [INSTANCE_GROUP_NAME] es el nombre del grupo de instancias.
  • [REGION] es la región del grupo de instancias.

API

En la  API, realiza una solicitud PATCH para el método regionInstanceGroupManagers.patch. En el cuerpo de la solicitud, incluye la propiedad updatePolicy y establece su campo instanceRedistributionType en NONE

PATCH
https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/instanceGroupManagers/[INSTANCE_GROUP]

{
    "updatePolicy": {
         "instanceRedistributionType": "NONE"
    }
}

En el ejemplo anterior, se ilustra lo siguiente:

  • [PROJECT_ID] es el ID del proyecto de esta solicitud.
  • [REGION] es la región del grupo de instancias.
  • [INSTANCE_GROUP] es el nombre de un grupo de instancias administrado sin ajuste de escala automático.

Activa la distribución proactiva de instancias

A fin de activar la distribución proactiva, usa un comando similar al que empleas para desactivar la redistribución proactiva de instancias, pero con el tipo de redistribución de instancias establecido en PROACTIVE.

Si quitaste o abandonaste de forma manual algunas instancias y esto provocó una distribución desigual de instancias en toda la región, entonces, antes de que puedas habilitar la redistribución proactiva de instancias de nuevo, debes volver a balancear manualmente el grupo. La diferencia en la cantidad de instancias de VM entre dos zonas no debe exceder 1 VM.

Puedes lograr una distribución uniforme de instancias entre zonas de forma manual si borras las VM de zonas con más instancias o cambias el tamaño del grupo para llenar las zonas con menos instancias hasta que la distribución sea uniforme.

Un grupo de instancias regionales administrado no permite activar la redistribución proactiva de instancias cuando las instancias se distribuyen de manera desigual entre las zonas (la diferencia en la cantidad de instancias de VM entre dos zonas es de 2 o más VM). Esto es para evitar una eliminación automática involuntaria de VM de zonas con más instancias, lo que se activaría para lograr una distribución uniforme.

Realiza el ajuste de escala automático de un grupo de instancias regionales administrado

Compute Engine ofrece el ajuste de escala automático para los grupos de instancias administrados, lo que permite que tus grupos de instancias agreguen o quiten instancias automáticamente en función de los aumentos o disminuciones de la carga.

Si habilitas el ajuste de escala automático para un grupo de instancias regionales administrado, la característica se comporta de la siguiente manera:

  • Se aplica una política de ajuste de escala automático al grupo en su conjunto (no a zonas individuales). Por ejemplo, si habilitas el escalador automático a fin de alcanzar el 66% de uso de CPU, el escalador automático realiza un seguimiento de todas las instancias del grupo para mantener un promedio de uso del 66% en las instancias de todas las zonas.

  • El ajuste de escala automático intenta distribuir uniformemente las instancias entre las zonas disponibles siempre que sea posible. En general, el escalador automático mantiene balanceado el tamaño de las zonas mediante el aumento de las zonas más pequeñas, con la expectativa de que la carga se redireccione desde las zonas más grandes, por ejemplo, a través de un balanceador de cargas. No recomendamos configurar un balanceador de cargas personalizado que prefiera una zona, ya que esto podría causar un comportamiento inesperado.

  • Si tu flujo de trabajo usa instancias de manera uniforme en 3 zonas y una zona experimenta una falla, o falla un grupo de instancias dentro de una zona, puede que se pierda 1/3 de la capacidad, pero 2/3 de la capacidad permanecen en las otras zonas. Recomendamos que aprovisiones en exceso tu grupo de instancias regionales administrado con ajuste de escala automático para evitar sobrecargar los servidores activos durante el tiempo que se pierde una zona.

  • Si los recursos (por ejemplo, instancias interrumpibles) no están disponibles en una zona de forma temporal, el grupo continúa intentando crear estas instancias administradas en esa zona. Una vez que los recursos vuelven a estar disponibles, el grupo adquiere la cantidad deseada de instancias en ejecución.

  • Si el balanceo de cargas está habilitado y los recursos no están disponibles en una zona, lo que causa un mayor uso de los recursos existentes en esa zona, se podrían crear nuevas instancias en zonas con tasas de uso más bajas, lo que puede dar como resultado una distribución desigual de forma temporal.

El escalador automático solo agrega instancias a una zona de hasta 1/n del máximo especificado para el grupo, en el que n es la cantidad de zonas aprovisionadas. Por ejemplo, si usas el valor predeterminado de 3 zonas, y si 15 es el maxNumReplicas configurado para el ajuste de escala automático, el escalador automático solo puede agregar hasta 1/3 * 15 = 5 instancias por zona para el grupo de instancias. Si una zona falla, el escalador automático solo escala verticalmente hasta 2/3 del maxNumReplicas en las dos zonas combinadas restantes.

Aprovisiona tu configuración de escalador automático

Al igual que en el caso del consejo sobre el aprovisionamiento en exceso de un grupo de instancias administrado, aprovisiona en exceso la configuración de tu escalador automático para que suceda lo siguiente:

  • El uso de destino del ajuste de escala automático es 2/3 del objetivo de uso deseado.
  • A fin de adaptarse al objetivo de uso reducido, el escalador automático agregará más instancias, por lo que deberías aumentar el maxNumReplicas para que sea un 50% más que el número que habrías establecido sin tener en cuenta el aprovisionamiento en exceso.

Por ejemplo, si esperas que 20 instancias puedan manejar tus cargas máximas y el uso de destino es del 80%, configura el escalador automático según los siguientes valores:

  • 2/3 * 0.8 = 0.53 o 53% para el uso de destino en lugar del 80%
  • 3/2 * 20 = 30 para un número máximo de instancias en lugar de 20

Esta configuración garantiza que, en el caso de una falla de zona única, tu grupo de instancias no se quede sin capacidad porque los 2/3 de instancias restantes deberían ser capaces de manejar la mayor carga de la zona sin conexión (ya que redujiste el uso de destino muy por debajo de su capacidad). El escalador automático también agregará nuevas instancias hasta la cantidad máxima de instancias que especificaste para mantener el uso de destino de 2/3.

Sin embargo, no debes confiar únicamente en el aprovisionamiento en exceso de tus grupos de instancias administrados para manejar una carga mayor. Como práctica recomendada, Google recomienda que pruebes regularmente tus aplicaciones de carga para asegurarte de que puedas manejar el mayor uso que podría ser causada por una interrupción de zona que quita 1/3 de las instancias.

Habilita el ajuste de escala automático

Console

  1. En Cloud Console, ve a la página Grupos de instancias.

    Ir a la página Grupos de instancias

  2. Si no tienes un grupo de instancias, crea uno. De lo contrario, haz clic en el nombre de un grupo de instancias regionales administrado existente de la lista.
  3. En la página de detalles del grupo de instancias, haz clic en el botón Editar grupo.
  4. En Ajuste de escala automático, marca Activado.
  5. Llena las propiedades para la configuración del ajuste de escala automático.
  6. Guarda los cambios.

gcloud

Con la herramienta de línea de comandos de gcloud, usa el subcomando set-autoscaling para habilitar el ajuste de escala automático regional, seguido de la marca --region. Para obtener más información sobre cómo crear un escalador automático, lee la documentación sobre el ajuste de escala automático.

Por ejemplo, en los siguientes fragmentos se configura un escalador automático para un grupo de instancias de ejemplo. Reemplaza us-east1 por la región de tu grupo de instancias administrado y example-rmig por el nombre del grupo de instancias administrado regional:

gcloud compute instance-groups managed set-autoscaling example-rmig \
    --target-cpu-utilization 0.8 --max-num-replicas 5 --region us-east1

API

A fin de configurar el ajuste de escala automático regional en la API, realiza una solicitud POST para la siguiente URL, con tu propio ID del proyecto y la región de tu grupo de instancias administrado de la siguiente manera:

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/regionAutoscalers/

El cuerpo de tu solicitud debe contener los campos name, target y autoscalingPolicy. autoscalingPolicy debe definir cpuUtilization y maxNumReplicas.

Para facilitar la identificación, te recomendamos asignar un nombre al recurso del escalador automático en función del recurso del MIG que lo usa.

{
 "name": "[AUTOSCALER_NAME]",
 "target": "regions/us-east1/instanceGroupManagers/[INSTANCE_GROUP_NAME]",
 "autoscalingPolicy": {
    "maxNumReplicas": [MAX_NUM_INSTANCES],
    "cpuUtilization": {
       "utilizationTarget": [TARGET_UTILIZATION]
     },
    "coolDownPeriodSec": [SECONDS]
  }
}

Por ejemplo:

{
 "name": "example-rmig",
 "target": "regions/us-east1/instanceGroupManagers/example-rmig",
 "autoscalingPolicy": {
    "maxNumReplicas": 10,
    "cpuUtilization": {
       "utilizationTarget": 0.8
     },
    "coolDownPeriodSec": 30
  }
}

Actualiza un escalador automático

Puedes actualizar un escalador automático regional como lo harías con un escalador automático zonal. Lee la documentación sobre cómo actualizar un escalador automático.

Agrega un grupo de instancias regionales administrado a un balanceador de cargas

El balanceo de cargas de Google Cloud Platform usa grupos de instancias para entregar tráfico. En función del tipo de balanceador de cargas que uses, puedes agregar grupos de instancias a un grupo de destino o un servicio de backend. Para leer más sobre los grupos de instancias adminis´trados y el balanceo de cargas, consulta la descripción general de los grupos de instancias.

Puedes asignar un grupo de instancias regionales administrado como destino de un servicio de backend en el balanceo de cargas externas y el balanceo de cargas internas, o como parte de un grupo de destino en el balanceo de cargas de red.

En el balanceo de cargas HTTP(S), solo se admiten maxRatePerInstance ymaxUtilization para los grupos de instancias regionales administrados.

Agrega un grupo de instancias regionales administrado a un servicio de backend

Se necesita un servicio de backend para crear los siguientes tipos de servicios de balanceo de cargas:

  • Balanceo de cargas HTTP(S) externo
  • Balanceo de cargas HTTP(S) interno
  • Balanceo de cargas del proxy SSL
  • Balanceo de cargas del proxy TCP
  • Balanceo de cargas TCP/UDP interno

Un servicio de backend puede contener varios backends. Un grupo de instancias es un tipo de backend. Las instancias en el grupo de instancias responden al tráfico del balanceador de cargas. El servicio de backend, a su vez, detecta las instancias que puede usar, la cantidad de tráfico que puede manejar y el tráfico que maneja en el momento. Además, el servicio de backend supervisa la verificación de estado y no envía conexiones nuevas a instancias en mal estado.

Usa estas instrucciones para agregar un grupo de instancias administrado a un servicio de backend.

Console

  1. Ve a la página Balanceo de cargas en Cloud Console.

    Ir a la página Balanceo de cargas

  2. Haz clic en el nombre del servicio de backend al que quieres agregar el grupo de instancias administrado.
  3. Haz clic en Editar.
  4. Haz clic en +Agregar backend.
  5. Selecciona el grupo de instancias que deseas agregar.
  6. Edita cualquier configuración opcional que quieras cambiar.
  7. Guarda los cambios.

gcloud

Con la herramienta de línea de comandos de gcloud, usa el comando add-backend:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --instance-group=INSTANCE_GROUP \
        [--instance-group-region=INSTANCE_GROUP_REGION | --instance-group-zone=INSTANCE_GROUP_ZONE] \
        --balancing-mode=BALANCING_MODE

Los parámetros adicionales son obligatorios según el modo del balanceo del grupo de instancias administrado. Para obtener más información, consulta el comando add-backend en el SDK.

API

Para agregar un servicio de backend con la API de REST, consulta backendServices.

Agrega un grupo de instancias regionales administrado a un grupo de destino

Un grupo de destino es un objeto que contiene una o más instancias de máquinas virtuales. El grupo de destino se usa en el balanceo de cargas de red, en el que el balanceador de cargas de red reenvía las solicitudes del usuario al grupo de destino conectado. Las instancias que forman parte de ese grupo de destino entregan estas solicitudes y muestran una respuesta. Puedes agregar un grupo de instancias administrado a un grupo de destino para que cuando se agreguen o quiten instancias del grupo de instancias, el grupo de destino también se actualice automáticamente con los cambios.

El grupo de destino debe existir antes de que puedas agregar un grupo de instancias administrado a uno de destino. Para obtener más información, consulta la documentación sobre Agrega un grupo de destino.

Sigue estas instrucciones para agregar un grupo de instancias administrado existente a un grupo de destino. Así se agregan todas las instancias de VM que forman parte del grupo de instancias administrado al grupo de destino.

Console

  1. Ve a la página Grupos de destino en Cloud Console.

    Ir a la página Grupos de destino

  2. Haz clic en el grupo de destino en el que quieres agregar el grupo de instancias.
  3. Haz clic en el botón Editar.
  4. Desplázate hacia la sección Instancias de VM y haz clic en Seleccionar grupos de instancias.
  5. Selecciona un grupo de instancias en el menú desplegable.
  6. Guarda los cambios.

gcloud

Con la herramienta de línea de comandos de gcloud, usa el comando set-target-pools:

gcloud beta compute instance-groups managed set-target-pools [INSTANCE_GROUP] \
    --target-pools [TARGET_POOL,..] [--region REGION]

En el ejemplo anterior, se ilustra lo siguiente:

  • [INSTANCE_GROUP] es el nombre del grupo de instancias.
  • [TARGET_POOL] es el nombre de uno o más grupos de destino en los que se agrega el grupo de instancias.
  • [REGION] es la región del grupo de instancias.

API

En la API, realiza una solicitud POST al siguiente URI:

POST https://compute.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/regionInstanceGroupManagers/[INSTANCE_GROUP]/setTargetPools

En el ejemplo anterior, se ilustra lo siguiente:

  • [PROJECT_ID] es el ID del proyecto de esta solicitud.
  • [REGION] es la región del grupo de instancias.
  • [INSTANCE_GROUP] es el nombre del grupo de instancias.

El cuerpo de la solicitud debe contener una lista de URI para los grupos de destino en los que quieres agregar este grupo. Por ejemplo:

{
  "targetPools": [
    "regions/us-central1/targetPools/example-targetpool-1",
    "regions/us-central1/targetPools/example-targetpool-2"
  ]
}

Simula una interrupción de zona para un grupo de instancias regionales administrado

Para probar que tu grupo de instancias regionales administrado está aprovisionado en exceso de manera suficiente y puede sobrevivir a una interrupción de zona, puedes usar el siguiente ejemplo con el fin de simular una falla de una sola zona.

Esta secuencia de comandos se detiene y, luego, inicia Apache como el escenario predeterminado. Si esto no se aplica a tu aplicación, reemplaza los comandos que detienen y, luego, inician Apache con tu propia situación de falla y recuperación.

  1. Implementa y ejecuta esta secuencia de comandos continuamente en cada instancia de máquina virtual del grupo de instancias. Puedes hacer esto mediante la adición de la secuencia de comandos a la plantilla de instancias, o bien a través de la inclusión de una imagen personalizada y su uso en la plantilla de instancias.

    #!/usr/bin/env bash
    
    # Copyright 2016 Google Inc. All Rights Reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    set -o nounset
    set -o errexit
    set -o pipefail
    
    function GetMetadata() {
      curl -s "$1" -H "Metadata-Flavor: Google"
    }
    
    PROJECT_METADATA_URL="http://metadata.google.internal/computeMetadata/v1/project/attributes"
    INSTANCE_METADATA_URL="http://metadata.google.internal/computeMetadata/v1/instance"
    ZONE=$(GetMetadata "$INSTANCE_METADATA_URL/zone" | cut -d '/' -f 4)
    INSTANCE_NAME=$(hostname)
    
    # We keep track of the state to make sure failure and recovery is triggered only once.
    STATE="healthy"
    while true; do
      if [[ "$ZONE" = "$(GetMetadata $PROJECT_METADATA_URL/failed_zone)" ]] && \
         [[ "$INSTANCE_NAME" = *"$(GetMetadata $PROJECT_METADATA_URL/failed_instance_names)"* ]]; then
        if [[ "$STATE" = "healthy" ]]; then
          STATE="failure"
          # Do something to simulate failure here.
          echo "STARTING A FAILURE"
          /etc/init.d/apache2 stop
        fi
      else
        if [[ "$STATE" = "failure" ]] ; then
          STATE="healthy"
          # Do something to recover here.
          echo "RECOVERING FROM FAILURE"
          /etc/init.d/apache2 start
        fi
      fi
      sleep 5
    done
    
    
  2. Simula una falla de zona mediante la configuración de los siguientes dos campos de metadatos del proyecto:

    • failed_zone: Establece la zona en la que deseas simular la interrupción (limita la falla a una sola zona).
    • failed_instance_names: Elige las instancias que se dejarán sin conexión por nombre (para limitar la falla solo a los nombres de instancia que contengan esta string).

    Puedes configurar estos metadatos con la herramienta de línea de comandos de gcloud. Por ejemplo, el siguiente comando establece la interrupción de la zona en la zona europe-west1-b y afecta a las instancias cuyos nombres comienzan con instance-base-name:

    gcloud compute project-info add-metadata --metadata failed_zone='europe-west1-b',failed_instance_names='instance-base-name-'
    
  3. Una vez que hayas terminado de simular la interrupción, recupérate de la falla mediante la eliminación de las siguientes claves de metadatos:

    gcloud compute project-info remove-metadata --keys failed_zone,failed_instance_names
    

Aquí hay algunas ideas para escenarios de falla que puedes ejecutar con esta secuencia de comandos:

  • Detén la aplicación por completo para ver cómo responde el grupo de instancias administrado.
  • Haz que tus instancias se muestren como "poco saludables" en las verificaciones de estado de balanceo de cargas.
  • Modifica iptables para bloquear parte del tráfico hacia y desde la instancia.
  • Apaga las instancias de la máquina virtual. De forma predeterminada, el grupo de instancias regionales administrado lo volverá a crear poco después, pero la nueva encarnación se cerrará inmediatamente en cuanto se ejecute la secuencia de comandos y siempre que se establezcan los valores de metadatos. Esto dará como resultado un bucle de bloqueo.

Próximos pasos