Aplicar automáticamente actualizaciones de configuración de VM en un MIG


Este documento describe cómo aplicar automáticamente actualizaciones de configuración a las instancias de máquinas virtuales (VM) en un grupo de instancias administrado (MIG) .

Compute Engine mantiene las VM en un MIG según los componentes de configuración que usas: plantilla de instancia, configuración opcional de todas las instancias y configuración con estado opcional.

Cada vez que actualizas la configuración de VM de un MIG cambiando esos componentes, Compute Engine aplica automáticamente tu configuración actualizada a las nuevas VM que se agregan al grupo.

Para aplicar una configuración actualizada a las máquinas virtuales existentes, puede configurar una actualización automática, también conocida como tipo de actualización proactiva . El MIG implementa automáticamente actualizaciones de configuración para todas o para un subconjunto de las máquinas virtuales del grupo. Puede controlar la velocidad de implementación, el nivel de interrupción de su servicio y, mediante una actualización canaria, la cantidad de instancias que el MIG actualiza con la nueva configuración. Después de especificar la nueva configuración, no es necesario proporcionar información adicional y la actualización se completa por sí sola.

Alternativamente, si desea aplicar selectivamente una nueva configuración solo a instancias nuevas o específicas en un MIG, consulte Aplicar selectivamente actualizaciones de configuración de VM en un MIG . Para ayudarle a decidir, consulte Métodos para aplicar una nueva configuración a máquinas virtuales existentes .

Antes de comenzar

  • Si está actualizando un MIG con estado, revise Aplicar, ver y eliminar la configuración con estado en MIG .
  • Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. REST

      Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      Para obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud .

Limitaciones

  • Si tiene un MIG con estado y desea utilizar actualizaciones continuas automáticas, debe conservar los nombres de las instancias al reemplazarlas o, de manera equivalente, configurar el método de reemplazo en RECREATE .

Iniciar una actualización continua básica

Una actualización continua básica es una actualización que se aplica gradualmente a todas las instancias en un MIG hasta que todas las instancias se hayan actualizado a la última configuración prevista. La actualización continua omite automáticamente las instancias que ya están en su última configuración.

Puede controlar varios aspectos de una actualización continua, como cuántas instancias se pueden desconectar para la actualización, cuánto tiempo esperar entre instancias de actualización, si la nueva plantilla afecta a todas o solo a una parte de las instancias, etc.

A continuación se detallan cosas que debe tener en cuenta al realizar una actualización continua:

  • Las actualizaciones se basan en la intención. Cuando realiza la solicitud de actualización inicial, la API de Compute Engine devuelve una respuesta exitosa para confirmar que la solicitud es válida, pero eso no indica que la actualización se haya realizado correctamente. Debe verificar el estado del grupo para determinar si su actualización se implementó exitosamente.

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

  • Las actualizaciones automáticas admiten hasta dos versiones de plantillas de instancias en su MIG. Esto significa que puede especificar dos versiones diferentes de plantillas de instancias para su grupo, lo cual es útil para realizar actualizaciones canarias .

Para iniciar una actualización continua básica donde la actualización se aplica a todas las instancias del grupo, siga las instrucciones a continuación.

Consola

  1. En la consola de Google Cloud, vaya a la página de grupos de instancias .

    Ir a grupos de instancias

  2. Seleccione el MIG que desea actualizar.

  3. Haga clic en Actualizar máquinas virtuales .

  4. En Nueva plantilla , haga clic en la lista desplegable y seleccione la nueva plantilla para actualizar. El tamaño objetivo se establece automáticamente en 100% , lo que indica que todas sus instancias se actualizarán.

  5. En Configuración de actualización , expanda el menú de selección y seleccione Automática como tipo de actualización . Deje los valores predeterminados para las otras opciones.

  6. Haga clic en Actualizar máquinas virtuales para iniciar la actualización.

nube de gcloud

Utilice 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]

Reemplace lo siguiente:

  • INSTANCE_GROUP_NAME : el nombre del MIG
  • INSTANCE_TEMPLATE_NAME : la nueva plantilla de instancia
  • ZONE : para MIG zonales, proporcione la zona
  • REGION : para MIG regionales, proporcione la región

DESCANSAR

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

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

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

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

Después de realizar una solicitud, puede monitorear la actualización para saber cuándo finaliza.

Para configuraciones avanzadas, incluya otras opciones de actualización. Si no especifica lo contrario, las opciones maxSurge y maxUnavailable son 1 multiplicado por el número de zonas afectadas de forma predeterminada. Esto significa que solo 1 instancia se desconecta en cada zona afectada y el MIG crea solo 1 instancia adicional por zona durante la actualización.

Configurar opciones para su actualización

Para actualizaciones más complejas, puede configurar opciones adicionales, como se describe en las siguientes secciones.

Tipo de actualización

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

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

Si desea aplicar actualizaciones automáticamente, establezca el tipo en proactivo .

Alternativamente, si una actualización automática es potencialmente demasiado perjudicial, puede optar por realizar una actualización oportunista . El MIG aplica una actualización oportunista solo cuando inicia manualmente la actualización en instancias seleccionadas o cuando se crean nuevas instancias. Se pueden crear nuevas instancias cuando usted u otro servicio, como un escalador automático, cambia el tamaño del MIG. Compute Engine no inicia activamente solicitudes para aplicar actualizaciones oportunistas en instancias existentes.

Para obtener más información sobre las actualizaciones automáticas y selectivas, consulte Métodos para aplicar una nueva configuración a las máquinas virtuales existentes .

Sobretensión máxima

Utilice la opción maxSurge para configurar cuántas instancias nuevas puede crear el MIG por encima de su targetSize durante una actualización automática. Por ejemplo, si configura maxSurge en 5, el MIG usa la nueva plantilla de instancia para crear hasta 5 instancias nuevas por encima de su tamaño objetivo. Establecer un valor maxSurge más alto acelera la actualización, a costa de instancias adicionales, que se facturan de acuerdo con Compute Engine.hoja de precios .

Puede especificar un número fijo o, si el grupo tiene 10 o más instancias, un porcentaje. Si establece un porcentaje, el Actualizador redondea el número de instancias si es necesario.

Si no establece el valor maxSurge , se utiliza el valor predeterminado. Para MIG zonales, el valor predeterminado para maxSurge es 1 . Para MIG regionales, el valor predeterminado es el número de zonas asociadas con el grupo, de forma predeterminada 3 .

maxSurge solo funciona si tiene suficiente cuota o recursos para soportar los recursos adicionales.

Si su actualización no requiere que se reemplacen las máquinas virtuales, esta opción se ignora. Puede forzar el reemplazo de las máquinas virtuales durante una actualización configurando la opción de acción mínima .

Máximo no disponible

Utilice la opción maxUnavailable para configurar cuántas instancias no están disponibles en cualquier momento durante una actualización automática. Por ejemplo, si configura maxUnavailable en 5, solo se desconectan 5 instancias para actualizar a la vez. Utilice esta opción para controlar qué tan perjudicial es la actualización para su servicio y para controlar la velocidad a la que se implementa la actualización.

Este número también incluye cualquier instancia que no esté disponible por otros motivos. Por ejemplo, si el grupo está en proceso de cambiar su tamaño , es posible que las instancias en medio de su creación no estén disponibles. Estas instancias cuentan para el número maxUnavailable .

Puede especificar un número fijo o, si el grupo tiene 10 o más instancias, un porcentaje. Si establece un porcentaje, el Actualizador redondea hacia abajo el número de instancias, si es necesario.

Si no desea que ninguna máquina no esté disponible durante una actualización, establezca el valor maxUnavailable en 0 y el valor maxSurge en mayor que 0. Con esta configuración, Compute Engine elimina cada máquina antigua solo después de que se crea y ejecuta la nueva máquina de reemplazo.

Si no establece el valor maxUnavailable , se utiliza el valor predeterminado. Para MIG zonales, el valor predeterminado es 1 . Para MIG regionales, el valor predeterminado es el número de zonas asociadas con el grupo, de forma predeterminada 3 .

Tiempo mínimo de espera

Utilice la opción minReadySec para especificar la cantidad de tiempo que se debe esperar antes de considerar una instancia nueva o reiniciada como actualizada. Utilice esta opción para controlar la velocidad a la que se implementa la actualización automática. El cronómetro comienza cuando se cumplen las dos condiciones siguientes:

  • El estado de la instancia es RUNNING .
  • Si la verificación de salud está habilitada, cuando la verificación de salud devuelve HEALTHY .

Tenga en cuenta que para que la verificación de estado sea correcta, el Actualizador espera las siguientes condiciones:

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

Si la verificación de estado no devuelve HEALTHY dentro de initialDelaySec , entonces el actualizador declara que la instancia de VM no está en buen estado y potencialmente detiene la actualización. Mientras la instancia de VM espera la verificación durante el período de tiempo initialDelaySec y minReadySec , la currentAction de la instancia es VERIFYING . Sin embargo, el estado de la instancia de VM subyacente sigue siendo RUNNING .

Si no hay comprobaciones de estado para el grupo, el temporizador se inicia cuando el estado de la instancia es RUNNING .

El valor máximo para el campo minReadySec es 3600 segundos (1 hora).

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

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

Acción mínima

Utilice la opción de acción mínima para minimizar la interrupción tanto como sea posible o aplicar una acción más disruptiva de la estrictamente necesaria. Por ejemplo, Compute Engine no necesita reiniciar una VM para cambiar sus metadatos. Pero si su aplicación lee metadatos de instancia solo cuando se reinicia una máquina virtual, puede configurar la acción mínima para reiniciar para recoger los cambios de metadatos.

Si su actualización requiere una acción más disruptiva que la que estableció con este indicador, Compute Engine realiza la acción necesaria para ejecutar la actualización. Por ejemplo, si especifica un reinicio como acción mínima, el Actualizador intenta reiniciar las instancias para aplicar la actualización. Pero, si está cambiando el sistema operativo, lo cual no se puede hacer reiniciando la instancia, entonces el Actualizador reemplaza las instancias del grupo con nuevas instancias de VM.

Para obtener más información, incluidas opciones válidas, consulte Control del nivel de interrupción durante una actualización continua .

Acción más disruptiva permitida

Utilice la opción de acción permitida más disruptiva para evitar una actualización si requiere más interrupciones de las que puede permitirse. Si no se puede completar una actualización debido a esta configuración, la actualización falla y sus máquinas virtuales mantienen su configuración anterior.

Para obtener más información, consulte Control del nivel de interrupción durante una actualización continua .

Método de reemplazo

De forma predeterminada, cuando actualiza proactivamente un MIG, el grupo elimina sus instancias de VM y las intercambia con nuevas instancias con nuevos nombres. Si necesita conservar los nombres de sus instancias de VM, use la opción replacementMethod .

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

Para conservar los nombres de las instancias, configura el método de reemplazo en RECREATE en lugar de SUBSTITUTE si actualizas el MIG con la CLI de gcloud o la API de Compute Engine. Alternativamente, si actualiza el MIG desde la consola de Google Cloud, seleccione la casilla Mantener nombres al reemplazar VM .

Métodos de reemplazo de instancias administradas.

Los valores válidos replacementMethod son:

  • SUBSTITUTE (predeterminado). Reemplaza las instancias de VM más rápido durante las actualizaciones porque se crean nuevas VM antes de que se apaguen las antiguas. Sin embargo, los nombres de las instancias no se conservan porque las instancias antiguas todavía los utilizan.

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

Para obtener más información, consulte Preservar nombres de instancias .

Ejemplos de actualizaciones adicionales

A continuación se muestran algunos ejemplos de línea de comandos con opciones de configuración comunes.

Realice una actualización continua de todas las instancias de VM, pero cree hasta 5 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=5 \
    [--zone=ZONE | --region=REGION]

Realice una actualización continua 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 beta compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=NEW_TEMPLATE \
    --min-ready=3m \
    --max-unavailable=3 \
    [--zone=ZONE | --region=REGION]

Realice una actualización continua de todas las instancias de VM, pero cree hasta un 10 % de instancias nuevas por encima del tamaño objetivo a la vez.

Por ejemplo, si tiene 1000 instancias y ejecuta el siguiente comando, el Actualizador crea hasta 100 instancias antes de comenzar a eliminar instancias que ejecutan la plantilla de instancia anterior.

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

actualizaciones canarias

Una actualización canary es una actualización que se aplica a un subconjunto de instancias del grupo. Con una actualización canary, puede probar nuevas funciones o actualizaciones en un subconjunto aleatorio de instancias, en lugar de implementar una actualización potencialmente disruptiva en todas sus instancias. Si una actualización no va bien, solo necesita revertir el subconjunto de instancias, minimizando la interrupción para sus usuarios.

Una actualización canary es lo mismo que una actualización continua estándar, excepto que la cantidad de instancias que deben actualizarse es menor que el tamaño total del grupo de instancias. Al igual que una actualización continua estándar, puede configurar opciones adicionales para controlar el nivel de interrupción de su servicio.

Iniciando una actualización canaria

Para iniciar una actualización canary, especifique hasta dos versiones de plantilla de instancia, normalmente una nueva plantilla de instancia para canary y la plantilla de instancia actual para el resto de las instancias. Por ejemplo, puede especificar que el 20 % de sus instancias se creen en función de NEW_INSTANCE_TEMPLATE mientras que el resto de las instancias continúan ejecutándose en OLD_INSTANCE_TEMPLATE . No puede especificar más de dos plantillas de instancias a la vez. NEW_INSTANCE_TEMPLATE puede ser una plantilla de instancia regional de la misma región que la de su MIG o una plantilla de instancia global.

Siempre debes especificar un tamaño de destino ( targetSize ) para la versión canary. No puede iniciar una actualización canary si omite el tamaño objetivo para la versión canary. Por ejemplo, si especificó que el 10 % de las instancias deben usarse para canarying, el 90 % restante no se modifica y usa la plantilla de instancia actual.

Consola

  1. En la consola de Google Cloud, vaya a la página de grupos de instancias .

    Ir a grupos de instancias

  2. Selecciona el grupo de instancias administrado que deseas actualizar.
  3. Haga clic en Actualizar máquinas virtuales .
  4. Haga clic en Agregar una segunda plantilla y elija la nueva plantilla de instancia para canary.
  5. En Tamaño objetivo , ingrese el porcentaje o el número fijo de instancias que desea usar para controlar la nueva plantilla de instancias.
  6. Si lo deseas, puedes configurar otras opciones de actualización.
  7. Haga clic en Actualizar máquinas virtuales para iniciar la actualización.

nube de gcloud

Utilice el comando rolling-action start-update . Proporcione tanto la plantilla actual como la nueva plantilla para expresar explícitamente cuántas instancias deben usar cada plantilla:

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

Reemplace lo siguiente:

  • INSTANCE_GROUP_NAME : el nombre del grupo de instancias.
  • CURRENT_INSTANCE_TEMPLATE_NAME : la plantilla de instancia que el grupo de instancias está ejecutando actualmente.
  • NEW_TEMPLATE : la nueva plantilla que desea canary.
  • SIZE : el número o porcentaje de instancias a las que desea aplicar esta actualización. Debe aplicar la propiedad target-size a la plantilla --canary-version . Solo puede establecer un porcentaje si el grupo contiene 10 o más instancias.
  • ZONE : para MIG zonales, proporcione la zona .
  • REGION : para MIG regionales, proporcione la región.

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

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

DESCANSAR

Llame al método patch en un recurso MIG regional o zonal . En el cuerpo de la solicitud, incluya tanto la plantilla de instancia actual como la nueva plantilla de instancia que desea controlar. Por ejemplo:

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

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

Reemplace lo siguiente:

  • NEW_TEMPLATE : el nombre de la nueva plantilla que desea canary.
  • NUMBER|PERCENTAGE : el número fijo o porcentaje de instancias para canary esta actualización. Solo puede establecer un porcentaje si el grupo contiene 10 o más instancias. En caso contrario, proporcione un número fijo.
  • CURRENT_INSTANCE_TEMPLATE_NAME : el nombre de la plantilla de instancia actual que está ejecutando el grupo.

Para obtener más opciones, consulte Configuración de opciones para su actualización .

Después de realizar una solicitud, puede monitorear la actualización para saber cuándo finaliza.

Avanzando una actualización canary

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

Consola

  1. En la consola de Google Cloud, vaya a la página de grupos de instancias .

    Ir a grupos de instancias

  2. Selecciona el grupo de instancias administrado que deseas actualizar.
  3. Haga clic en Actualizar máquinas virtuales .
  4. En Nueva plantilla , actualice el tamaño objetivo de la plantilla canary al 100% para avanzar la plantilla a todas sus instancias. Alternativamente, puede reemplazar la plantilla principal con la plantilla canary y eliminar el segundo campo de plantilla.
  5. Haga clic en Actualizar máquinas virtuales para iniciar la actualización.

nube de gcloud

Si desea comprometerse con su actualización canary, avance la actualización emitiendo otro comando rolling-action start-update pero establezca solo el indicador version y omita el indicador --canary-version .

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

DESCANSAR

Llame al método patch en un recurso MIG regional o zonal . En el cuerpo de la solicitud, especifique la nueva plantilla de instancia como una version y omita la plantilla de instancia anterior del cuerpo de la solicitud. Omita la especificación del tamaño objetivo para implementar la actualización en el 100 % de las instancias. Por ejemplo:

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

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

Actualizaciones de monitoreo

Después de iniciar una actualización, la nueva configuración puede tardar algún tiempo en terminar de implementarse en todas las instancias afectadas. Puede monitorear el progreso de una actualización verificando lo siguiente:

Estado del grupo

A nivel de grupo, Compute Engine completa un campo de solo lectura llamado status que contiene un indicador versionTarget.isReached y un indicador isStable . Puedes usar la CLI de gcloud o REST para acceder a estas marcas. También puede usar la consola de Google Cloud para ver la cantidad actual y planificada de instancias que se actualizan.

Consola

Puede monitorear una actualización continua para un grupo yendo a la página de detalles del grupo.

  1. En la consola de Google Cloud, vaya a la página de grupos de instancias .

    Ir a grupos de instancias

  2. Seleccione el grupo de instancias administrado que desea monitorear. La página de descripción general del grupo muestra la plantilla que utiliza cada instancia.
  3. Para ver los detalles, haga clic en la pestaña Detalles .
  4. En Plantilla de instancia , puede ver el número actual y objetivo de instancias para cada plantilla de instancia, así como los parámetros de actualización.

nube de gcloud

Utilice el comando describe .

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

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

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

DESCANSAR

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

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

Verificar si se completó la implementación de una actualización

Verifique si la implementación de una actualización se completó verificando el valor del campo status.versionTarget.isReached del MIG:

  • status.versionTarget.isReached establecido en true indica que todas las instancias de VM se han creado o se están creando utilizando la versión de destino.

  • status.versionTarget.isReached establecido en false indica que al menos una VM aún no está usando la versión de destino. O, en el caso de una actualización canary, false indica que la cantidad de máquinas virtuales que usan una versión de destino no coincide con su tamaño de destino.

Comprobar si un grupo de instancias administrado es estable

Verifique que todas las instancias de un grupo de instancias administrado se estén ejecutando y en buen estado verificando el valor del campo status.isStable del grupo.

status.isStable establecido en false indica que los cambios están activos, pendientes o que el propio MIG se está modificando.

status.isStable establecido en true indica lo siguiente:

  • Ninguna de las instancias en el MIG está experimentando ningún tipo de cambio y la currentAction para todas las instancias es NONE .
  • No hay cambios pendientes para instancias en el MIG.
  • El MIG en sí no se modifica.

Recuerde que la estabilidad de un MIG depende de numerosos factores porque un MIG se puede modificar de numerosas maneras. Por ejemplo:

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

Tan pronto como finalicen todas las acciones, status.isStable se establece nuevamente en true para ese MIG.

Acciones actuales en instancias

Utilice la CLI o REST de Google Cloud para ver detalles sobre las instancias en un grupo de instancias administrado. Los detalles incluyen el estado de la instancia y las acciones actuales que el grupo está realizando en sus instancias.

nube de gcloud

Todas las instancias administradas

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

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

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

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

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

Una instancia administrada específica

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

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

El comando devuelve detalles sobre la instancia, incluido el estado de la instancia, la acción actual y, para MIG con estado, el estado preservado:

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

DESCANSAR

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

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

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

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

Para ver una lista de valores de campo de instanceStatus válidos, consulte Ciclo de vida de instancia de VM .

Si una instancia está experimentando algún tipo de cambio, el grupo de instancias administrado establece el campo currentAction de la instancia en una de las siguientes acciones para ayudarlo a realizar un seguimiento del progreso del cambio. De lo contrario, el campo currentAction se establece en NONE .

Los posibles valores currentAction son:

  • ABANDONING . La instancia se está eliminando del MIG.
  • CREATING . La instancia está en proceso de creación.
  • CREATING_WITHOUT_RETRIES . La instancia se está creando sin reintentos; Si la instancia no se crea en el primer intento, el MIG no intenta reemplazar la instancia nuevamente.
  • DELETING . La instancia está en proceso de eliminación.
  • RECREATING . La instancia está siendo reemplazada.
  • REFRESHING . La instancia se elimina de sus grupos de destino actuales y se vuelve a agregar a la lista de grupos de destino actuales (esta lista puede ser la misma o diferente de los grupos de destino existentes).
  • RESTARTING . La instancia está en proceso de reiniciarse utilizando los métodos stop e start .
  • RESUMING . La instancia se encuentra en proceso de reanudación luego de haber sido suspendida.
  • STARTING . La instancia está en proceso de iniciarse después de haber sido detenida.
  • STOPPING . La instancia está siendo detenida.
  • SUSPENDING . La instancia queda suspendida.
  • VERIFYING . La instancia ha sido creada y está en proceso de verificación.
  • NONE . No se están realizando acciones en la instancia.

Revertir una actualización

No existe un comando explícito para revertir una actualización a una versión anterior, pero si decide revertir una actualización (ya sea una actualización totalmente confirmada o una actualización canary), puede hacerlo realizando una nueva solicitud de actualización y pasando la plantilla de instancia a la que desea revertir.

nube de gcloud

Por ejemplo, el siguiente comando CLI de gcloud revierte una actualización lo más rápido posible. Reemplace OLD_INSTANCE_TEMPLATE con el nombre de la plantilla de instancia a la que desea volver.

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]

DESCANSAR

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

En el cuerpo de la solicitud, especifique la plantilla de instancia anterior como version :

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

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

Para un MIG regional con menos de 10 instancias, debe usar un valor fijo para maxUnavailable y establecer el valor en la cantidad de instancias en el grupo.

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

Detener una actualización

No existe ningún método o comando explícito para detener una actualización. Puede cambiar una actualización de proactiva a oportunista y, si otros servicios como el escalador automático no cambian el tamaño del grupo, el cambio a oportunista detiene efectivamente la actualización.

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

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

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

  1. Realice una solicitud para determinar cuántas instancias se han actualizado:

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

    La CLI de gcloud devuelve una respuesta que incluye una lista de instancias del grupo y sus estados actuales:

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

    En este ejemplo, ya se han actualizado dos instancias.

  2. A continuación, realice una solicitud para realizar una nueva actualización, pero pase la cantidad de instancias que ya se han actualizado como tamaño objetivo:

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

    Para el Actualizador, esta actualización parece completa, por lo que no se actualizan otras instancias, lo que detiene efectivamente la actualización.

Controlar la velocidad de una actualización continua

De forma predeterminada, cuando realiza una solicitud de actualización, el Actualizador realiza la actualización lo más rápido posible. Si no está seguro de querer aplicar una actualización por completo o está probando tentativamente los cambios, puede controlar la velocidad de la actualización mediante los siguientes métodos.

  1. Inicie una actualización canary en lugar de una actualización completa.
  2. Establezca un valor minReadySec grande. Establecer este valor hace que el actualizador espere esta cantidad de segundos antes de considerar que la instancia se actualizó correctamente y pasar a la siguiente instancia.
  3. Habilite la verificación de estado para que el Actualizador espere a que se inicie su aplicación e informe una señal de buen estado antes de considerar que la instancia se actualizó exitosamente y pasar a la siguiente instancia.
  4. Establezca valores bajos maxUnavailable y maxSurge . Esto garantiza que solo se actualice una cantidad mínima de instancias a la vez.
  5. Actualice instancias de forma selectiva en un MIG en lugar de utilizar una actualización automática.

También puede utilizar una combinación de estos métodos para controlar la velocidad de su actualización.

Controlar el nivel de interrupción durante una actualización continua

Dependiendo de la naturaleza de una actualización, podría alterar el estado del ciclo de vida de una instancia. Por ejemplo, cambiar el disco de inicio de una instancia requiere reemplazar la instancia. Puede controlar el nivel de interrupción durante una actualización continua configurando las siguientes opciones:

  • Acción mínima : utilice esta opción para minimizar la interrupción tanto como sea posible o aplicar una acción más disruptiva de la necesaria.

    • Para limitar las interrupciones tanto como sea posible, establezca la acción mínima en REFRESH . Si su actualización requiere una acción más disruptiva, Compute Engine realiza la acción necesaria para ejecutar la actualización.
    • Para aplicar una acción más disruptiva de lo estrictamente necesario, establezca la acción mínima en RESTART o REPLACE . Por ejemplo, Compute Engine no necesita reiniciar una VM para cambiar sus metadatos. Pero si su aplicación lee los metadatos de la instancia solo cuando se reinicia una VM, puede configurar la acción mínima en RESTART para detectar los cambios de metadatos.
  • Acción más disruptiva permitida : utilice esta opción para evitar una actualización si requiere más interrupciones de las que puede permitirse. Si su actualización requiere una acción más disruptiva que la que estableció con este indicador, la solicitud de actualización falla. Por ejemplo, si configura la acción permitida más disruptiva en RESTART , el intento de actualizar la imagen del disco de arranque falla porque esa actualización requiere el reemplazo de la instancia, una acción más disruptiva que un reinicio.

Ambas opciones aceptan los siguientes valores:

Valor Descripción ¿Qué propiedades de instancia se pueden actualizar?
REFRESH No detengas la instancia. Discos adicionales, metadatos de instancia, etiquetas, etiquetas
RESTART Detenga la instancia y vuelva a iniciarla. Discos adicionales, metadatos de instancia, etiquetas, etiquetas, tipo de máquina
REPLACE (Predeterminado). Reemplace la instancia según la opción del método de reemplazo . Todas las propiedades de la instancia almacenadas en la plantilla de instancia o en la configuración por instancia

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

Cuando implementas actualizaciones automáticamente, se aplican las siguientes configuraciones predeterminadas:

  • La acción mínima predeterminada es REPLACE . Si desea evitar interrupciones innecesarias, establezca la acción mínima para que sea menos disruptiva.
  • La acción predeterminada más disruptiva permitida es REPLACE . Si no puede tolerar dicha interrupción, establezca la acción permitida más disruptiva para que sea menos disruptiva.

Puede cambiar el comportamiento predeterminado utilizando la API de Compute Engine para establecer los campos updatePolicy.minimalAction y updatePolicy.mostDisruptiveAllowedAction en su recurso MIG, por ejemplo, llamando al método regionInstanceGroupManagers.patch . Alternativamente, puede seleccionar las acciones específicas permitidas para actualizar las máquinas virtuales cuando actualiza su MIG en la consola de Google Cloud. Para ver la configuración actual, consulte obtener las propiedades de un MIG .

Una actualización falla si requiere una acción más disruptiva de lo que permitió. Si esto sucede, puede probar la actualización nuevamente con una acción permitida más disruptiva, o puede actualizar selectivamente la instancia . El motor de cómputo realiza la validación del mejor esfuerzo para ver si las instancias se pueden actualizar con el límite de interrupción especificado. Pero debido a los cambios concurrentes en el sistema, la situación puede cambiar después de que comience la actualización. Si una operación en una instancia particular falla, enumere los errores de instancia para ver el error.

Realizar un reemplazo o reiniciar en rodar

Un reinicio de Rolling se detiene y reinicia todas las instancias, mientras que un reemplazo de rodadura reemplaza las instancias de acuerdo con la opción Método de reemplazo . Un reinicio o reemplazo continuo no cambia nada más sobre el grupo, incluida la plantilla de instancia.

Hay muchas razones por las que es posible que desee un reinicio de rodaje o un reemplazo de rodadura. Por ejemplo, es posible que desee reiniciar o reemplazar sus instancias de VM de vez en cuando por una de las siguientes razones:

  • Limpiar las filtraciones de memoria.
  • Reinicie su aplicación para que pueda funcionar desde una máquina fresca.
  • Aplique un reemplazo periódico como una mejor práctica para probar sus máquinas virtuales.
  • Actualice la imagen del sistema operativo de su VM o vuelva a ejecutar los scripts de inicio para actualizar su software.

Use la consola de Google Cloud, la CLI de Google Cloud o REST para realizar un reinicio o reemplazar.

Consola

  1. En la consola de Google Cloud, vaya a la página de grupos de instancias .

    Ir a grupos de instancias

  2. Seleccione el grupo de instancia administrado que tiene las máquinas virtuales que desea reiniciar o reemplazar.
  3. Haga clic en Reiniciar/Reemplazar VMS .
  4. En operación , seleccione Reiniciar o reemplazar .
  5. Para iniciar la operación, haga clic en Reiniciar VMS o reemplace las máquinas virtuales .

nube de gcloud

Use el comando restart o replace el comando .

El siguiente comando reemplaza todas las instancias en el MIG, uno a la vez:

gcloud compute instance-groups managed rolling-action replace INSTANCE_GROUP_NAME

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

gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_NAME

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

DESCANSAR

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

En el campo updatePolicy.minimalAction , especifique RESTART o REPLACE . En el campo versions.instanceTemplate , especifique la plantilla actual.

Para activar la acción, también debe actualizar el campo versions.name Nombre, por ejemplo, al agregarla con una marca de tiempo. Más tarde, puede enumerar las máquinas virtuales del MIG e inspeccionar versions.name de cada VM.

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

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

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

Ejemplos adicionales de reemplazo/reinicio

Realizar un reinicio de todas las máquinas virtuales, dos a la vez

Este comando reinicia todas las máquinas virtuales en el grupo, dos a la vez. Observe que no se especifica una nueva plantilla de instancia.

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

Realice un reinicio de todas las máquinas virtuales lo más rápido posible

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

Realice un reemplazo enrollado de todas las máquinas virtuales lo más rápido posible

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

Preservar nombres de instancias

Si necesita preservar los nombres de sus instancias de VM en una actualización, establezca el replacementMethod para RECREATE . También debe establecer maxUnavailable para que sea mayor que 0 y maxSurge para ser 0 . Recreando instancias en lugar de reemplazarlos hace que su actualización tarda más en completarse, pero las instancias actualizadas mantienen sus nombres.

Si no especifica un método de reemplazo, se utiliza el valor actual de updatePolicy.replacementMethod del MIG. Si no está establecido, se usa el valor predeterminado del substitute , lo que reemplaza las instancias de VM con nuevas instancias que tienen nombres generados aleatoriamente.

nube de gcloud

Al emitir un comando rolling-action , incluya el --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]

DESCANSAR

Llame al método patch en un recurso MIG regional o zonal . En el cuerpo de solicitud, incluya el campo updatePolicy.replacementMethod :

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

Después de hacer una solicitud, puede monitorear la actualización para saber cuándo ha terminado la actualización.

Actualización de un grupo de instancias administradas regionales

Un MIG regional contiene instancias VM que se extienden a través de múltiples zonas dentro de una región, en oposición a un MIG zonal, que solo contiene instancias en una zona. Los MIG regionales le permiten distribuir sus instancias en más de una zona para mejorar la disponibilidad de su aplicación y para apoyar casos extremos en los que falla una zona o un grupo completo de instancias deja de responder.

Realizar una actualización en un MIG regional es la misma que realizar una actualización en un MIG zonal, con algunas excepciones descritas a continuación. Cuando inicia una actualización a un MIG regional, el actualizador siempre actualiza las instancias de forma proporcional y de manera uniforme en cada zona. No puede elegir en qué instancias se actualizan primero las zonas ni puede elegir actualizar instancias en una sola zona.

Diferencias entre la actualización de MIG regionales versus zonales

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

  • maxUnavailable= NUMBER_OF_ZONES
  • maxSurge= NUMBER_OF_ZONES

NUMBER_OF_ZONES es el número de zonas asociadas con el MIG regional. Por defecto, el número de zonas para un MIG regional es 3 . Pero puede seleccionar un número diferente.

Si está utilizando números fijos al especificar una actualización, el número fijo debe ser 0 o igual o mayor que el número de zonas asociadas con el MIG regional. Por ejemplo, si el grupo se distribuye en tres zonas, entonces no puede establecer maxSurge en 1 o en 2 porque el actualizador tiene que crear una instancia adicional en cada una de las tres zonas.

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

Si especifica un número fijo en sus solicitudes de actualización, el número que especifica se divide por el número de zonas en el MIG regional y se distribuye de manera uniforme. Por ejemplo, si especifica maxSurge=10 , entonces el actualizador divide 10 en 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 uniformemente en las zonas, el actualizador agrega las instancias restantes a una zona aleatoria. Entonces, durante 10 instancias en tres zonas, dos de las zonas obtienen 3 instancias y una zona obtiene 4 instancias. La misma lógica se aplica a maxUnavailable y a los parámetros targetSize para actualizaciones canarias.

Puede especificar un porcentaje solo si su MIG contiene 10 o más instancias de VM. Los porcentajes se manejan de manera ligeramente diferente dependiendo de la situación:

  • Si especifica un porcentaje de instancias de VM para una actualización de Canary, el actualizador intenta distribuir las instancias de manera uniforme a través de las zonas. El resto se redondea hacia arriba o hacia abajo en cada zona, pero la diferencia total no es más de 1 VM de instancia por grupo. Por ejemplo, para un MIG con 10 instancias y un porcentaje de tamaño objetivo del 25%, la actualización se implementa a 2 a 3 instancias VM.

  • Si especifica un porcentaje de opciones de actualización como maxSurge y maxUnavailable , los porcentajes se redondean independientemente por zona.

¿Qué sigue?