Implementa actualizaciones en los MIG

Un grupo de instancias administrado (MIG) contiene una o más instancias de máquinas virtuales (VM) creadas mediante una plantilla de instancias. Para actualizar instancias en un MIG, puedes realizar solicitudes de actualización al grupo como conjunto mediante la función Actualizador de MIG.

El Actualizador de grupos de instancias administrados te permite implementar versiones nuevas de software en las instancias de los grupos de instancias administrados y controlar la velocidad de la implementación, el nivel de interrupción del servicio y el alcance de la actualización. El Actualizador ofrece dos ventajas principales:

  • El lanzamiento de una actualización se realiza automáticamente según tus especificaciones, sin necesidad de una entrada adicional del usuario después de la solicitud inicial.
  • Puedes realizar lanzamientos parciales, lo que permite realizar pruebas canary.

Si permites que se implemente un software nuevo dentro de un grupo de instancias administrado existente, no es necesario que vuelvas a configurar el grupo de instancias o reconectas el balanceo de cargas, el ajuste de escala automático o la reparación automática cada vez que se lanza una nueva versión del software. Sin el Actualizador, las versiones de software nuevas deben implementarse mediante la creación de un nuevo grupo de instancias administrado con una nueva versión de software, que requiera una configuración adicional cada vez, o mediante una recreación manual, iniciada por el usuario, instancia por instancia. Ambos enfoques requieren pasos manuales significativos durante todo el proceso.

Antes de comenzar

Inicia una actualización progresiva básica

Una actualización progresiva es una actualización que se implementa de forma gradual en todas las instancias de un grupo de instancias hasta que todas estén actualizadas. 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 muestra una respuesta exitosa para confirmar que fue válida, pero eso no indica que la actualización se completó de manera correcta. Debes verificar el estado del grupo de instancias administrado para determinar si la actualización se implementó de manera correcta.

  • 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 grupo de instancias administrado, en lugar de una llamada de función explícita.

  • El Actualizador admite hasta dos versiones de plantilla de instancias en el grupo de instancias administrado. Esto significa que puedes especificar dos versiones diferentes de la plantilla de instancias para el grupo de instancias administrado, 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 la página Grupos de instancias

  2. Selecciona el grupo de instancias 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. O bien, puedes activar o desactivar opciones de configuración, como si la actualización es proactiva (el grupo reemplaza instancias de manera activa) o, en cambio, oportunista (el grupo no reemplaza instancias de forma activa, sino que aplica la actualización cuando las instancias se reemplazan por otros medios). También puedes proporcionar aumento máximo, opciones de máximo de instancias no disponibles y tiempo de espera mínimo.
  7. Haz clic en Actualizar para comenzar la actualización.

gcloud

Mediante la herramienta de línea de comandos de gcloud, ejecuta 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: el nombre del grupo de instancias que se va a actualizar.
  • instance-template-name: La plantilla de instancias nueva a la que se actualizará el grupo de instancias
  • zone: La zona de este grupo de instancias si dicho grupo es zonal
  • region: la región de este grupo de instancias si dicho grupo es regional.

API

En la API, realiza una solicitud de PATCH al recurso del administrador de grupos de instancias:

PATCH https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name

Si el grupo de instancias es un grupo de instancias administrado regional, reemplaza zones/zone por regions/region.

La carga útil de la solicitud contiene lo siguiente:

El siguiente ejemplo es la configuración mínima necesaria para iniciar una actualización en la API.

Si no especificas lo contrario, la configuración predeterminada de las propiedades maxSurge y maxUnavailable es 1 multiplicado por la cantidad de zonas afectadas. Esto significa que el Actualizador solo hace que 1 instancia no esté disponible en cada zona afectada y solo crea 1 instancia adicional por zona durante la actualización.

Con esta solicitud de ejemplo, se actualiza el 100% de las instancias a la plantilla de instancias nueva.

{
  "instanceTemplate": "global/instanceTemplates/example-template",
  "updatePolicy": {
    "type": "proactive"
   }
 }

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

Configura opciones para tu actualización

Si deseas obtener actualizaciones más complejas, puedes configurar opciones adicionales para una solicitud de actualización específica. Estas opciones se describen a continuación.

Aumento máximo

Establece la propiedad maxSurge para permitir que el Actualizador cree de forma temporal nuevas instancias mayores que targetSize durante la actualización. Por ejemplo, si estableces maxSurge en 5, el grupo de instancias administrado usa la nueva plantilla de instancias 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.

Si no estableces el valor maxSurge, se usa el valor predeterminado. En grupos de instancias administrados zonales, el valor predeterminado para maxSurge es 1. En el caso de los grupos de instancias administrados regionales, el valor predeterminado es la cantidad de zonas asociadas al grupo de instancias administrado regional.

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

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

Máximo de instancias no disponibles

Establece la configuración de maxUnavailable de modo que solo una cierta cantidad de instancias esté disponible en cualquier momento durante la actualización. 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 de instancias está en proceso de cambiar el tamaño, es posible que las instancias en creación no estén disponibles, estas instancias se considerarían dentro del número maxUnavailable. 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 la cantidad de instancias, de ser necesario.

El valor predeterminado de maxUnavailable depende del tipo de grupo que tengas.

  • Para los MIG zonales, el valor predeterminado es 1.
  • Para los MIG regionales, el valor predeterminado es la cantidad de zonas en las que se distribuye tu MIG. Por lo general, es 3, pero puedes seleccionar una cantidad de zonas diferente.

Tiempo de espera mínimo

Configura minReadySeconds para especificar el tiempo de espera antes de considerar que una instancia nueva o reiniciada se actualizó. Usa esta función para controlar la velocidad a la que se implementa la actualización. El temporizador comienza cuando se cumplen las siguientes condiciones:

Ten en cuenta que, para que el resultado de la verificación de estado sea bueno, el Actualizador realiza las siguientes acciones:

  1. Espera hasta el período especificado por autohealingPolicies.initialDelaySec para que la verificación de estado se muestre como HEALTHY.
  2. Luego, espera el período especificado por minReadySeconds.

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 minReadySeconds, 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 minReadySeconds es 3,600 segundos (1 hora).

Acción mínima

Establece la propiedad de acción mínima para especificar la acción mínima que el Actualizador debe realizar 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, el Actualizador realiza una acción más disruptiva si la actualización lo requiere. Por ejemplo, no se puede cambiar el SO de una instancia mediante su reinicio, por lo que Actualizador reemplaza las instancias en el grupo con instancias con VM nuevas.

Las acciones aplicables son REPLACE o RESTART:

  • RESTART. Reinicia la instancia (realiza 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 estas opciones afectan a las instancias.

La forma en la que las opciones del Actualizador afectan la 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 las instancias de VM, puedes usar la configuració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

Los valores replacementMethod válidos del actualizador son los siguientes:

  • 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 Preserva 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]

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

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

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

El Actualizador te permite realizar actualizaciones canary para que puedas probar las actualizaciones en un subconjunto aleatorio de instancias antes de confirmarlas por completo.

Una actualización canary es una actualización que se aplica a una cantidad parcial de instancias del grupo de instancias. Las actualizaciones canary te permiten probar nuevas funciones o actualizaciones en un subconjunto aleatorio de instancias, en lugar de lanzar una actualización que podría ser disruptiva para todas las instancias. Si una actualización no funciona de manera correcta, solo tienes que revertir una pequeña cantidad de instancias, lo que minimiza la interrupción para los usuarios. Desde la perspectiva del servidor, una actualizació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, una actualización canary es disruptiva para las instancias afectadas, ya que se borran y se reemplazan por instancias de VM nuevas durante la actualización.

Inicia una actualización canary

Para iniciar una actualización canary, sigue estos pasos:

  • Especifica hasta dos versiones de plantilla de instancias; por lo general, se usa una plantilla de instancias nueva para 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 la página Grupos de instancias

  2. Selecciona el grupo de instancias 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. De manera opcional, puedes activar o desactivar las opciones de configuración si la actualización es proactiva (el grupo borra y reemplaza las instancias de forma activa) o es oportuna (el grupo no reemplaza las instancias de forma activa, pero aplica la actualización cuando se crean por otros motivos). También puedes proporcionar un aumento máximo, opciones de máximo de instancias no disponibles y el tiempo de espera mínimo.
  7. Haz clic en Actualizar para comenzar la actualización.

gcloud

Con la herramienta de línea de comandos de gcloud, proporciona la plantilla actual y la plantilla 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-template \
    --canary-version template=new-template,target-size=size \
    [--zone zone | --region region]

Reemplaza los siguientes elementos:

  • instance-group-name: El nombre del grupo para la instancia
  • current-template: La plantilla de instancias que ejecuta el grupo de instancias
  • new-template: La plantilla nueva con la que quieres realizar una actualizació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: Una zona para este grupo de instancias. Si el grupo de instancias es zonal, proporciona la zona
  • region: Una región para este grupo de instancias. Si el grupo de instancias es regional, proporciona la región

Por ejemplo, con el siguiente comando, se realiza una actualización canary que lanza my-template-b al 10% de las instancias del grupo de instancias:

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

API

En la API, realiza una solicitud PATCH al recurso del administrador de grupos de instancias:

PATCH https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name

En la carga útil de la solicitud, incluye la plantilla de instancias actual y la nueva en la que deseas realizar pruebas canary. Por ejemplo:

{
 "versions": [
  {
   "instanceTemplate": "global/instanceTemplates/new-template",
   "targetSize": {
    "[percent|fixed]": number|percentage # Use `fixed` for a specific number of instances
   }
  },
  {
   "instanceTemplate": "global/instanceTemplates/current-template"
  }
 ]
}

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-template: El nombre de la plantilla de instancias actual que ejecuta el grupo de instancias

Extiende una actualización canary

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

Console

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

    Ir a la página Grupos de instancias

  2. Selecciona el grupo de instancias 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 misma solicitud de actualización, pero configura solo version y omite --canary-version. Con la herramienta de línea de comandos de gcloud:

gcloud compute instance-groups managed rolling-action start-update instance-group-name \
    --version template=new-template \
    [--zone zone | --region region]

API

En la API, realiza una solicitud de PATCH al recurso del administrador de grupos de instancias:

PATCH https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name

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 extender la actualización al 100% de las instancias. Por ejemplo, el cuerpo de la solicitud podría verse de la siguiente manera. Reemplaza new-template por el nombre de la plantilla de instancias nueva que deseas reenviar.

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

Inicia una actualización oportunista o proactiva

De manera predeterminada, las actualizaciones realizadas con la herramienta de línea de comandos de gcloud son proactivas y las actualizaciones iniciadas en la API son oportunistas.

En el caso de las actualizaciones proactivas, Compute Engine programa de manera activa acciones para aplicar las actualizaciones solicitadas a las instancias según sea necesario. En muchos casos, esto implica borrar y volver a crear instancias de forma proactiva.

También, puedes optar por realizar una actualización oportunista si una actualización proactiva puede ser demasiado perjudicial. Una actualización oportunista solo se aplica cuando inicias de forma manual la actualización en instancias seleccionadas o cuando el grupo de instancias administrado crea nuevas instancias. El grupo de instancias administrado crea nuevas instancias cuando otro servicio, como un escalador automático o un usuario cambia el tamaño del grupo de instancias administrado. Compute Engine no inicia solicitudes de manera activa para aplicar actualizaciones oportunistas.

En ciertas situaciones, una actualización oportunista es útil porque no deseas causar inestabilidad en el sistema si se puede evitar. Por ejemplo, si tienes una actualización no crítica que se puede aplicar según sea necesario sin ninguna urgencia y tienes un grupo de instancias administrado que se está escalando automáticamente, realiza una actualización oportunista de modo que Compute Engine no elimine de forma activa tus instancias existentes para aplicar la actualización. Cuando se reduce el tamaño, el escalador automático opta por terminar las instancias con la plantilla anterior, así como las instancias que aún no son RUNNING.

A fin de elegir si una actualización es oportunista o proactiva, establece la propiedad type en OPPORTUNISTIC o PROACTIVE mediante la herramienta de línea de comandos de gcloud o la API.

Console

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

    Ir a la página Grupos de instancias

  2. Selecciona el grupo de instancias que deseas actualizar.
  3. En la parte superior de la página, haz clic en Actualización progresiva.
  4. En Plantilla, elige una plantilla con el fin de actualizar tu grupo de instancias y selecciona un tamaño de destino para la plantilla.
  5. En Modo de actualización, elige entre una actualización oportunista o proactiva.
  6. Haz clic en Actualizar para comenzar la actualización.

gcloud

Con la herramienta de línea de comandos de gcloud, ejecuta el siguiente comando:

gcloud compute instance-groups managed rolling-action start-update instance-group-name \
    --version template=instance-template \
    --type opportunistic|proactive \
    [--zone zone | --region region]

API

En la carga útil de solicitud para iniciar una actualización, incluye la propiedad type en tu updatePolicy: Reemplaza new-template con el nombre de la plantilla nueva con la que deseas realizar una actualización canary. Si quieres una actualización oportunista, reemplaza PROACTIVE por OPPORTUNISTIC.

{
  "updatePolicy": {
    "type": "PROACTIVE" # Performs a proactive update
  },
  "versions": [{
    "instanceTemplate": "global/instanceTemplates/new-template",
    }]
}

Actualiza las instancias seleccionadas

Cuando inicias una actualización oportunista, debes esperar a que Compute Engine lance la actualización a medida que surjan las oportunidades. Sin embargo, si quieres tener más control sobre el lanzamiento, puedes iniciar esa actualización de inmediato en instancias específicas de tu grupo de instancias administrado.

Iniciar las actualizaciones de forma manual te permite lo siguiente:

  • Seleccionar las instancias que deseas actualizar.
  • Aplicar una actualización con la menor cantidad posible de interrupciones necesarias para que se complete la actualización. Por ejemplo, si solo estás actualizando metadatos, puede que no sea necesario reiniciar la instancia para completar la actualización. Al momento de iniciar la actualización de modo manual, la acción mínima necesaria se realiza automáticamente
  • Aplicar el reinicio o la recreación de la instancia, incluso si esas acciones no son necesarias para aplicar la actualización. Por ejemplo, es posible que desees reiniciar una VM incluso si solo actualizas los metadatos porque el software invitado tiene que recolectar los metadatos nuevos en el inicio de la VM
  • Evitar una actualización si requiere más interrupciones de las que puedes permitirte
  • Realizar una actualización de todas las instancias seleccionadas de inmediato, sin restringir el lanzamiento mediante las restricciones maxSurge y maxUnavailable.

La acción mínima y la acción más perjudicial permitidas

Según la naturaleza de una actualización, puedes interrumpir el estado de la instancia. Por ejemplo, cambiar el tipo de máquina de una instancia requiere que la VM se reinicie, mientras que cambiar su imagen de arranque requiere borrar y reemplazar la instancia.

Puedes controlar el nivel de interrupción mediante las marcas minimal-action y most-disruptive-allowed-action:

  • minimal-action te permite forzar una acción más perjudicial que lo necesario.
  • most-disruptive-allowed-action te permite evitar una actualización si se requieren más interrupciones de las que puedes permitirte.

Al momento de actualizar las instancias seleccionadas, ambas marcas aceptan las siguientes acciones:

AcciónDescripción¿Qué propiedades de instancia se pueden actualizar?
NONENo interrumpas la instancia en absoluto.Ninguno
REFRESHNo detengas la instancia.Discos secundarios, metadatos de instancia, etiquetas.
RESTARTDetén la instancia y vuelve a iniciarla.Tipo de máquina.
REPLACEBorra la instancia y vuelve a crearla.Todas las propiedades de instancias almacenadas en la plantilla de instancias.

De forma predeterminada, el minimal-action es NONE. Si tu actualización requiere una acción más perjudicial que la establecida con esta marca, Compute Engine realiza la acción necesaria para ejecutar la actualización.

De forma predeterminada, el most-disruptive-allowed-action es REPLACE. Si tu actualización requiere una acción más perjudicial que la acción que configuraste con esta marca, la solicitud de actualización fallará. Por ejemplo, si estableces “restart” como la acción más perjudicial permitida, un intento de actualizar la imagen de disco de arranque falla porque esa actualización requiere recreación de instancias, una acción más perjudicial que la de reiniciar.

Puedes actualizar las instancias seleccionadas mediante la herramienta de gcloud o la API.

gcloud

Después de comenzar una actualización oportunista, usa el subcomando update-instances para aplicar la actualización a instancias específicas.

gcloud compute instance-groups managed update-instances instance-group-name \
    --instances instance-names \
    --most-disruptive-allowed-action disruption-level \
    --minimal-action disruption-level

Donde:

  • instance-group-name es el nombre del grupo de instancias con actualizaciones pendientes.
  • instance-names es una lista de instancias para actualizar de inmediato.
  • disruption-level es el nivel de interrupción mínimo o máximo. Puede ser NONE, REFRESH, RESTART o REPLACE.
    • El valor predeterminado de minimal-action es NONE.
    • El valor predeterminado de most-disruptive-allowed-action es REPLACE.

Si necesitas esperar hasta que se actualicen todas las instancias especificadas, verifica el estado del grupo y espera hasta que esté estable.

API

Después de iniciar una actualización oportunista, crea una solicitud POST para el método regionInstanceGroupManagers.applyUpdatesToInstances. Para un grupo de instancias administrado zonal, usa el método zonal instanceGroupManagers.applyUpdatesToInstances.

POST https://compute.googleapis.com/compute/v1/projects/project/regions/region/instanceGroupManagers/instance-group-name/applyUpdatesToInstances
{
  "instances": "zones/zone/instances/instance-name","zones/zone/instances/instance-name"
  "minimalAction": disruption-level,
  "mostDisruptiveAllowedAction": disruption-level
}

Donde:

  • instance-group-name es el nombre del grupo de instancias con actualizaciones pendientes.
  • zone es la zona de una instancia para actualizar de inmediato.
  • instance-name es el nombre de una instancia que se va a actualizar de inmediato.
  • disruption-level es el nivel de interrupción mínimo o máximo. Puede ser NONE, REFRESH, RESTART o REPLACE.
    • El valor predeterminado de minimalAction es NONE.
    • El valor predeterminado de mostDisruptiveAllowedAction es REPLACE.

Similar a otros métodos de grupo de instancias administrado, applyUpdatesToInstances se basa en la intención, lo que significa que muestra una respuesta de operación. Una vez que la operación está DONE, listManagedInstances contiene la lista de instancias con sus campos currentAction cambiados a REFRESHING, RESTARTING o RECREATING. Si la operación falla, por ejemplo, debido a cambios simultáneos en el grupo, la falla se observa en el campo lastAttempt.errors.

Si necesitas esperar hasta que todas las instancias especificadas terminen de actualizarse, revisa el estado del grupo y espera hasta que el grupo esté estable.

Realiza un reemplazo progresivo o un reinicio

De modo alternativo, puedes usar los comandos restart o replace para realizar un reinicio o un reemplazo progresivo de instancias de VM en el grupo de instancias administrado. Al igual que con el comando start-update, puedes especificar cualquiera de las opciones de configuración para reiniciar o reemplazar. Un reinicio o reemplazo progresivo no cambia nada en el grupo de instancias, 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 reemplazo o reinicio progresivo. Por ejemplo, si deseas actualizar tus instancias de VM de vez en cuando para realizar lo siguiente:

  • 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 recomendación 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

Puedes usar Google Cloud Console, la herramienta de línea de comandos de gcloud o la API para realizar un reemplazo en el que todas las instancias se borren y se reemplacen por instancias nuevas:

Console

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

    Ir a la página Grupos de instancias

  2. Selecciona el grupo de instancias 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. Un reinicio realiza los métodos stop y start en las instancias, mientras que un reemplazo borra y crea instancias de forma activa.
  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

gcloud compute instance-groups managed rolling-action replace instance-group-name

Con este comando, se reemplazan todas las instancias en el grupo de instancias administrado, una por vez. Si un reemplazo completo es demasiado disruptivo, puedes especificar un reinicio progresivo, que no borra instancias, sino que solo las reinicia.

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, maxUnavailable, min-ready).

API

En la API, haz una solicitud PATCH para el grupo y establece un updatePolicy proactivo en el que minimalAction sea RESTART o REPLACE, según si deseas realizar un reemplazo progresivo, cada instancia se borra y se reemplaza por una nueva, o un reinicio progresivo, cada instancia se detiene y se reinicia. En ambos casos, RESTART o REPLACE, siempre deben proporcionar una propiedad versions.instanceTemplate y una propiedad versions.name (por ejemplo, v2) para activar la acción.

Un reemplazo progresivo podría tener el siguiente aspecto:

PATCH https://compute.googleapis.com/compute/v1/projects/my-project/zones/zone/instanceGroupManagers/instance-group-name

{
 "updatePolicy": {
  "minimalAction": "REPLACE",
  "type": "PROACTIVE"
 },
 "versions": [
  {
   "instanceTemplate": "global/instanceTemplates/example-template",
   "name": "v2"
  }
 ]
}

Para realizar un reinicio progresivo, ejecuta el siguiente comando:

PATCH https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name

{
 "updatePolicy": {
  "minimalAction": "RESTART",
  "type": "PROACTIVE"
 },
 "versions": [
  {
   "instanceTemplate": "global/instanceTemplates/example-template",
   "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 instancias, 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. Si configuras maxSurge en 0, la actualización requiere más tiempo para completarse, pero con replacementMethod:recreate, las instancias actualizadas conservan los 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.

Especifica el método de reemplazo mediante la herramienta de línea de comandos de gcloud o la API.

gcloud

Cuando emitas un comando rolling-action, incluye --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]

Si necesitas esperar hasta que se actualicen todas las instancias especificadas, verifica el estado del grupo y espera hasta que el grupo esté estable.

API

Crea una solicitud al método patch del grupo de instancias administrado y, en ella, incluye el campo updatePolicy.replacementMethod. Para un MIG regional, usa el método regional patch.

PATCH /compute/v1/projects/project/zones/zone/instanceGroupManagers/instance-group-name
{
    "updatePolicy": {
        "type": "PROACTIVE",
        "maxUnavailable": { "fixed": 5 },
        "replacementMethod": "RECREATE"
    },
    "versions": [ {
        "instanceTemplate": "global/instanceTemplates/new-template"
    } ]
}

Actualiza un grupo de instancias administrado regional

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

La actualización de un grupo de instancias administrado regional mediante el Actualizador es lo mismo que realizar una actualización en un grupo de instancias administrado zonal, con algunas excepciones que se describen a continuación. Cuando inicias la actualización de un grupo de instancias regional, el Actualizador siempre actualiza las instancias de manera proporcional y equitativa en cada zona; no es posible elegir en qué zonas se actualizan primero las instancias ni actualizar instancias en una sola zona.

Diferencias entre actualizar un grupo de instancias administrado regional en comparación con un grupo de instancias administrado por zonas

Antes de iniciar una actualización en un grupo de instancias administrado regional, ten en cuenta que hay varias diferencias en el modo en que se comportan en comparación con los grupos de instancias administrados zonales:

  • Los parámetros de actualización predeterminados para los grupos de instancias administrados regionales son maxUnavailable=number-of-zones y maxSurge=number-of-zones, en los que number-of-zones es la cantidad de zonas seleccionadas para el grupo, que es 3 de forma predeterminada.

  • Si usas números fijos cuando especificas una actualización, estos deben ser 0 o igual o mayor que el número de zonas asociadas con el grupo de instancias administrado regional. Por ejemplo, si el grupo de instancias se distribuye en tres zonas, no puedes establecer maxSurge en 1 ni en 2 porque el Actualizador debe crear una instancia adicional en cada una de las tres.

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

Si especificas un número fijo en tus solicitudes de actualización, el número que especifiques se divide por el número de zonas en el grupo de instancias administrado 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 el número de instancias no se divide de forma equitativa entre las zonas, el Actualizador agrega las instancias 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.

Solo puedes especificar un porcentaje si el grupo de instancias administrado contiene 10 instancias de VM o más. 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 grupo de instancias administrado con 10 instancias y un porcentaje de tamaño de destino del 25%, la actualización se implementa 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. Aquí se aplican las mismas reglas que se aplican a la actualización de grupos de instancias administrados por zonas.

Supervisa las actualizaciones

Después de iniciar una actualización progresiva, la actualización puede tardar un tiempo en completarse. Puedes supervisar el progreso de una actualización mediante una inspección del status del grupo de instancias administrado o con una verificación de currentAction en cada instancia del grupo de instancias administrado.

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 para acceder a estas marcas. También puedes usar la consola 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 de instancias específico.

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

    Ir a la página Grupos de instancias

  2. Selecciona el grupo de instancias 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.

La página Detalles muestra el número actual y planificado de instancias que se están actualizando para cada plantilla de instancias y también muestra los parámetros de actualización.

gcloud

Para verificar que la actualización del grupo de instancias se haya completado, usa el comando describe para revisar status.versionTarget.isReached==true. Para verificar que todas las instancias del grupo estén en ejecución y en buen estado (es decir, que la currentAction de cada instancia administrada sea NONE), revisa status.isStable==true.

Recuerda que la estabilidad de un grupo de instancias administrado depende de la configuración del grupo más allá del Actualizador. Por ejemplo, si el grupo tiene un ajuste de escala automático y en ese momento se escala horizontalmente, isStable==false debido a la operación del escalador automático.

gcloud compute instance-groups managed describe instance-group-name \
    [--zone zone | --region zone]

La herramienta de gcloud muestra información detallada sobre el grupo de instancias, incluidos los campos status.versionTarget.isReached y status.isStable.

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

Para verificar que la actualización del grupo de instancias se haya completado, usa el método get del administrador de grupos de instancias para verificar status.versionTarget.isReached==true. Para verificar que todas las instancias del grupo estén en ejecución y en buen estado (es decir, que la currentAction de cada instancia administrada sea NONE), revisa status.isStable==true.

Recuerda que la estabilidad de un grupo de instancias administrado depende de la configuración del grupo más allá del Actualizador. Por ejemplo, si el grupo tiene un ajuste de escala automático y en ese momento se escala horizontalmente, isStable==false debido a la operación del escalador automático.

GET https://compute.googleapis.com/compute/v1/projects/project-d/zones/zone/instanceGroupManagers/instance-group-name/get

Si el grupo de instancias es uno administrado regional, reemplaza zones/<var>zone</var></code> with por regions/region.

La API muestra información detallada sobre el grupo de instancias, incluidos los campos status.versionTarget.isReached y status.isStable.

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

El lanzamiento de una actualización se considera completo cuando todas las instancias de VM en el grupo están creadas o están en proceso de creación en su versión de destino. En el caso de un lanzamiento completo, todas las instancias están configuradas para usar la nueva plantilla de instancias. En el caso de un lanzamiento parcial, las instancias se configuran de acuerdo con la división de destino especificada entre las plantillas de instancias.

Para verificar si el lanzamiento de una actualización se completó, verifica el valor del campo status.versionTarget.isReached de un recurso instanceGroupManagers (o regionInstanceGroupManagers).

  • status.versionTarget.isReached se establece en true si todas las instancias de VM se crearon o están en proceso de creación mediante la versión de destino (versions[]).
  • status.versionTarget.isReached se establece en false cuando al menos una VM aún no usa la versión de destino (versions[]). O, en el caso de una actualización canary, status.versionTarget.isReached se establece en false cuando la cantidad de VM que usan una versión de destino (versions[].instanceTemplates) no coincide con el tamaño de destino (versions[].targetSize).

Comprueba si el grupo de instancias administrado es estable

Para comprobar si un grupo de instancias administrado está activo y en buen estado, verifica el valor del campo status.isStable.

status.isStable establecido en false indica que los cambios están activos, pendientes o que el grupo de instancias administrado en sí se está modificando.

status.isStable configurado como true indica lo siguiente:

  • Ninguna de las instancias del grupo de instancias administrado 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 grupo de instancias administrado.
  • No se modifica el grupo de instancias administrado en sí.

Los grupos de instancias administrados se pueden 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 grupo.
  • Un escalador automático solicita cambiar el tamaño del grupo.
  • Un recurso de reparación automática reemplaza una o más instancias en mal estado en el grupo de instancias administrado.
  • En un grupo de instancias administrado regional, se redistribuyen algunas de las instancias.

Cuando todas las acciones se completan, el valor status.isStable se vuelve a configurar como true para ese grupo de instancias administrado.

Acciones actuales en las instancias

Puedes ver la currentAction que se está realizando y el status de cada instancia en un grupo de instancias administrado con la herramienta de línea de comandos de gcloud o la API.

gcloud

gcloud compute instance-groups managed list-instances instance-group-name \
[--filter="zone:(zone)" | --filter="region:(region)"]

gcloud muestra una lista de instancias en el grupo de instancias y sus respectivos estados y acciones actuales. Por ejemplo:

NAME               ZONE           STATUS    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

API

En la API, realiza una solicitud GET al método regionInstanceGroupManagers.listManagedInstances. Para un grupo de instancias administrado zonal, usa el método instanceGroupManagers.listManagedInstances.

GET https://compute.googleapis.com/compute/v1/projects/project-id/regions/region/instanceGroupManagers/instance-group-name/listManagedInstances

La API muestra una lista de instancias dentro del grupo, incluido el instanceStatus y la currentAction de cada instancia.

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

Para cada instancia en un grupo de instancias administrado, el estado de la instancia se describe mediante su campo instanceStatus. Para ver una lista de los valores del campo instanceStatus válidos, consulta Verifica el estado de una instancia.

Si la instancia experimenta algún tipo de cambio, el campo currentAction se propaga con una de las siguientes acciones para ayudarte a realizar un seguimiento del progreso del cambio. De lo contrario, el campo currentAction es NONE.

Los valores posibles de currentAction son los siguientes:

  • ABANDONING: la instancia se está quitando del grupo de instancias administrado.
  • 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 grupo de instancias administrado no intenta volver a reemplazar la instancia.
  • DELETING: La instancia está en proceso de eliminación.
  • 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.

Por ejemplo, el siguiente comando 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]

Reemplaza old-instance-template-name por el nombre de la plantilla de instancias a la que deseas revertir.

En la API, realiza una solicitud PATCH al recurso del administrador de grupos de instancias:

PATCH https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name

Si el grupo de instancias es un grupo de instancias administrado regional, reemplaza zones/zone por regions/region.

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

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

Si se trata de un grupo de instancias administrado regional con menos de 10 instancias, debes usar un valor fijo para maxUnavailable y establecer el valor en la cantidad de instancias en el grupo:

{ "updatePolicy":
  {
    "maxUnavailable":
    {
      "fixed": number-of-instances-in-group
    }
  },
 "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/old-template" # Old instance template
    }
   ]
}

El Actualizador la trata como una solicitud de actualización normal, por lo que todas las opciones de actualización descritas en este documento se pueden especificar con la solicitud.

Controla la velocidad de una actualización

De forma predeterminada, cuando realizas una solicitud de actualización, el servicio 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 minReadySeconds. Establecer este valor hace que el servicio espere esta cantidad de segundos antes de considerar que la instancia se actualizó de forma correcta y pasar a la siguiente.
  3. Configura la verificación de estado para que el servicio espere a que su aplicación se inicie y luego 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. Inicia actualizaciones en instancias específicas de forma manual para actualizar esas instancias de inmediato.

También puedes usar una combinación de estos parámetros para controlar la velocidad de tu actualización.

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, 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 las instancias en el grupo de instancias 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      my-new-template
    vm-instances-j1h8  us-central1-f  RUNNING  HEALTHY       NONE      my-old-template
    vm-instances-ngod  us-central1-f  STAGING  UNKNOWN       CREATING  my-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=my-old-template \
        --canary-version template=my-new-template,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.

Relación entre las versiones y las propiedades de instanceTemplate para un grupo de instancias administrado

Google recomienda usar el campo versions a fin de configurar plantillas de instancias para grupos de instancias administrados.

El campo instanceTemplate heredado se superpone en la funcionalidad con las versions porque ambos campos te permiten especificar qué plantilla de instancias usará el grupo para crear instancias. Sin embargo, solo el campo versions te permite especificar una configuración avanzada de dos plantillas (canary).

Para tener retrocompatibilidad, los grupos de instancias administrados aún admiten la configuración del campo instanceTemplate de nivel superior, aunque recomendamos que uses solo el campo versions. Usar el campo instanceTemplate de nivel superior y el campo versions al mismo tiempo puede generar ambigüedad y confusión.

Si especificas el campo instanceTemplate y el campo versions cuando llamas a los métodos update() o patch(), existen tres resultados posibles:

  • Estableces ambos campos en el mismo valor.

    Esta es una solicitud válida. En este caso, no genera ambigüedad y la plantilla de instancias nueva se aplica al grupo de instancias administrado.

    Por ejemplo, en la siguiente solicitud, el campo instanceTemplate de nivel superior y el campo versions especifican la misma plantilla de instancias que es diferente de la plantilla actual, por lo que el grupo de instancias administrado se actualiza a la plantilla de instancias nueva:

    {
     "instanceTemplate": "global/instanceTemplates/new-template",
     "versions": [
      {
       "instanceTemplate": "global/instanceTemplates/new-template"
      }
     ],
     "updatePolicy": {
       "type": "PROACTIVE"
     }
    }
    
  • Estableces ambos campos en valores que no coinciden, pero solo un valor difiere de la plantilla de instancias actual en el grupo de instancias administrado.

    Esta es una solicitud válida. El campo que es diferente de la configuración actual se toma como el valor deseado. Por ejemplo, llama al método get(), cambia uno de los dos campos y, luego, llama a update() con solo un campo modificado:

    {
     "instanceTemplate": "global/instanceTemplates/current-template",
     "versions": [
      {
       "instanceTemplate": "global/instanceTemplates/new-template"
      }
     ],
     "updatePolicy": {
       "type": "PROACTIVE"
     }
    }
    
  • Establece ambos campos en valores que no coinciden y ambos valores difieren de la plantilla de instancias actual en el grupo de instancias administrado.

    Esta configuración no es válida y muestra un error porque no hay un intent claro.

    {
     "instanceTemplate": "global/instanceTemplates/new-template",
     "versions": [
      {
       "instanceTemplate": "global/instanceTemplates/a-different-new-template"
      }
     ],
     "updatePolicy": {
       "type": "PROACTIVE"
     }
    }
    

El campo versions, el campo instanceTemplate y el método get()

Si solo especificas una plantilla de instancias, ya sea a través del campo de nivel superior instanceTemplate, el campo versions o ambos, el método get() muestra ambos campos en su respuesta. Esto hace que el nuevo campo versions sea retrocompatible. Siempre que especifiques una plantilla de instancias única en cualquiera de estos campos, no hay cambios en lo que get() muestre en el campo instanceTemplate.

Si el campo versions tiene dos plantillas de instancias especificadas, el método get() muestra un campo instanceTemplate vacío de nivel superior. No hay forma de expresar sin ambigüedad una configuración de plantilla canary de dos instancias en el campo instanceTemplate de nivel superior, por lo que el campo no se usa durante una actualización canary.

El campo versions y el método setInstanceTemplate()

Por retrocompatibilidad, el método setInstanceTemplate() se comporta como lo hacía antes, lo que te permite cambiar la plantilla que usa el grupo de instancias administrado para crear instancias. Cuando llamas a este método, el campo versions se anula con la plantilla de instancias especificada por el método setInstanceTemplate().

El método setInstanceTemplate() también establece updatePolicy en OPPORTUNISTIC. Esto evita que el grupo de instancias administrado implemente de manera activa una plantilla de instancias que no se especifica de forma explícita en el campo versions.

Próximos pasos