Actualiza la imagen de SO con un clic en MIG


Si usas una combinación de familias de imágenes personalizadas y actualizaciones progresivas, puedes habilitar las actualizaciones de imágenes de SO con un clic en tu grupo de instancias administrado (MIG).

Usar la actualización de imagen de SO con un clic proporciona una serie de beneficios, incluidos los siguientes:

  • Funciona con todos los tipos de máquina de VM y todos los tamaños de grupos de instancias.
  • Admite imágenes y contenedores de Windows y Linux.
  • Las instancias se vuelven a crear según la plantilla de instancias actual o, de forma opcional, según una plantilla nueva, de modo que puedas conservar las secuencias de comandos de inicio y metadatos personalizados.
  • Funciona con MIG con estado, por lo que puedes conservar datos de manera opcional en discos que no son de arranque.
  • El lanzamiento de una actualización de la versión nueva del SO se realiza de manera automática, sin necesidad de incorporar entradas adicionales del usuario después de la solicitud inicial.
  • Admite actualizaciones por lotes con una verificación de estado opcional.

Antes de empezar

  • Configura la autenticación si aún no lo hiciste. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.
    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

¿Cómo funciona la actualización de imágenes de SO con un clic?

Cuando invocas una actualización, el MIG reemplaza los discos de arranque de todas las VM del grupo por la última versión de la imagen del SO disponible de tu familia de imágenes personalizadas. El MIG conserva los metadatos y las secuencias de comandos de inicio que configuraste en la plantilla de instancias para cada VM del grupo. Los discos que no son de arranque se vuelven a crear según la especificación en la plantilla de instancias. Para obtener información sobre cómo preservar los datos, consulta Configura discos con estado en MIG.

Con el fin de limitar la interrupción de la aplicación, puedes realizar actualizaciones por lotes y mantener un porcentaje específico de VM en ejecución durante la actualización. Para aumentar la confiabilidad, puedes configurar una verificación de estado basada en la aplicación para tu MIG: el grupo espera una respuesta de estado de una aplicación en las VM actualizadas antes de continuar actualizando otras VM.

Antes de comenzar

  • Instala Google Cloud CLI o actualízala a la última versión.

  • Asegúrate de haber creado una plantilla de instancias que apunte a una familia de imágenes. Google recomienda que uses familias de imágenes personalizadas para reducir el riesgo de lanzar una versión de la imagen que no sea compatible con tu aplicación. Puedes asegurarte de que solo se lancen versiones de imágenes compatibles si agregas imágenes a tu familia de imágenes personalizadas solo después de realizar las pruebas de compatibilidad con la aplicación.

    Cuando tu plantilla de instancias apunta a una familia de imágenes, el MIG siempre crea instancias a partir de la última imagen de la familia, por ejemplo:

    • Cuando el MIG agrega instancias nuevas porque aumentaste su tamaño o el escalador automático del MIG lo aumentó
    • Cuando el MIG vuelve a crear una instancia, por activación manual o por reparación automática
  • Prueba la imagen nueva con tu app antes de agregarla a la familia de imágenes y de lanzarla.

  • De manera opcional, crea una verificación de estado basada en la aplicación para tu MIG. Mediante las verificaciones de estado basadas en la aplicación puedes verificar que tu aplicación responda como se espera en cada una de las VM del MIG. Puedes configurar la actualización para que no permita más de una VM no disponible. Si una aplicación no responde como se espera, el MIG marca esa VM como no disponible y el lanzamiento se detiene.

Actualiza la imagen de SO con un clic en MIG

Para actualizar todas las VM en un MIG a la imagen más reciente de una familia de imágenes personalizadas, completa los siguientes pasos:

  1. Inicia un reemplazo progresivo con el siguiente comando.

    gcloud compute instance-groups managed rolling-action replace instance-group-name \
        [--max-surge=max-surge ] [--max-unavailable=max-unavailable]

    Reemplaza lo siguiente:

    • instance-group-name: El nombre del MIG en el que operarás.
    • max-surge: La cantidad máxima adicional de VM que se pueden crear de forma temporal durante el proceso de actualización. Puede ser un número fijo (por ejemplo, 5) o un porcentaje del tamaño del MIG (por ejemplo, 10%).
    • max-unavailable: La cantidad máxima de VM que pueden no estar disponibles durante el proceso de actualización. Puede ser un número fijo (5) o un porcentaje del tamaño del MIG (10%).

    Puedes combinar las verificaciones de estado mediante las opciones --max-unavailable y --max-surge para detener las actualizaciones si estas hacen que las VM no estén disponibles.

  2. Supervisa la actualización con el subcomando wait-until para comprobar que el campo status.versionTarget.isReached del MIG esté configurado como true.

    gcloud compute instance-groups managed wait-until instance-group-name --version-target-reached

    Reemplaza lo siguiente:

    • instance-group-name: El nombre del MIG en el que operarás.

    El comando se muestra cuando se actualiza el grupo.

    También puedes enumerar instancias para ver el estado de cada una.

    gcloud compute instance-groups managed list-instances instance-group-name

    El comando muestra una lista de instancias y sus detalles, incluidos el estado, el estado de mantenimiento y las acciones actuales de cada VM. Si todas las VM figuran como RUNNING y no tienen ninguna acción actual, el MIG está actualizado y estable.

  3. En caso de que necesites revertir a una imagen de SO anterior, debes crear una plantilla de instancias y especificar la imagen que deseas usar. Luego, inicia una actualización progresiva para establecer que todas las instancias administradas usen esa plantilla. Para obtener más información, consulta Revierte una actualización.

Ejemplo

En este ejemplo, se abarcan las siguientes tareas:

  1. Crear una plantilla de instancias para actualizar de manera simple las imágenes de SO:
  2. Crear un MIG basado en la plantilla
  3. Configurar una verificación de estado para limitar las interrupciones generadas por una actualización de imagen
  4. Agregar una imagen nueva a una familia de imágenes
  5. Invocar una actualización del SO con un solo comando
  6. Supervisar la actualización

Sigue estos pasos para habilitar y realizar actualizaciones de SO con un clic en un MIG:

  1. Crea una plantilla de instancias en la que se especifique una familia de imágenes personalizada. La familia de imágenes debe contener imágenes probadas y confiables. Cada VM que crea el MIG a partir de la plantilla usa la imagen disponible más reciente de esta familia.

    gcloud compute instance-templates create example-template \
        --machine-type n1-standard-4 \
        --image-family my-image-family \
        --image-project my-project \
        --tags=http-server
    
  2. Crea un MIG basado en la plantilla de instancias. En este ejemplo, se inicia el MIG con tres instancias basadas en example-template. Debido a que en la plantilla de instancias se especifica una familia de imágenes, el MIG crea cada VM con la última imagen de la familia.

    gcloud compute instance-groups managed create example-group \
      --base-instance-name example \
      --size 3 \
      --zone us-east1-b \
      --template example-template
    
  3. Opcional: Configura y habilita una verificación de estado basada en la aplicación. Si tu app no responde después de una actualización de imagen, puedes usar el estado de la verificación de estado junto con la configuración maxUnavailable para evitar que el MIG vuelva a lanzarse.

    1. Crea una verificación de estado que busque una respuesta HTTP 200 en la ruta de solicitud /health. La app de GitHub que se encuentra en cada instancia entrega esa ruta.

      gcloud compute health-checks create http example-autohealer-check \
          --check-interval 10 \
          --timeout 5 \
          --healthy-threshold 2 \
          --unhealthy-threshold 3 \
          --request-path "/health"
      
    2. Crea una regla de firewall para permitir que los sondeos del verificador de estado accedan a las instancias. Los sondeos del verificador de estado provienen de direcciones en los rangos 130.211.0.0/2235.191.0.0/16.

      gcloud compute firewall-rules create default-allow-http-health-check \
          --network default \
          --allow tcp:80 \
          --source-ranges 130.211.0.0/22,35.191.0.0/16
      
    3. Agrega la verificación de estado a tu MIG.

      gcloud compute instance-groups managed update example-group \
          --zone us-east1-b --health-check example-autohealer-check
      
  4. Cuando una actualización está disponible, se prueba y se determina que es compatible con tu app, se crea una imagen nueva y se usa la marca --family para incluir esa imagen en la familia de imágenes personalizadas.

    gcloud compute images my-image-v2 \
        --source-disk boot-disk-1 \
        --source-disk-zone us-central1-f \
        --family my-image-family

    En este ejemplo, la imagen más reciente en my-image-family ahora es my-image-v2, que se basa en el disco de origen boot-disk-1.

  5. Invoca un reemplazo progresivo a fin de reemplazar todas las VM del MIG. El MIG reemplaza cada VM según la plantilla de instancias del grupo. En la plantilla de instancias se especifica my-image-family, por lo que cada VM obtiene la imagen más reciente de la familia (my-image-v2).

    Puedes configurar el nivel de interrupción que cause la actualización. En este ejemplo, el MIG crea una VM adicional por encima del tamaño objetivo del grupo y no quita ninguna VM existente hasta que esa VM esté activa y en ejecución.

    gcloud compute instance-groups managed rolling-action replace example-group \
        --max-surge 1 --max-unavailable 0
    
  6. Si deseas supervisar el estado de las actualizaciones, usa el comando wait-until con la marca --version-target-reached. El comando se muestra cuando se actualiza el grupo.

    gcloud compute instance-groups managed wait-until --version-target-reached example-group \
        --zone us-east1-
    Waiting for group to reach version target
    ...
    Version target is reached
    

    También puedes usar el comando list-instances para ver el estado, el estado de mantenimiento, las acciones actuales, la plantilla de instancias y la versión de cada VM.

    gcloud compute instance-groups managed list-instances example-group \
        --zone us-east1-b
    
    
    NAME       ZONE        STATUS   HEALTH_STATE  ACTION     INSTANCE_TEMPLATE  VERSION_NAME                        LAST_ERROR
    test-211p  us-east1-b  RUNNING  HEALTHY       NONE       example-template   0/2020-01-30 13:34:28.843377+00:00
    test-t5qb  us-east1-b  RUNNING  UNKNOWN       VERIFYING  example-template   0/2020-01-30 13:34:28.843377+00:00
    test-x331  us-east1-b  RUNNING  HEALTHY       NONE       example-template   0/2020-01-20 20:39:51.819399+00:00
    
  7. Si necesitas revertir a una imagen anterior, sigue estos pasos:

    1. Crea una plantilla de instancias nueva en la que se especifique la imagen que deseas.
    2. Inicia una actualización progresiva para aplicar la plantilla de instancias.

¿Qué sigue?