Actualiza instancias en un MIG

En este documento, encontrarás ayuda para decidir cómo aplicar plantillas de instancias y actualizaciones de configuración por instancias a las instancias de máquinas virtuales (VM) en un grupo de instancias administrado (MIG).

Es posible que quieras actualizar la plantilla de instancias de MIG por los siguientes motivos:

  • Para actualizar tu aplicación o el sistema operativo en cada instancia.
  • Para realizar una prueba A/B para comparar diferentes versiones de la misma aplicación.
  • Para realizar una actualización canary para minimizar las interrupciones cuando se prueba una versión nueva.
  • Para cambiar otras especificaciones de las instancias en tu MIG, como el tipo de máquina o las opciones de disco.

Aplica una versión nueva de una plantilla de instancias mediante uno de los siguientes métodos:

  • Actualización progresiva automatizada. El MIG lanza de forma automática una versión nueva de una plantilla de instancias a todas las instancias administradas en el MIG o a un subconjunto aleatorio de ellas. El alcance de la actualización y el nivel de interrupción dependen de la política de actualización que configures.
  • Actualización selectiva de instancias específicas. Puedes especificar específicamente las instancias seleccionadas para una actualización. Utiliza este método para los MIG con estado o si deseas organizar la actualización de forma manual.

Si tienes un MIG con estado, también puedes usar una actualización selectiva para aplicar los cambios que realizas en las configuraciones por instancia.

Si solo necesitas cambiar el tamaño de un MIG, consulta la documentación para saber cómo agregar o quitar instancias en un MIG.

Limitaciones

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

Elige entre las actualizaciones automatizadas y selectivas

Para lanzar una plantilla nueva de forma automática en un subconjunto de las instancias en un MIG sin estado o en todas, establece el tipo de actualización del MIG en PROACTIVE. Si tienes un MIG con estado o si una actualización automática puede causar demasiadas interrupciones, establece el tipo de actualización del MIG en OPPORTUNISTIC y, luego, actualiza instancias específicas de manera selectiva.

Actualizaciones proactivas y automatizadas

Configurar el tipo de actualización del MIG en PROACTIVE ofrece dos ventajas principales:

  • El lanzamiento de una actualización se realiza automáticamente según tus especificaciones, sin necesidad de una entrada adicional después de la solicitud inicial. Puedes especificar la velocidad de implementación, el nivel de interrupción del servicio y el alcance de la actualización.
  • Puedes automatizar lanzamientos parciales, lo que permite realizar pruebas canary.

Cuando inicias una actualización progresiva proactiva, el MIG 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.

Para obtener más información, consulta Lanza actualizaciones de forma automática en instancias en un MIG.

Actualizaciones selectivas

La actualización selectiva de instancias específicas ofrece las siguientes ventajas:

  • Puedes seleccionar las instancias que deseas actualizar.
  • Puedes aplicar una actualización con la menor cantidad de interrupciones que sea necesaria para que se complete. Por ejemplo, si solo estás actualizando metadatos, puede que no sea necesario reiniciar la instancia para completar la actualización. De forma predeterminada, la acción mínima necesaria se realiza automáticamente.
  • Puedes aplicar el reinicio o la recreación de la instancia, incluso si esas acciones no son necesarias para aplicar la actualización. Por ejemplo, es posible que desees reiniciar una VM incluso si solo actualizas los metadatos porque el software invitado tiene que recolectar los metadatos nuevos en el inicio de la VM.
  • Puede evitar una actualización si requiere más interrupciones de las que puede pagar.

Para evitar que una actualización proactiva compita con las actualizaciones selectivas, configura el tipo de actualización del MIG en OPPORTUNISTIC.

Actualizaciones oportunistas

Cuando el tipo de actualización se configura como OPPORTUNISTIC, el MIG aplica actualizaciones solo cuando aplicas de manera selectiva la actualización a instancias específicas o cuando el MIG crea instancias nuevas. Un MIG crea instancias nuevas cuando se cambia su tamaño para agregar instancias, ya sea de forma automática o manual. Compute Engine no inicia solicitudes de manera activa para aplicar actualizaciones oportunistas.

En ciertas situaciones, una actualización oportunista es útil porque no deseas causar inestabilidad en el sistema si se puede evitar. Por ejemplo, si tienes una actualización no crítica que se puede aplicar según sea necesario sin ninguna urgencia y tienes un MIG que se está escalando automáticamente, realiza una actualización oportunista de modo que Compute Engine no borre 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 se encuentran en estado RUNNING.

Para obtener más información, consulta Actualiza instancias de manera selectiva en un MIG.

Configura una actualización oportunista o proactiva

De forma predeterminada, las actualizaciones iniciadas mediante Cloud Console o la herramienta de línea de comandos de gcloud son proactivas, lo que significa que se inician de forma automática. Las actualizaciones que se inician mediante el uso de la app La API de Engine son oportunistas, lo que significa que el MIG no aplica proactivamente la plantilla nueva en las instancias existentes.

Para elegir si una actualización es oportunista o proactiva, configura el modo en oportunista o proactivo mediante Cloud Console, la herramienta de línea de comandos de gcloud o la API de Compute Engine.

Console

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

    Ir a la página Grupos de instancias

  2. Selecciona el MIG que deseas actualizar.

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

  4. En Modo de actualización, elige entre una actualización oportunista o proactiva.

gcloud

Usa el comando rolling-action start-update y establece la marca --type en opportunistic o proactive.

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

API

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

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

{
  "updatePolicy": {
    "type": "TYPE" # Choose an opportunistic or proactive update
  },
  "versions": [{
    "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE",
    }]
}

Reemplaza lo siguiente:

  • NEW_TEMPLATE: es el nombre de la plantilla nueva para el grupo
  • TYPE: el tipo de actualización, OPPORTUNISTIC o PROACTIVE

Para obtener más información sobre cómo configurar una plantilla nueva y, luego, aplicarla a instancias nuevas y existentes en un MIG, consulta las siguientes páginas:

Relación entre los campos versions y instanceTemplate

Si usas la API de Compute Engine, recomendamos usar los campos instanceGroupManagers.versions y regionInstanceGroupManagers.versions a fin de configurar plantillas de instancias para MIG zonales y regionales.

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

Para tener retrocompatibilidad, los MIG aún son compatibles con 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 MIG.

    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, por lo que el MIG 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 MIG.

    Esta es una solicitud válida. El campo que es diferente de la configuración actual se toma como el valor deseado. Por ejemplo, debes llamar al método update() y suministrar ambos campos, pero solo se actualiza un campo:

    {
     "instanceTemplate": "global/instanceTemplates/CURRENT_TEMPLATE",
     "versions": [
      {
       "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE"
      }
     ],
     "updatePolicy": {
       "type": "PROACTIVE"
     }
    }
    
  • Establece ambos campos en valores que no coincidan, y ambos valores difieran de la plantilla de instancias actual en el MIG.

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

    {
     "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE",
     "versions": [
      {
       "instanceTemplate": "global/instanceTemplates/A_DIFFERENT_NEW_TEMPLATE"
      }
     ],
     "updatePolicy": {
       "type": "PROACTIVE"
     }
    }
    

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

Si solo especificas una plantilla de instancias, ya sea a través del campo de nivel superior instanceTemplate o mediante 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 plantilla de instancias única en cualquiera de estos campos, no hay cambios en lo que get() muestre en el campo instanceTemplate.

Si el campo versions tiene dos plantillas de instancias especificadas, el método get() muestra un campo instanceTemplate vacío de nivel superior. No hay forma de expresar inequívocamente 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 MIG 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 MIG implemente de manera activa una plantilla de instancias que no se especifica de forma explícita en el campo versions.

¿Qué sigue?