Implementa actualizaciones en los MIG

Un grupo de instancias administrado (MIG) contiene una o más instancias de máquinas virtuales (VM) que se crean 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 de Actualizador de MIG.

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

  • El lanzamiento de una actualización se realiza de manera automática 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.

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 reconectes 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 siempre, 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 la actualización de las instancias, 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 la solicitud fue válida, pero eso no indica que la actualización se realizó de forma correcta. Debes verificar el estado del grupo de instancias administrado para determinar si la actualización se implementó de forma correcta.

  • La API del Actualizador es una API declarativa. La API requiere que las solicitudes especifiquen la configuración deseada posterior a la actualización del grupo de instancias administrado, en lugar de una llamada a función explícita.

  • La función de Actualizador admite hasta dos versiones de plantillas de instancias en el grupo de instancias administrado. Esto significa que puedes especificar dos versiones diferentes de plantillas 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 aplique 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, abre la lista desplegable y selecciona la plantilla nueva a la que deseas actualizar.
  5. Para el tamaño de destino, ingresa 100% a fin de actualizar todas las instancias.
  6. También 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 implementa la actualización cuando las instancias se reemplazan por otros medios). También puedes proporcionar aumento máximo, opciones de cantidad máxima 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 la siguiente información:

  • instance-group-name: Es el nombre del grupo de instancias que se actualizará.
  • instance-template-name: Es la nueva plantilla de instancias a la que se debe actualizar el grupo de instancias.
  • zone: Es la zona de este grupo de instancias si es zonal.
  • region: Es la región de este grupo de instancias si es regional.

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
    

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.

Esta solicitud de ejemplo actualiza el 100% de las instancias a la nueva plantilla de instancias.

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

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

Configura opciones para la 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 del tamaño de destino. Si estableces un valor mayor de maxSurge, se acelera la actualización, por el costo de instancias adicionales, que se facturan 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 a ellos.

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 hacia arriba la cantidad de instancias de ser necesario.

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

Cantidad máxima 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 el nivel de interrupción del servicio y la frecuencia con la que se implementa la actualización.

Esta cantidad también incluye cualquier instancia que no esté disponible por otros motivos. Por ejemplo, si el grupo de instancias está en proceso de cambio de tamaño, es posible que las instancias en creación no estén disponibles; estas instancias se considerarían dentro de la cantidad de 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 hacia abajo la cantidad de instancias, de ser necesario.

El valor predeterminado para maxUnavailable en un grupo de instancias administrado zonal es 1. En un grupo de instancias administrado regional, el valor predeterminado para number-of-zones, la cantidad de zonas seleccionadas, es 3.

Tiempo de espera mínimo

Establece minReadySeconds para especificar la cantidad de tiempo de espera antes de considerar que una instancia recién creada o reiniciada está actualizada. 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 hará lo siguiente:

  1. Esperar hasta el período especificado por autohealingPolicies.initialDelaySec para que la verificación de estado muestre HEALTHY
  2. Luego, esperar el período de tiempo especificado por minReadySeconds

Si la verificación de estado no muestra HEALTHY dentro de initialDelaySec, el Actualizador declara que la instancia de VM no está en buen 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 controlar la acción mínima que debe realizar el Actualizador 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 borrarán y se reemplazarán por una nueva, incluso si no es necesario.

Establecer una acción mínima garantiza que el Actualizador realizará como mínimo esa acción. 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 realizará una acción más disruptiva si la actualización lo requiere. Por ejemplo, reiniciar una instancia no sirve para cambiar su SO, por lo que el Actualizador reemplazará las instancias del grupo con instancias de 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 la instancia se reemplace para que los cambios se apliquen (por ejemplo, cambiar la imagen requeriría que la instancia se borre y se reemplace), se ve obligada a aplicar el valor REPLACE.

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

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

Forma en la que las opciones del Actualizador afectan la solicitud

Método de reemplazo (Beta)

beta feature

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 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, establece el método de reemplazo en recreate en lugar de substitute.

Métodos administrados de reemplazo de instancias

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 nuevas VM antes de que se cierren las antiguas. Sin embargo, los nombres de las instancias no se conservan porque las instancias antiguas 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 antigua. Luego crea una nueva instancia 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 nueva instancia 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 de destino 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 de un grupo. 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 un pequeño número de instancias, lo que minimiza la interrupción para tus 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 perjudicial para las instancias afectadas, ya que estas 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 plantillas de instancias, por lo general, se usa una plantilla de instancias nueva a 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 new-instance-template y que el resto de las instancias continúen ejecutándose en 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 usa 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. También 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, pero aplica la actualización cuando se crean instancias por otros motivos). También puedes proporcionar aumento máximo, opciones de cantidad máxima de instancias no disponibles y 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 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 la siguiente información:

  • instance-group-name: Es el nombre del grupo para la instancia.
  • current-template: Es la plantilla de instancias que ejecuta el grupo de instancias.
  • new-template: Es la nueva plantilla en la que quieres realizar una actualización canary.
  • size: Es la cantidad o el porcentaje de instancias a las 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: Es una zona para este grupo de instancias. Si el grupo es zonal, proporciona la zona.
  • region: Es una región para este grupo de instancias. Si el grupo 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:

    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
    

La carga útil de la solicitud debe contener la plantilla de instancias actual y la plantilla nueva en la que desees 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 la siguiente información:

  • new-template: Es el nombre de la plantilla nueva en la que deseas realizar una actualización canary.
  • number|percentage: Es 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: Es el nombre de la plantilla de instancias actual que el grupo de instancias ejecuta.

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 extender la plantilla a todas las instancias. O bien, puedes reemplazar la plantilla principal con la plantilla canary y establecer el tamaño de destino en 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 la actualización canary, extiende la actualización mediante la misma solicitud de actualización, pero configura solo version y omite --canary-version. Para ello, usa 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 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 del cuerpo de solicitud. Omite la especificación de tamaño de destino para revertir la actualización al 100% de las instancias. Por ejemplo, el cuerpo de la solicitud podría verse así: Reemplaza new-template por el nombre de la nueva plantilla de instancias que deseas extender.

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

Inicia una actualización oportunista o proactiva

De forma 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 disruptiva. 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 instancias nuevas. El grupo de instancias administrado crea instancias nuevas cuando otro servicio, como un escalador automático, o un usuario cambian su tamaño. Compute Engine no inicia solicitudes de manera activa para aplicar actualizaciones oportunistas.

En ciertas situaciones, una actualización oportunista es útil porque no es conveniente causar inestabilidad en el sistema si se puede evitar. Por ejemplo, si tienes una actualización no fundamental que se puede aplicar según sea necesario sin ninguna urgencia y tienes un grupo de instancias administrado que se está escalando de manera automática, realiza una actualización oportunista de modo que Compute Engine no elimine de forma activa las 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 tienen el estado RUNNING.

Para elegir si una actualización es oportunista o proactiva, establece el tipo de propiedad 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 en la que se actualizará el 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 updatePolicy. Reemplaza new-template por el nombre de la plantilla nueva en 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 instancias seleccionadas (Beta)

beta feature

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 del 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. Cuando se inicia la actualización de forma manual, la acción mínima necesaria se realiza automáticamente
  • Aplicar el reinicio o la recreación de instancias, incluso si esas acciones no son necesarias para aplicar la actualización. Por ejemplo, es posible que desees reiniciar una VM incluso si solo estás actualizando los metadatos porque el software invitado tiene que recolectar los metadatos nuevos en el arranque 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 limitar el lanzamiento mediante las restricciones de maxSurge y maxUnavailable

La acción mínima y la acción más disruptiva permitida

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 para cambiar su imagen de inicio, se debe 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 disruptiva que lo necesario.
  • most-disruptive-allowed-action te permite evitar una actualización si se requieren más interrupciones de las que puedes permitirte.

Cuando se actualizan 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, la minimal-action es NONE. Si la 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.

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

Puedes actualizar instancias seleccionadas con la herramienta de gcloud o la API.

gcloud

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

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

En el ejemplo anterior, se ilustra lo siguiente:

  • 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 al método Beta regionInstanceGroupManagers.applyUpdatesToInstances. Para un grupo de instancias administrado zonal, usa el método instanceGroupManagers.applyUpdatesToInstances.

POST https://compute.googleapis.com/compute/beta/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
    }

En el ejemplo anterior, se ilustra lo siguiente:

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

Al igual que otros métodos de grupos de instancias administrados, applyUpdatesToInstances se basa en la intención, lo que significa que muestra una respuesta de operación. Una vez que la operación tenga el estado DONE, listManagedInstances contendrá 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 esté estable.

Realiza un reemplazo o un reinicio progresivos

Como alternativa, puedes usar los comandos restart o replace para realizar un reinicio o un reemplazo progresivos 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 con el método que elijas.

Hay muchas razones por las puedes querer un reemplazo o un reinicio progresivos. Por ejemplo, si deseas actualizar las 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 práctica recomendada para probar las VM
  • Actualizar la imagen del sistema operativo de la VM o volver a ejecutar la secuencia de comandos de inicio para actualizar el 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 las instancias. Un reinicio aplica los métodos stop y start en las instancias, mientras que un reemplazo borra y crea instancias de forma activa.
  5. También puedes activar o desactivar opciones de configuración, como el aumento máximo, las opciones de cantidad máxima de instancias no disponibles y el tiempo de espera mínimo.
  6. Haz clic en los botones 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 del grupo de instancias administrado, de a una a la 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 y min-ready).

API

En la API, haz una solicitud PATCH para el grupo y establece una updatePolicy proactiva en la que la minimalAction sea RESTART o REPLACE. Esto depende de si deseas realizar un reemplazo progresivo, en el que cada instancia se borra y se reemplaza por una nueva, o un reinicio progresivo, en el que cada instancia se detiene y se reinicia. Ya sea para RESTART o REPLACE, siempre debes proporcionar una propiedad versions.instanceTemplate y una propiedad versions.name (por ejemplo, v2) a fin de activar la acción.

Un reemplazo progresivo podría verse de la siguiente manera:

    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]

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]

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 nombres de instancias (Beta)

beta feature

Si necesitas preservar los nombres de las instancias de VM en una actualización, configura replacementMethod como recreate. También debes configurar maxUnavailable para que sea mayor que 0 y establecer maxSurge en 0. Si estableces maxSurge en 0, la actualización requiere más tiempo para completarse, pero con replacementMethod:recreate, las instancias actualizadas conservan sus nombres.

Si no especificas un método de reemplazo, se usa el valor updatePolicy.replacementMethod actual del MIG. Si no se establece, se usa el valor predeterminado (substitute), que reemplaza 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 beta 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 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/beta/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 zonal, 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 app y admitir casos extremos en los que una zona falla o un grupo completo de instancias deja de responder.

Actualizar un grupo de instancias administrado regional con 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 uniforme en cada zona. No es posible elegir en qué zonas se actualizan primero las instancias ni actualizar instancias en solo una zona.

Diferencias entre la actualización de un grupo de instancias administrado regional y uno zonal

Antes de iniciar una actualización en un grupo de instancias administrado regional, ten en cuenta que hay varios aspectos diferentes 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 12 porque el Actualizador necesita 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 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 zonas obtienen 3 instancias y una zona obtiene 4. La misma lógica se aplica a los parámetros maxUnavailable y targetSize para las actualizaciones canary.

Solo puedes especificar un porcentaje si el grupo de instancias administrado 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 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 zonales.

Supervisa las actualizaciones

Después de iniciar una actualización progresiva, esta puede tomar 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 la cantidad actual y planificada 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. En la página de resumen para el grupo de instancias, se muestra la plantilla que usa cada instancia.
  3. Para ver los detalles, haz clic en la pestaña Detalles.

En la página Detalles, se muestra la cantidad actual y planificada de instancias que se están actualizando para cada plantilla de instancias y, también, los parámetros de actualización.

gcloud

Para verificar que la actualización al 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 el 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 se escala automáticamente y si en ese momento se está escalando de manera vertical, se aplica el valor isStable==false debido a la operación de escala automática.

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 a fin de esperar hasta que status.versionTarget.isReached se configure como 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 al 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 el 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 se escala automáticamente y si en ese momento se está escalando de manera vertical, se aplica el valor isStable==false debido a la operación de escala automática.

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

Si el grupo de instancias es administrado y 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 se crearon 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ó, revisa el valor del campo status.versionTarget.isReached:

  • status.versionTarget.isReached se configura como 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 configura como false cuando al menos una VM aún no usa la versión de destino (versions[]). O bien, en el caso de una actualización canary, status.versionTarget.isReached se configura como false cuando la cantidad de VM que usan una versión de destino (versions[].instanceTemplates) no coincide con su tamaño de destino (versions[].targetSize).

Comprueba si el grupo de instancias administrado es estable

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

status.isStable configurado como false indica que los cambios están activos, pendientes o que el grupo de instancias administrado 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.
  • El grupo de instancias administrado en sí no se está modificando.

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 de un grupo 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 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 de un grupo de instancias administrado, su estado se describe mediante el 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 reemplazarla.
  • 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 revertir una actualización (ya sea una actualización completa o una canary), puedes realizar una nueva solicitud de actualización y pasar la plantilla de instancias a la que deseas revertir.

Por ejemplo, el siguiente comando de gcloudrevierte 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 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 el número de instancias en el grupo:

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

El servicio de 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 tu 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 tentativamente los cambios, puedes controlar la velocidad de la actualización con 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. Habilita la verificación de estado para que el servicio espere a que la app se inicie y, luego, emita una señal de buen estado, antes de considerar que la instancia se actualizó de forma correcta y pasar a la siguiente.
  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 la 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. Si otros servicios, como el escalador automático, no están cambiando el tamaño del grupo de instancias administrado, 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 seguir estos pasos:

  1. Realiza 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   ACTION    INSTANCE_TEMPLATE  VERSION_NAME  LAST_ERROR
        vm-instances-9pk4  us-central1-f  RUNNING  NONE      my-new-template
        vm-instances-j1h8  us-central1-f  RUNNING  NONE      my-new-template
        vm-instances-ngod  us-central1-f  RUNNING  NONE      my-old-template

    En este ejemplo, dos instancias ya se actualizaron.

  2. Luego, haz una solicitud para realizar una “actualización” nueva pero pasa el número 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 servicio de Actualizador, esta actualización aparece como “completa”, por lo que no se actualiza ninguna otra instancia y se detiene de manera efectiva la actualización.

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 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 nueva plantilla de instancias se aplica al grupo de instancias administrado.

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

        {
         "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"
         }
        }
        
  • Estableces ambos campos en valores que no coinciden y los 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 una intención clara.

        {
         "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 o el campo versions o mediante ambos, el método get() muestra ambos campos en su respuesta. Esto hace que el nuevo campo versions sea retrocompatible. Siempre que especifiques una sola plantilla de instancias en cualquiera de estos campos, no hay cambios en lo que get() muestra 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 ninguna 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 el grupo de instancias administrado usa 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 explícitamente en el campo versions.

Próximos pasos