Implementa actualizaciones en instancias de un MIG de forma automática

En este documento, se describe cómo aplicar de forma automática una plantilla de instancias nueva a todos o a un subconjunto aleatorio de subconjuntos de las instancias de máquina virtual (VM) en un grupo de instancias administrado (MIG).

Cuando configuras una actualización automática, el MIG lanza una nueva versión de una plantilla de instancias automáticamente en las especificaciones. Puedes controlar la velocidad de implementación, el nivel de interrupción del servicio y la cantidad de instancias que actualiza el MIG. Después de iniciar la actualización, no es necesario que proporciones entradas adicionales y la actualización se completa de forma individual.

Si quieres aplicar una plantilla nueva de forma selectiva solo a instancias nuevas o a instancias específicas en un MIG, o si tienes un MIG con estado y necesitas aplicar una configuración con estado por instancia, consulta Actualiza instancias de manera selectiva en un MIG en su lugar. A fin de decidirte, consulta Elige entre las actualizaciones automáticas y selectivas.

Antes de comenzar

Limitaciones

  • No puedes usar una actualización progresiva automatizada si tu MIG tiene cualquier configuración con estado. Puedes controlar las actualizaciones y limitar las interrupciones si, en su lugar, actualizas instancias específicas.
  • Si usas nombres de instancia personalizados y no configuras discos o metadatos con estado, puedes usar las actualizaciones automáticas. Sin embargo, para conservar los nombres de las instancias, debes configurar el método de reemplazo como RECREATE.

Inicia una actualización progresiva básica

Una actualización progresiva básica es una actualización que se aplica de forma gradual en todas las instancias de un MIG hasta que todas las instancias se hayan actualizado. Puedes controlar varios aspectos de una actualización progresiva, como la cantidad de instancias que se pueden desconectar para la actualización, el tiempo de espera entre instancias de actualización, si la actualización afecta a todas las instancias o solo a una parte, etcétera.

Cuando se realiza una actualización progresiva, se debe tener en cuenta la siguiente información:

  • Las actualizaciones se basan en la intención. Cuando realizas la solicitud de actualización inicial, la API de Compute Engine muestra una respuesta correcta para confirmar que la solicitud es válida, pero eso no indica que la actualización fue exitosa. Debes verificar el estado del grupo para determinar si la actualización se implementó correctamente.

  • La API del Actualizador del grupo de instancias es una API declarativa. La API espera una solicitud para especificar la configuración deseada posterior a la actualización del MIG, en lugar de una llamada a función explícita.

  • Las actualizaciones automáticas admiten hasta dos versiones de plantilla de instancias en tu MIG. Esto significa que puedes especificar dos versiones diferentes de plantillas de instancias para tu grupo, lo que es útil cuando se realizan actualizaciones canary.

Para iniciar una actualización progresiva básica en la que la actualización se aplica al 100% de las instancias del grupo, sigue las instrucciones que se indican a continuación.

Console

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

    Ir a Grupos de instancias

  2. Selecciona el MIG que deseas actualizar.

  3. En la parte superior de la página, haz clic en Actualización progresiva.

  4. En Plantilla, haz clic en la lista desplegable y selecciona la plantilla nueva que se actualizará.

  5. Para el tamaño de destino, ingresa 100% a fin de actualizar todas las instancias.

  6. En Modo de actualización, selecciona Proactivo.

  7. Haz clic en Actualizar para comenzar la actualización.

gcloud

Usa el comando rolling-action start-update.

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=INSTANCE_TEMPLATE_NAME
    [--zone=ZONE | --region=REGION]

Reemplaza lo siguiente:

  • INSTANCE_GROUP_NAME: Es el nombre del MIG.
  • INSTANCE_TEMPLATE_NAME: La nueva plantilla de instancias
  • ZONE: Para MIG zonales, proporciona la zona
  • REGION: Para los MIG regionales, proporciona la región

API

Llama al método patch en un recurso de MIG regional o zonal.

Por ejemplo, para un MIG regional, la siguiente solicitud muestra la configuración mínima necesaria a fin de actualizar automáticamente el 100% de las instancias a la nueva plantilla de instancias.

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

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

Después de realizar una solicitud, puedes supervisar la actualización para saber cuándo finalizó.

Para configuraciones avanzadas, debes incluir otras opciones de actualización. Si no especificas lo contrario, la configuración predeterminada de maxSurge y maxUnavailable es 1 multiplicada por la cantidad de zonas afectadas. Esto significa que solo 1 instancia se desconecta sin conexión en cada zona afectada y el MIG crea solo 1 instancia adicional por zona durante la actualización.

Configura opciones para tu actualización

Para realizar actualizaciones más complejas, puedes configurar opciones adicionales. Estas opciones se describen en la siguiente sección.

Modo

Para las actualizaciones progresivas automatizadas, debes configurar el modo en proactiva.

Como alternativa, si una actualización automática puede ser demasiado disruptiva, puedes optar por realizar una actualización oportunista. El MIG aplica una actualización oportunista solo cuando inicias de forma manual la actualización en instancias seleccionadas o cuando se crean instancias nuevas. Se pueden crear nuevas instancias cuando tú o cuando otro servicio, como un escalador automático, cambia el tamaño del MIG. Compute Engine no inicia solicitudes de manera activa para aplicar actualizaciones oportunistas en instancias existentes.

Si deseas obtener más información sobre las actualizaciones automatizadas y las actualizaciones selectivas, consulta Elige entre actualizaciones automáticas y selectivas.

Aumento máximo

Usa la opción maxSurge para configurar cuántas instancias nuevas puede crear el MIG superior a su targetSize durante una actualización automática. Por ejemplo, si estableces maxSurge en 5, el MIG usa la plantilla de instancias nueva para crear hasta 5 instancias nuevas por encima de su tamaño de destino. Si estableces un valor mayor de maxSurge, se acelera tu actualización, por el costo de instancias adicionales, y se factura de acuerdo con la hoja de precios de Compute Engine.

Puedes especificar un número fijo o, si el grupo de instancias administrado tiene 10 instancias o más, un porcentaje. Si estableces un porcentaje, el Actualizador redondea el número de instancias de ser necesario.

Si no estableces el valor maxSurge, se usa el valor predeterminado. Para los MIG zonales, el valor predeterminado para maxSurge es 1. En los MIG regionales, el valor predeterminado es la cantidad de zonas asociadas con el grupo, de forma predeterminada es 3.

maxSurge solo funciona si tienes una cuota o recursos suficientes para admitir los recursos adicionales.

Esta opción solo se reconoce cuando se configura con la acción mínima REPLACE, pero no es compatible con la configuración de la acción RESTART.

Cantidad máxima no disponible

Usa la opción maxUnavailable para configurar cuántas instancias no están disponibles en cualquier momento durante una actualización automática. Por ejemplo, si estableces maxUnavailable en 5, entonces solo 5 instancias se desconectan para actualizarse a la vez. Usa este parámetro para controlar cuánto interrumpe la actualización a tu servicio y controlar la frecuencia con la que se implementa la actualización.

Este número también incluye cualquier instancia que no esté disponible por otros motivos. Por ejemplo, si el grupo está en proceso de cambiar el tamaño, puede que las instancias en creación no estén disponibles. Estas instancias se toman en cuenta en el número maxUnavailable.

Puedes especificar un número fijo o, si el grupo tiene 10 instancias o más, un porcentaje. Si estableces un porcentaje, el Actualizador redondea la cantidad de instancias, de ser necesario.

Si no deseas que ninguna máquina no esté disponible durante una actualización, establece el valor maxUnavailable en 0 y el valor maxSurge en más de 0. Con esta configuración, Compute Engine quita cada máquina anterior solo después de que se crea y se está ejecutando la nueva máquina de reemplazo.

Si no estableces el valor maxUnavailable, se usa el valor predeterminado. Para los MIG zonales, el valor predeterminado es 1. En los MIG regionales, el valor predeterminado es la cantidad de zonas asociadas con el grupo, de forma predeterminada es 3.

Tiempo de espera mínimo

Usa la opción minReadySec para especificar la cantidad de tiempo de espera antes de considerar que una instancia nueva o reiniciada está actualizada. Usa esta opción para controlar la velocidad a la que se implementa la actualización automática. El temporizador comienza cuando se cumplen las siguientes condiciones:

Ten en cuenta que para que la verificación de estado se muestre en buen estado, el Actualizador espera las siguientes condiciones:

  1. Espera hasta el período especificado por el valor autohealingPolicies.initialDelaySec del MIG para que la verificación de estado muestre HEALTHY.
  2. Luego, espera el período especificado por minReadySec.

Si la verificación de estado no muestra HEALTHY dentro de initialDelaySec, entonces el Actualizador determina que la instancia de VM está en mal estado y puede detener la actualización. Mientras la instancia de VM espera la verificación durante los períodos de initialDelaySec y minReadySec, la currentAction de la instancia es VERIFYING. Sin embargo, el estado de la instancia de VM subyacente sigue siendo RUNNING.

Si no hay verificaciones de estado del grupo de instancias, el temporizador comienza cuando el estado de la instancia es RUNNING.

El valor máximo de la propiedad minReadySec es 3,600 segundos (1 hora).

Acción mínima

Usa la opción de acción mínima para especificar la acción mínima que debe realizar una actualización automática a fin de actualizar las instancias en el grupo. Por ejemplo, si estableces REPLACE como la acción mínima, todas las instancias afectadas se borran y se reemplazan con instancias nuevas, sin importar si es necesario o no.

Establecer una acción mínima garantiza que el Actualizador realice esa acción como mínimo. Sin embargo, si el Actualizador determina que la acción mínima que especificas no es suficiente para realizar la actualización, podría realizar una acción más disruptiva. Por ejemplo, si configuras RESTART como la acción mínima, el Actualizador intenta reiniciar las instancias para aplicar la actualización. Sin embargo, si cambias el SO, lo que no puede realizarse mediante la reinicio de la instancia, el Actualizador reemplaza las instancias en el grupo por instancias de VM nuevas.

Las acciones posibles son REPLACE o RESTART:

  • RESTART. Reinicia la instancia mediante una solicitud stop y start. Si la solicitud de actualización requiere que se reemplace la instancia para aplicar los cambios (por ejemplo, cambiar la imagen requiere que se borre y se reemplace la instancia), el Actualizador realiza un REPLACE.

  • REPLACE. Borra la instancia existente y crea una a partir de la plantilla de destino. El Actualizador crea una instancia con todas las propiedades de instancia nuevas, como las nuevas direcciones IP internas y externas.

En el siguiente diagrama se muestra cómo afectan estas opciones a tus instancias.

Cómo afectan las opciones de la política de actualización a tu solicitud.

Método de reemplazo

De forma predeterminada, cuando actualizas un MIG, el grupo borra las instancias de VM y las cambia por instancias nuevas con nombres nuevos. Si necesitas preservar los nombres de tus instancias de VM, usa la opción replacementMethod.

Preservar nombres de instancias existentes puede ser útil si tienes aplicaciones o sistemas que dependen del uso de nombres de instancias específicos. Por ejemplo, algunas aplicaciones, como Memcached, dependen de nombres de instancias porque no tienen un servicio de descubrimiento; por lo tanto, cada vez que un nombre de instancia cambia, la aplicación pierde conexión con esa VM específica.

Para conservar los nombres de las instancias, configura el método de reemplazo en RECREATE en lugar de SUBSTITUTE.

Métodos de reemplazo de instancias administrados

Estos son los valores válidos: de replacementMethod:

  • SUBSTITUTE (predeterminado) Reemplaza las instancias de VM más rápido durante las actualizaciones porque se crean VM nuevas antes de que se cierren las anteriores. Sin embargo, los nombres de las instancias no se conservan porque las instancias anteriores los siguen usando.

  • RECREATE. Conserva los nombres de las instancias mediante una actualización. Compute Engine libera el nombre de la instancia cuando se cierra la VM anterior. Luego, Compute Engine crea una instancia nueva con ese mismo nombre. Para usar este modo, debes establecer maxSurge en 0.

Para obtener más información, consulta Conserva nombres de instancias.

Ejemplos de actualizaciones adicionales

Aquí hay algunos ejemplos de línea de comandos con opciones de configuración comunes.

Realiza una actualización progresiva de todas las instancias de VM, pero crea hasta 5 instancias nuevas por encima del tamaño de destino a la vez

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=NEW_TEMPLATE \
    --max-surge=5 \
    [--zone=ZONE | --region=REGION]

Realiza una actualización progresiva con un máximo de 3 máquinas no disponibles y un tiempo de espera mínimo de 3 minutos antes de marcar una instancia nueva como disponible

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=NEW_TEMPLATE \
    --min-ready=3m \
    --max-unavailable=3 \
    [--zone=ZONE | --region=REGION]

Realiza una actualización progresiva de todas las instancias de VM, pero crea hasta un 10% de instancias nuevas por encima del tamaño de destino a la vez

Por ejemplo, si tienes 1,000 instancias y ejecutas el siguiente comando, el Actualizador crea hasta 100 instancias antes de comenzar a quitar las instancias que estén ejecutando la plantilla de instancias anterior.

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=NEW_TEMPLATE \
    --max-surge=10% \
    [--zone=ZONE | --region=REGION]

Actualizaciones canary

Una actualización de la versión canary es una actualización que se aplica a un subconjunto de instancias en el grupo. Con una actualización de la versión canary, puedes probar nuevas funciones o actualizaciones en un subconjunto aleatorio de instancias, en lugar de lanzar una actualización que podría ser perjudicial para todas tus instancias. Si una actualización no funciona bien, solo necesitas revertir el subconjunto de instancias, lo que minimiza la interrupción para tus usuarios.

Una actualización de la versión canary es igual a una actualización progresiva estándar, excepto que la cantidad de instancias que se deben actualizar es menor que el tamaño total del grupo de instancias. Al igual que una actualización progresiva estándar, puedes configurar opciones adicionales para controlar el nivel de interrupción del servicio.

Inicia una actualización canary

Para iniciar una actualización canary, especifica hasta dos versiones de plantilla de instancias, por lo general, se usa una plantilla de instancias nueva con el fin de realizar pruebas canary y la plantilla de instancias actual para el resto de las instancias. Por ejemplo, puedes especificar que el 20% de las instancias se creen en función de una NEW_INSTANCE_TEMPLATE, mientras que el resto de las instancias continúen ejecutándose en la OLD_INSTANCE_TEMPLATE. No puedes especificar más de dos plantillas de instancias a la vez.

Siempre debes especificar un tamaño de destino (targetSize) para la versión canary. No puedes iniciar una actualización canary si omites el tamaño de destino para la versión canary. Por ejemplo, si especificaste que el 10% de las instancias deben usarse para realizar pruebas canary, el 90% restante no se toca y usan la plantilla de instancias actual.

Console

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

    Ir a Grupos de instancias

  2. Selecciona el grupo de instancias administrado que deseas actualizar.
  3. En la parte superior de la página, haz clic en Actualización progresiva.
  4. Haz clic en Agregar plantilla y elige la nueva plantilla de instancias para realizar pruebas canary.
  5. En Tamaño de destino, ingresa el porcentaje o el número fijo de instancias que deseas usar para realizar pruebas canary en la nueva plantilla de instancias.
  6. Si lo deseas, puedes configurar otras opciones de actualización.
  7. Haz clic en Actualizar para comenzar la actualización.

gcloud

Usa el comando rolling-action start-update Proporciona la plantilla actual y la nueva para expresar de forma explícita cuántas instancias debe usar cada plantilla:

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=CURRENT_INSTANCE_TEMPLATE_NAME \
    --canary-version=template=NEW_TEMPLATE,target-size=SIZE \
    [--zone=ZONE | --region=REGION]

Reemplaza lo siguiente:

  • INSTANCE_GROUP_NAME: Es el nombre del grupo de instancias.
  • CURRENT_INSTANCE_TEMPLATE_NAME: La plantilla de instancias que ejecuta el grupo de instancias
  • NEW_TEMPLATE: Es la plantilla nueva en la que deseas realizar pruebas de la versión canary.
  • SIZE: La cantidad o el porcentaje de instancias a la que deseas aplicar esta actualización. Debes aplicar la propiedad target-size a la plantilla --canary-version. Solo puedes establecer un porcentaje si el grupo de instancias contiene 10 instancias o más.
  • ZONE: Para MIG zonales, proporciona la zona.
  • REGION: Para los MIG regionales, proporciona la región.

Por ejemplo, el siguiente comando realiza una actualización canary que lanza example-template-B al 10% de las instancias en el grupo:

gcloud compute instance-groups managed rolling-action start-update example-mig \
    --version=template=example-template-A \
    --canary-version=template=example-template-B,target-size=10%

API

Llama al método patch en un recurso de MIG regional o zonal. En el cuerpo de la solicitud, incluye la plantilla de instancias actual y la de instancias nuevas en la que deseas realizar pruebas de la versión canary. Por ejemplo:

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

{
 "versions": [
  {
   "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE",
   "targetSize": {
    "[percent|fixed]": NUMBER|PERCENTAGE # Use `fixed` for a specific number of instances
   }
  },
  {
   "instanceTemplate": "global/instanceTemplates/CURRENT_INSTANCE_TEMPLATE_NAME"
  }
 ]
}

Reemplaza lo siguiente:

  • NEW_TEMPLATE: el nombre de la nueva plantilla con la que quieres realizar una actualización canary.
  • NUMBER|PERCENTAGE: el número fijo o porcentaje de instancias para realizar pruebas canary en esta actualización. Solo puedes establecer un porcentaje si el grupo de instancias contiene 10 instancias o más. De lo contrario, proporciona un número fijo.
  • CURRENT_INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancias actual que el grupo ejecuta.

Después de realizar una solicitud, puedes supervisar la actualización para saber cuándo finalizó.

Avanza una actualización canary

Después de ejecutar una actualización canary, puedes decidir si deseas confirmar la actualización al 100% del MIG o revertirla.

Console

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

    Ir a Grupos de instancias

  2. Selecciona el grupo de instancias administrado que deseas actualizar.
  3. En la parte superior de la página, haz clic en Actualización progresiva.
  4. En Plantilla, actualiza el tamaño de destino de la plantilla canary al 100% para reenviar la plantilla a todas sus instancias. O bien, puedes reemplazar la plantilla principal con la plantilla canary y establecer el tamaño objetivo al 100%. Luego, puedes quitar el segundo campo de plantilla por completo.
  5. Haz clic en Actualizar para comenzar la actualización.

gcloud

Si deseas confirmar tu actualización canary, reenvía la actualización mediante la emisión de otro comando rolling-action start-update pero establece solo la marca version y omite la marca --canary-version.

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=NEW_TEMPLATE \
    [--zone=ZONE | --region=REGION]

API

Llama al método patch en un recurso de MIG regional o zonal. En el cuerpo de la solicitud, especifica la nueva plantilla de instancias como version y omite la plantilla de instancias anterior de tu cuerpo de solicitud. Omite la especificación de tamaño de destino para lanzar la actualización en el 100% de las instancias. Por ejemplo:

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

{
"versions": [
   {
   "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE" # New instance template
   }
 ]
}

Supervisa las actualizaciones

Después de iniciar una actualización, la actualización puede tardar un poco en lanzarse en todas las instancias afectadas. Puedes supervisar el progreso de una actualización mediante la inspección del estado del grupo o la revisión de las acciones actuales en las instancias.

Estado del grupo

A nivel de grupo, Compute Engine propaga un campo de solo lectura llamado status que contiene una marca versionTarget.isReached y una marca isStable. Puedes usar la herramienta de gcloud o la API de Compute Engine para acceder a estas marcas. También puedes usar Cloud Console para ver el número actual y planificado de instancias que se están actualizando.

Console

Puedes supervisar una actualización progresiva para un grupo desde la página de detalles del grupo.

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

    Ir a Grupos de instancias

  2. Selecciona el grupo de instancias administrado que deseas supervisar. La página de resumen para el grupo de instancias muestra la plantilla que usa cada instancia.
  3. Para ver los detalles, haz clic en la pestaña Detalles.
  4. En Plantilla de instancias, puedes ver la cantidad actual y de destino de instancias para cada plantilla de instancias, además de los parámetros de actualización.

gcloud

Usa el comando describe.

gcloud compute instance-groups managed describe INSTANCE_GROUP_NAME \
    [--zone=ZONE | --region=REGION]

También puedes usar el comando gcloud compute instance-groups managed wait-until con la marca --version-target-reached con el fin de esperar hasta que status.versionTarget.isReached se configure en true para el grupo:

gcloud compute instance-groups managed wait-until INSTANCE_GROUP_NAME \
    --version-target-reached \
    [--zone=ZONE | --region=REGION]

API

Llama al método get en un recurso de MIG regional o zonal.

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

Verifica si el lanzamiento de una actualización está completo

Verifica si el lanzamiento de una actualización se completa mediante la verificación del valor del campo status.versionTarget.isReached del MIG:

status.versionTarget.isReached configurado como true indica que todas las instancias de VM se crearon o están en proceso de creación mediante la versión de destino.

status.versionTarget.isReached se establece en false para indicar que al menos una VM aún no usa la versión de destino. O bien, en el caso de una actualización canary, false indica que la cantidad de VM que usa una versión de destino no coincide con su tamaño de destino.

Comprueba si el grupo de instancias administrado es estable

Para verifica que todas las instancias en un grupo de instancias administrado estén en ejecución y en buen estado, comprueba el valor del campo status.isStable del grupo.

status.isStable configurado como false indica que los cambios están activos, pendientes o que el MIG se está modificando.

status.isStable establecido en true indica lo siguiente:

  • Ninguna de las instancias del MIG se somete a ningún tipo de cambio, y la currentAction para todas las instancias es NONE.
  • No hay cambios pendientes para las instancias en el MIG.
  • No se modifica el MIG en sí.

Recuerda que la estabilidad de un MIG depende de muchos factores, puesto que un MIG se puede modificar de varias maneras. Por ejemplo:

  • Realizas una solicitud para implementar una plantilla de instancias nueva.
  • Realizas una solicitud para crear, borrar, cambiar el tamaño o actualizar las instancias en el MIG.
  • Un escalador automático solicita cambiar el tamaño del MIG.
  • Un recurso de reparación automática reemplaza una o más instancias en mal estado en el MIG.
  • En un MIG regional, se redistribuyen algunas de las instancias.

Cuando todas las acciones se completan, status.isStable se vuelve a establecer en true para ese MIG.

Acciones actuales en las instancias

Usa la herramienta de línea de comandos de gcloud o la API de Compute Engine para ver detalles sobre las instancias en un grupo de instancias administrado. Los detalles incluyen el estado de la instancia y las acciones actuales que realiza el grupo en sus instancias.

gcloud

Todas las instancias administradas

Para verificar el estado y las acciones actuales en todas las instancias del grupo, usa el comando list-instances.

gcloud compute instance-groups managed list-instances INSTANCE_GROUP_NAME \
    [--zone=ZONE | --region=REGION]

El comando muestra una lista de instancias del grupo, incluidos su estado, acciones actuales y otros detalles:

NAME               ZONE           STATUS   HEALTH_STATE  ACTION  INSTANCE_TEMPLATE  VERSION_NAME  LAST_ERROR
vm-instances-9pk4  us-central1-f                          CREATING  my-new-template
vm-instances-h2r1  us-central1-f  STOPPING                DELETING  my-old-template
vm-instances-j1h8  us-central1-f  RUNNING                 NONE      my-old-template
vm-instances-ngod  us-central1-f  RUNNING                 NONE      my-old-template

La columna HEALTH_STATE aparece vacía, a menos que hayas configurado la verificación de estado.

Una instancia administrada específica

Para verificar el estado y la acción actual de una instancia específica del grupo, usa el comando describe-instance.

gcloud compute instance-groups managed describe-instance INSTANCE_GROUP_NAME \
    --name INSTANCE_NAME \
    [--zone=ZONE | --region=REGION]

El comando muestra detalles sobre la instancia, incluidos su estado, acción actual y, para los MIG con estado, el estado preservado:

currentAction: NONE
id: '6789072894767812345'
instance: https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/example-mig-hz41
instanceStatus: RUNNING
name: example-mig-hz41
preservedStateFromConfig:
  metadata:
    example-key: example-value
preservedStateFromPolicy:
  disks:
    persistent-disk-0:
      autoDelete: NEVER
      mode: READ_WRITE
      source: https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/disks/example-mig-hz41
version:
  instanceTemplate: https://www.googleapis.com/compute/v1/projects/example-project/global/instanceTemplates/example-template

API

Llama al método listManagedInstances en un recurso de MIG regional o zonal. Por ejemplo, para ver detalles sobre las instancias en un recurso de MIG zonal, puedes realizar la siguiente solicitud:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME/listManagedInstances

La llamada muestra una lista de instancias para el MIG, incluidos los valores de instanceStatus y currentAction de cada instancia.

{
 "managedInstances": [
  {
   "instance": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-f/instances/vm-instances-prvp",
   "id": "5317605642920955957",
   "instanceStatus": "RUNNING",
   "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/example-project/global/instanceTemplates/example-template",
   "currentAction": "REFRESHING"
  },
  {
   "instance": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-f/instances/vm-instances-pz5j",
   "currentAction": "DELETING"
  },
  {
   "instance": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-f/instances/vm-instances-w2t5",
   "id": "2800161036826218547",
   "instanceStatus": "RUNNING",
   "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/example-project/global/instanceTemplates/example-template",
   "currentAction": "REFRESHING"
  }
 ]
}

Para ver una lista de los valores de campo instanceStatus válidos, consulta la sección Ciclo de vida de las instancias de VM.

Si una instancia experimenta algún tipo de cambio, el grupo de instancias administrado establece el campo currentAction de la instancia como una de las siguientes acciones para ayudarte a realizar un seguimiento del progreso del cambio. De lo contrario, el campo currentAction se configura como NONE.

Los valores posibles de currentAction son los siguientes:

  • ABANDONING. La instancia se está quitando del MIG.
  • CREATING: la instancia está en proceso de creación.
  • CREATING_WITHOUT_RETRIES. La instancia se está creando sin reintentos. Si la instancia no se crea en el primer intento, el MIG no intenta reemplazar la instancia de nuevo.
  • DELETING: La instancia está en proceso de borrado.
  • RECREATING: La instancia se está reemplazando.
  • REFRESHING: La instancia se está quitando de sus grupos de destino actuales y se está agregando de nuevo a la lista de grupos de destino actuales (esta lista puede ser igual o diferente a la de los grupos de destino existentes).
  • RESTARTING. la instancia está en proceso de reinicio con los métodos stop y start.
  • VERIFYING: la instancia se creó y está en proceso de verificación.
  • NONE: no hay ninguna acción en ejecución en la instancia.

Revierte una actualización

No hay ningún comando explícito para revertir una actualización a una versión anterior, pero si decides hacerlo (ya sea una actualización completa o una canary), puedes realizar una solicitud de actualización nueva y pasar la plantilla de instancias a la que deseas revertir.

gcloud

Por ejemplo, el siguiente comando de la herramienta de gcloud revierte una actualización lo más rápido posible. Reemplaza OLD_INSTANCE_TEMPLATE por el nombre de la plantilla de instancias a la que deseas revertir.

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=OLD_INSTANCE_TEMPLATE_NAME \
    --max-unavailable=100% \
    [--zone=ZONE | --region=REGION]

API

Llama al método patch en un recurso de MIG regional o zonal.

En el cuerpo de la solicitud, especifica la plantilla de instancias anterior como version:

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

{
  "updatePolicy":
  {
    "maxUnavailable":
    {
      "percent": 100
    }
  },
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/OLD_INSTANCE_TEMPLATE_NAME" # Old instance template
    }
  ]
}

En el caso de un MIG regional con menos de 10 instancias, debes usar un valor fijo para maxUnavailable y establecer el valor en el número de instancias en el grupo.

El Actualizador trata una solicitud de reversión de la misma manera que una solicitud de actualización normal, por lo que puedes especificar opciones de actualización adicionales.

Detén una actualización

No hay ningún método o comando explícito para detener una actualización. Puedes cambiar una actualización de proactiva a oportunista y si el grupo de instancias administrado no está en un proceso de cambio de tamaño llevado a cabo por otros servicios como el escalador automático, el cambio a oportunista detiene por completo la actualización.

Para cambiar una actualización de proactiva a oportunista mediante la herramienta de gcloud, ejecuta el siguiente comando:

gcloud compute instance-groups managed rolling-action stop-proactive-update INSTANCE_GROUP_NAME \
    [--zone=ZONE | --region=REGION]

Para detener por completo la actualización después de convertirla de proactiva a oportunista, puedes detenerla mediante estos pasos:

  1. Haz una solicitud para determinar cuántas instancias se actualizaron:

    gcloud compute instance-groups managed list-instances INSTANCE_GROUP_NAME \
        [--zone=ZONE | --region=REGION]

    La herramienta de gcloud muestra una respuesta que incluye una lista de instancias en el grupo y sus estados actuales:

    NAME               ZONE           STATUS   HEALTH_STATE  ACTION    INSTANCE_TEMPLATE  VERSION_NAME  LAST_ERROR
    vm-instances-9pk4  us-central1-f  RUNNING  HEALTHY       NONE      example-new-template
    vm-instances-j1h8  us-central1-f  RUNNING  HEALTHY       NONE      example-old-template
    vm-instances-ngod  us-central1-f  STAGING  UNKNOWN       CREATING  example-new-template
    

    En este ejemplo, dos instancias ya se actualizaron.

  2. A continuación, haz una solicitud para realizar una actualización nueva, pero pasa la cantidad de instancias que ya se actualizaron como el tamaño de destino:

    gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
        --version template=OLD_INSTANCE_TEMPLATE_NAME \
        --canary-version template=NEW_INSTANCE_TEMPLATE_NAME,target-size=2 \
        [--zone=ZONE | --region=REGION]

    Para el Actualizador, esta actualización parece completa, por lo que no se actualiza ninguna otra instancia y se detiene de manera efectiva.

Controla la velocidad de una actualización progresiva

De forma predeterminada, cuando realizas una solicitud de actualización, el actualizador realiza la actualización lo más rápido posible. Si no estás seguro de querer aplicar una actualización completa o estás probando de manera tentativa los cambios, puedes controlar la velocidad de la actualización mediante los siguientes métodos.

  1. Inicia una actualización canary en lugar de una actualización completa.
  2. Establece un valor grande de minReadySec. Establecer este valor hace que el actualizador espere esta cantidad de segundos antes de considerar que la instancia se actualizó de forma correcta y pasar a la siguiente instancia.
  3. Habilita la verificación de estado para que el actualizador espere a que tu aplicación se inicie e informe una señal de buen estado, antes de considerar que la instancia se actualizó de modo correcto y pasar a la siguiente instancia.
  4. Establece valores bajos de maxUnavailable y maxSurge. Esto garantiza que solo se actualice un número mínimo de instancias a la vez.
  5. Actualiza instancias de manera selectiva en un MIG en lugar de usar una actualización automática.

También puedes usar una combinación de estos métodos para controlar la frecuencia de tu actualización.

Realiza un reemplazo progresivo o un reinicio

Un reinicio realiza los métodos stop y start en las instancias, mientras que un reemplazo borra y crea instancias de forma activa.

Un reinicio o reemplazo progresivo no cambia nada más sobre el grupo, incluida la plantilla de instancias. Solo actualiza las instancias del grupo mediante el método que elijas.

Hay muchas razones por las puedes querer un reinicio o un reemplazo progresivos. Por ejemplo, es posible que desees actualizar tus instancias de VM de vez en cuando por uno de los siguientes motivos:

  • Limpiar las pérdidas de memoria
  • Reiniciar tu aplicación para que pueda ejecutarse desde una máquina nueva.
  • Forzar un reemplazo periódico como práctica recomendada para probar tus VM.
  • Actualizar la imagen del sistema operativo de la VM o volver a ejecutar la secuencia de comandos de inicio para actualizar tu software

Usa Cloud Console, la herramienta de línea de comandos de gcloud o la API de Compute Engine para realizar un reinicio o un reemplazo.

Console

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

    Ir a Grupos de instancias

  2. Selecciona el grupo de instancias administrado que deseas actualizar.
  3. En la parte superior de la página, haz clic en Reiniciar o reemplazar de manera progresiva.
  4. Elige si deseas reiniciar o reemplazar tus instancias.
  5. De manera opcional, puedes activar o desactivar las opciones de configuración como aumento máximo, opciones de máximo de instancias no disponibles y tiempo de espera mínimo.
  6. Haz clic en el botón Reiniciar o Reemplazar para iniciar la actualización.

gcloud

Utiliza el comando restart o el comando replace.

El siguiente comando reemplaza todas las instancias del MIG, una a la vez:

gcloud compute instance-groups managed rolling-action replace INSTANCE_GROUP_NAME

El siguiente comando reinicia cada instancia, una a la vez:

gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_NAME

Puedes personalizar aún más cada uno de estos comandos con las mismas opciones disponibles para las actualizaciones (por ejemplo, maxSurge y maxUnavailable).

API

Llama al método patch en un recurso de MIG regional o zonal.

En el campo updatePolicy.minimalAction, especifica RESTART o REPLACE. En ambos casos, también debes proporcionar las propiedades versions.instanceTemplate y versions.name para activar la acción.

Por ejemplo, para un MIG zonal, la siguiente solicitud muestra la configuración mínima necesaria a fin de reiniciar de forma automática el 100% de las instancias.

PATCH https://compute.googleapis.com/compute/v1/projects/example-project/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME

{
 "updatePolicy": {
  "minimalAction": "RESTART",
  "type": "PROACTIVE"
 },
 "versions": [
  {
   "instanceTemplate": "global/instanceTemplates/CURRENT_INSTANCE_TEMPLATE_NAME",
   "name": "v2"
  }
 ]
}

Ejemplos adicionales de reemplazo o reinicio

Realiza un reinicio progresivo de todas las VM, de a dos a la vez

Este comando reinicia todas las VM en el grupo, de dos en dos. Ten en cuenta que no se especifica una plantilla de instancias nueva.

gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_NAME \
    --max-unavailable=2 \
    [--zone=ZONE | --region=REGION]

Realiza un reinicio progresivo de todas las VM lo más rápido posible

gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_NAME \
    --max-unavailable=100% \
    [--zone=ZONE | --region=REGION]

Realiza un reemplazo progresivo de todas las VM lo más rápido posible

gcloud compute instance-groups managed rolling-action replace INSTANCE_GROUP_NAME  \
    --max-unavailable=100% \
    [--zone=ZONE | --region=REGION]

Preserva los nombres de las instancias

Si necesitas preservar los nombres de las instancias de VM en una actualización, configura el replacementMethod como RECREATE. También debes configurar maxUnavailable para que sea mayor que 0 y maxSurge en 0. Volver a crear instancias en lugar de reemplazarlas hace que la actualización tarde más en completarse, pero las instancias actualizadas mantienen sus nombres.

Si no especificas un método de reemplazo, se usa el valor updatePolicy.replacementMethod actual del MIG. Si no se configura, se usa el valor predeterminado substitute, que reemplaza las instancias de VM con instancias nuevas que tienen nombres generados de manera aleatoria.

gcloud

Cuando emitas un comando rolling-action, incluye la marca --replacement-method=recreate.

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --replacement-method=recreate \
    --version=template=NEW_TEMPLATE \
    --max-unavailable=5 \
    [--zone=ZONE | --region=REGION]

API

Llama al método patch en un recurso de MIG regional o zonal. En el cuerpo de la solicitud, incluye la propiedad updatePolicy.replacementMethod.

PATCH /compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME
{
    "updatePolicy": {
        "type": "PROACTIVE",
        "maxUnavailable": { "fixed": 5 },
        "replacementMethod": "RECREATE"
    },
    "versions": [ {
        "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE"
    } ]
}

Después de realizar una solicitud, puedes supervisar la actualización para saber cuándo finalizó.

Actualiza un grupo de instancias administrado regional

Un MIG regional contiene instancias de VM que se distribuyen en varias zonas dentro de una región, a diferencia de un MIG zonal, que solo contiene instancias en una zona. Los MIG regionales te permiten distribuir tus instancias en más de una zona para mejorar la disponibilidad de tu aplicación y admitir casos extremos en los que una zona falla o un grupo completo de instancias deja de responder.

Realizar una actualización en un MIG regional es igual que realizar una actualización en un MIG zonal, con algunas excepciones que se describen a continuación. Cuando inicias la actualización de un MIG regional, el Actualizador siempre actualiza las instancias de manera proporcional y uniforme en cada zona. No puedes elegir qué instancias se actualizan primero y no puedes actualizar instancias en una sola zona.

Diferencias entre la actualización de los MIG regionales y zonales

Los MIG regionales tienen los siguientes valores de actualización predeterminados:

  • maxUnavailable=NUMBER_OF_ZONES
  • maxSurge=NUMBER_OF_ZONES

NUMBER_OF_ZONES es la cantidad de zonas asociadas con el MIG regional. De forma predeterminada, la cantidad de zonas para un MIG regional es 3. Pero puedes seleccionar una cantidad diferente.

Si usas números fijos al momento de especificar una actualización, el número fijo debe ser 0 o igual o mayor que el número de zonas asociadas con el MIG regional. Por ejemplo, si el grupo se distribuye en tres zonas, no puedes establecer maxSurge en 12 porque el Actualizador debe crear una instancia adicional en cada una. de las tres zonas.

Usa un número fijo o un porcentaje en las solicitudes de actualización

Si especificas un número fijo en las solicitudes de actualización, este se divide por el número de zonas en el MIG regional y se distribuye de forma equitativa. Por ejemplo, si especificas maxSurge=10, el Actualizador divide 10 entre el número de zonas en la región y crea instancias basadas en ese número. Si la cantidad de instancias no se divide de forma equitativa entre las zonas, el Actualizador agrega las instancias restantes a una zona aleatoria. Por lo tanto, para 10 instancias en tres zonas, dos de las zonas obtienen 3 instancias y una obtiene 4. Se aplica la misma lógica a los parámetros maxUnavailable y targetSize para las actualizaciones canary.

Puedes especificar un porcentaje solo si tu MIG contiene 10 o más instancias de VM. Los porcentajes se manejan de manera apenas diferente según la situación:

  • Si especificas un porcentaje de instancias de VM para una actualización canary, el Actualizador intenta distribuir las instancias de forma equitativa entre las zonas. El resto se redondea hacia arriba o hacia abajo en cada zona, pero la diferencia total no es de más de 1 instancia de VM por grupo. Por ejemplo, para un MIG con 10 instancias y un porcentaje de tamaño de destino del 25%, la actualización se lanza en 2 o 3 instancias de VM.

  • Si especificas un porcentaje para las opciones de actualización como maxSurge y maxUnavailable, los porcentajes se redondean de manera independiente por zona.

¿Qué sigue?