Actualizar imágenes de SO con un clic en grupos de instancias gestionados


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

Usar la actualización de imágenes de SO con un clic ofrece varias ventajas, entre las que se incluyen las siguientes:

  • Funciona con todos los tipos de máquinas virtuales y todos los tamaños de grupos de instancias.
  • Admite imágenes y contenedores de Windows y Linux.
  • Las instancias se vuelven a crear a partir de su plantilla de instancia actual o, de forma opcional, a partir de una nueva plantilla, por lo que puedes conservar los scripts de inicio y los metadatos personalizados.
  • Funciona con grupos de instancias gestionados con estado, por lo que puedes conservar los datos de los discos que no son de arranque.
  • La implementación de una actualización a la nueva versión del SO se realiza automáticamente, sin necesidad de que el usuario haga nada más después de la solicitud inicial.
  • Admite actualizaciones por lotes con una comprobación de estado opcional.

Antes de empezar

  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:
    1. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    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 sustituye los discos de arranque de todas las VMs del grupo por la versión de imagen de SO más reciente disponible de tu familia de imágenes personalizadas. El MIG conserva los metadatos y las secuencias de comandos de inicio que hayas configurado en la plantilla de instancia de cada VM del grupo. Los discos que no son de arranque se vuelven a crear según su especificación en la plantilla de la instancia. Para obtener información sobre cómo conservar datos, consulta Configurar discos con estado en MIGs.

Para limitar las interrupciones de las aplicaciones, puedes realizar actualizaciones en lotes y mantener un porcentaje específico de máquinas virtuales en ejecución durante la actualización. Para aumentar la fiabilidad, puedes configurar una comprobación de estado basada en aplicaciones para tu MIG: el grupo espera una respuesta correcta de una aplicación en las VMs actualizadas antes de continuar con otras VMs.

Antes de empezar

  • Instala o actualiza a la versión más reciente de Google Cloud CLI.

  • Asegúrate de haber creado una plantilla de instancia que apunte a una familia de imágenes. Google recomienda usar familias de imágenes personalizadas para reducir el riesgo de lanzar una versión de imagen que no sea compatible con tu aplicación. Para asegurarte de que solo se lancen versiones de imagen compatibles, añade imágenes a tu familia de imágenes personalizadas solo después de probar la compatibilidad con tu aplicación.

    Cuando tu plantilla de instancia apunta a una familia de imágenes, el MIG siempre crea instancias a partir de la imagen más reciente de la familia. Por ejemplo:

    • Cuando el MIG añade nuevas instancias porque tú o el escalador automático del MIG habéis aumentado el tamaño del MIG.
    • Cuando el MIG vuelve a crear una instancia, ya sea de forma manual o mediante la reparación automática.
  • Prueba la nueva imagen con tu aplicación antes de añadirla a tu familia de imágenes y lanzarla.

  • Opcionalmente, crea una comprobación del estado basada en aplicaciones para tu MIG. Una comprobación de estado basada en aplicaciones verifica que tu aplicación responde según lo esperado en cada una de las VMs del MIG. Puedes configurar la actualización para que no haya 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 la implementación no continúa.

Actualizar imágenes de SO con un clic en grupos de instancias gestionados

Para actualizar todas las VMs de un MIG a la imagen más reciente de una familia de imágenes personalizadas, sigue estos pasos:

  1. Inicia una sustitución gradual con el siguiente comando.

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

    Haz los cambios siguientes:

    • instance-group-name: el nombre del MIG en el que se va a operar.
    • max-surge: número máximo adicional de máquinas virtuales que se pueden crear temporalmente 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: número máximo de VMs 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 comprobaciones del estado mediante las opciones --max-unavailabley--max-surge para detener las actualizaciones si provocan que las VMs dejen de estar disponibles.

  2. Monitoriza la actualización con el subcomando wait-until para comprobar que el campo status.versionTarget.isReached de la MIG se ha definido como true.

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

    Haz los cambios siguientes:

    • instance-group-name: el nombre del MIG en el que se va a operar.

    El comando se devuelve cuando se actualiza el grupo.

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

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

    El comando devuelve una lista de instancias y sus detalles, como el estado, el estado de salud y las acciones actuales de cada VM. Cuando todas las VMs están RUNNING y no tienen ninguna acción en curso, la MIG está actualizada y es estable.

  3. Si necesitas volver a una imagen de SO anterior, debes crear una plantilla de instancia y especificar la imagen que quieras usar. A continuación, inicia una actualización gradual para actualizar todas las instancias gestionadas y que usen esa plantilla. Para obtener más información, consulta Volver a una versión anterior de una actualización.

Ejemplo

En este ejemplo se explican las siguientes tareas:

  1. Crea una plantilla de instancia para actualizar fácilmente la imagen del SO:
  2. Crea un MIG a partir de la plantilla.
  3. Configura una comprobación del estado para limitar las interrupciones causadas por una actualización de imagen.
  4. Añadir una imagen a una familia de imágenes.
  5. Invocar una actualización del SO con un solo comando.
  6. Monitoriza la actualización.

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

  1. Crea una plantilla de instancia que especifique una familia de imágenes personalizada. La familia de imágenes debe contener imágenes probadas y de confianza. Cada VM que crea el MIG a partir de la plantilla usa la imagen más reciente disponible 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 instancia. En este ejemplo se inicia el MIG con tres instancias basadas en example-template. Como la plantilla de instancia especifica una familia de imágenes, el MIG crea cada VM con la imagen más reciente 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 comprobación del estado basada en aplicaciones. Si tu aplicación no responde después de una actualización de imagen, puedes usar el estado de la comprobación del estado junto con el ajuste maxUnavailable para evitar que el MIG siga implementando la actualización.

    1. Crea una comprobación del estado que busque una respuesta HTTP 200 en la ruta de solicitud /health. La aplicación GitHub que se encuentra en cada instancia sirve 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 cortafuegos para permitir que las sondas de comprobación del estado accedan a las instancias. Las sondas de comprobación del estado proceden de direcciones de los siguientes intervalos: 130.211.0.0/22 y 35.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. Añade la comprobación del estado a tu MIG.

      gcloud compute instance-groups managed update example-group \
          --zone us-east1-b --health-check example-autohealer-check
      
  4. Cuando haya una actualización disponible, se haya probado y se haya determinado que es compatible con tu aplicación, crea una imagen y usa la marca --family para incluirla 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 de my-image-family es ahora my-image-v2, que se basa en el disco de origen boot-disk-1.

  5. Invoca una sustitución gradual para sustituir todas las VMs del MIG. El MIG sustituye cada VM en función de la plantilla de instancia del grupo. La plantilla de instancia 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 provoca la actualización. En este ejemplo, el MIG crea una VM adicional por encima del tamaño objetivo del grupo y no elimina ninguna VM hasta que esa VM esté activa.

    gcloud compute instance-groups managed rolling-action replace example-group \
        --max-surge 1 --max-unavailable 0
    
  6. Si quieres monitorizar el estado de las actualizaciones, usa el comando wait-until con la marca --version-target-reached. El comando se devuelve 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 salud, las acciones actuales, la plantilla de instancia 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 restaurar una imagen anterior, sigue estos pasos:

    1. Crea una plantilla de instancia que especifique la imagen que quieras.
    2. Inicia una actualización continua para aplicar la plantilla de instancia.

Siguientes pasos