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

En este documento, se describe cómo aplicar de forma automática las actualizaciones de configuración a las instancias de máquina virtual (VM) en un grupo de instancias administrado (MIG).

Compute Engine mantiene las VM en un MIG en función de la configuración que especifiques en una plantilla de instancias y la configuración con estado opcional. Te recomendamos que actualices esta configuración cada tanto.

Cuando configuras una actualización automatizada, el MIG lanza una versión nueva de una plantilla de instancias de forma automática a todas las VM del grupo o a un subconjunto de ellas. Si tienes una configuración con estado, el MIG también aplica cualquier configuración por instancia sin aplicar a las VM correspondientes.

Puedes controlar la velocidad de implementación, el nivel de interrupción del servicio y la cantidad de instancias que el MIG actualiza con la plantilla nueva mediante una actualización de versión canary. Después de especificar una configuración nueva, no necesitas proporcionar entradas adicionales y la actualización se completa por sí sola.

Como alternativa, si deseas aplicar una configuración nueva de forma selectiva solo a instancias nuevas o específicas de un MIG, consulta Actualiza instancias de forma selectiva en un MIG. A fin de ayudarte a decidir, consulta Elige entre las actualizaciones automáticas y selectivas.

Antes de comenzar

Limitaciones

  • Si tienes un MIG con estado y deseas usar actualizaciones progresivas automatizadas, debes mantener los nombres de las instancias cuando las reemplaces o, de manera equivalente, 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 implementa de forma gradual en todas las instancias de un MIG hasta que todas estén actualizadas a la configuración deseada más reciente. La actualización progresiva omite de forma automática las instancias que ya tienen la configuración más reciente.

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 nueva plantilla 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 aplique a todas 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 Actualizar VM.

  4. En Nueva plantilla, haz clic en la lista desplegable y selecciona la plantilla nueva que se actualizará. El tamaño objetivo se establece de forma automática en 100%, lo que indica que se actualizarán todas las instancias.

  5. En Actualizar configuración, expande el menú de selección y selecciona Automático como Tipo de actualización. Deja los valores predeterminados para las otras opciones.

  6. Haz clic en Actualizar VM 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 actualizaciones más complejas, puedes configurar opciones adicionales, como se describe en las siguientes secciones.

Modo

Los grupos de instancias administrados admiten dos tipos de modo de actualización:

  • Actualizaciones automáticas o proactivas
  • Actualizaciones oportunistas o selectivas

Si deseas aplicar actualizaciones automáticamente, configura el modo como proactivo.

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.

Cantidad máxima de instancias sobreaprovisionadas

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 de maxSurgees 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.

Si tu actualización no requiere que se reemplacen VM, esta opción se ignora. Para forzar el reemplazo de las VM durante una actualización, configura la opción acción mínima.

Cantidad máxima de instancias no disponibles

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 se desconectan 5 instancias 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).

En el siguiente diagrama, se muestra cómo las opciones de tamaño objetivo, máximo no disponible, aumento máximo y tiempo de espera mínimo afectan a las instancias. Para obtener más información sobre el tamaño del destino, consulta Actualizaciones de versión canary.

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

Acción mínima

Usa la opción de acción mínima para minimizar la interrupción tanto como sea posible o para aplicar una acción más disruptiva que lo necesario. Por ejemplo, Compute Engine no necesita reiniciar una VM para cambiar sus metadatos. Sin embargo, si tu aplicación lee los metadatos de la instancia solo cuando se reinicia una VM, puedes establecer la acción mínima para que se realice un reinicio a fin de captar los cambios de metadatos.

Si tu actualización requiere una acción más disruptiva que la establecida con esta marca, Compute Engine realiza la acción necesaria para ejecutar la actualización. Por ejemplo, si especificas un reinicio 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 el reinicio de la instancia, el Actualizador reemplaza las instancias en el grupo por instancias de VM nuevas.

Para obtener más información, incluidas las opciones válidas, consulta Controla el nivel de interrupción durante una actualización progresiva.

Acción más disruptiva permitida

Usa la opción de acción más disruptiva permitida para evitar que se realice una actualización que requiera más interrupciones de las que puedes permitirte. Si una actualización no se puede completar debido a esta configuración, la actualización fallará y tus VM mantendrán su configuración anterior.

Para obtener más información, consulta Controla el nivel de interrupción durante una actualización progresiva.

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 si actualizas el MIG con la herramienta de gcloud o la API de Compute Engine. Como alternativa, si actualizas el MIG desde Cloud Console, selecciona la casilla de verificación Conservar nombres de instancias cuando se reemplacen instancias.

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 beta 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 Actualizar VM.
  4. Haz clic en Agregar una segunda 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 VM 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.

Si deseas ver más opciones, consulta Cómo configurar las opciones para tu actualización.

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 Actualizar VM.
  4. En Nueva plantilla, actualiza el tamaño de destino de la plantilla canary al 100% para reenviar la plantilla a todas sus instancias. También puedes reemplazar la plantilla principal por la plantilla canary para quitar el segundo campo de plantilla.
  5. Haz clic en Actualizar VM 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 nueva configuración puede tardar un poco en lanzarse en todas las instancias afectadas. Puedes supervisar el progreso de una actualización si verificas lo siguiente:

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 \
    --instance 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, sigue 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.

Controla el nivel de interrupción durante una actualización progresiva

Según la naturaleza de una actualización, se puede interrumpir el estado del ciclo de vida de una instancia. Por ejemplo, para cambiar el disco de arranque de una instancia, se debe reemplazar la instancia. Puedes controlar el nivel de interrupción que se produce durante una actualización progresiva si configuras las siguientes opciones:

  • Acción mínima: Usa esta opción para minimizar la interrupción tanto como sea posible o aplicar una acción más disruptiva que lo necesario.

    • Para limitar las interrupciones tanto como sea posible, establece la acción mínima en REFRESH. Si tu actualización requiere una acción más disruptiva, Compute Engine realiza la acción necesaria para ejecutar la actualización.
    • Para aplicar una acción más disruptiva que la estrictamente necesaria, configura la acción mínima en RESTART o REPLACE. Por ejemplo, Compute Engine no necesita reiniciar una VM para cambiar sus metadatos. Sin embargo, si tu aplicación lee los metadatos de la instancia solo cuando se reinicia una VM, puedes establecer la acción mínima en RESTART para que se capturen cambios en los metadatos.
  • Acción más disruptiva permitida: Usa esta opción para evitar que se realice una actualización si requiere más interrupciones de las que puedes permitirte. Si tu actualización requiere una acción más disruptiva que la acción que configuraste con esta marca, la solicitud de actualización fallará. Por ejemplo, si estableces la acción más disruptiva permitida en RESTART, un intento de actualizar la imagen de disco de arranque falla porque esa actualización requiere un reemplazo de instancias, que es una acción más disruptiva que la de reiniciar.

Ambas opciones aceptan los siguientes valores:

ValorDescripción¿Qué propiedades de instancia se pueden actualizar?
REFRESHNo detengas la instancia.Discos, metadatos de instancias y etiquetas adicionales
RESTARTDetén la instancia y vuelve a iniciarla.Tipos de máquina, etiquetas, metadatos de instancia, etiquetas y discos adicionales
REPLACE (predeterminado) . Reemplaza la instancia según el método de método de reemplazo.Todas las propiedades de instancia almacenadas en la plantilla de instancias o la configuración por instancia

La acción más perjudicial permitida no puede ser menos perjudicial que la acción mínima.

Cuando implementas actualizaciones automáticamente, se aplican los siguientes valores predeterminados:

  • La acción mínima predeterminada es REPLACE. Si deseas evitar las interrupciones innecesarias, configura la acción mínima para que sea menos disruptiva.
  • La acción predeterminada más disruptiva permitida es REPLACE. Si no puedes tolerar esta interrupción, establece la acción más disruptiva permitida para que sea menos perjudicial.

Puedes cambiar el comportamiento predeterminado si usas la API de Compute Engine para configurar los campos updatePolicy.minimalAction y updatePolicy.mostDisruptiveAllowedAction en tu recurso de MIG, por ejemplo, si llamas al método regionInstanceGroupManagers.patch. Como alternativa, puedes seleccionar las acciones permitidas para actualizar las VM cuando actualizas el MIG desde Cloud Console. Para ver la configuración actual, consulta Obtén las propiedades de un MIG.

Una actualización falla si requiere una acción más disruptiva que la permitida. Si esto sucede, puedes intentar actualizar nuevamente con una acción permitida más disruptiva o puedes actualizar la instancia de forma selectiva. Compute Engine realiza la validación de mejor esfuerzo para ver si las instancias se pueden actualizar con el límite de interrupción especificado. Pero debido a cambios simultáneos en el sistema, la situación puede cambiar después de que comienza la actualización. Si falla una operación en una instancia en particular, genera una lista de los errores de instancias para ver el error.

Realiza un reemplazo progresivo o un reinicio

Un reinicio progresivo detiene y reinicia todas las instancias, mientras que un reemplazo progresivo reemplaza las instancias según la opción del método de reemplazo. Un reinicio o reemplazo progresivo no cambia nada más sobre el grupo, incluida la plantilla de instancias.

Hay muchas razones por las puedes querer un reinicio o un reemplazo progresivos. Por ejemplo, es posible que desees reiniciar o reemplazar 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 VM.
  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?