Configurar metadatos con reconocimiento del estado en grupos de instancias gestionados


Los metadatos de las instancias son útiles para definir propiedades y comunicarse con las aplicaciones a través del servidor de metadatos. Por ejemplo, puedes usar metadatos para configurar la identidad de la instancia de máquina virtual (VM), las variables de entorno, la información sobre la arquitectura del clúster o el intervalo de datos del que es responsable una VM.

Si configuras metadatos con reconocimiento del estado en un grupo de instancias gestionado (MIG), te aseguras de que los metadatos específicos de la instancia se conserven en los eventos de reparación automática, actualización y recreación de la instancia gestionada.

Configura los metadatos con reconocimiento del estado de forma individual para las instancias de VM de un MIG. Para ello, define los metadatos en las configuraciones por instancia y aplica la configuración. Puedes definir una configuración por instancia al crear una instancia o en instancias gestionadas que ya tengas. Una vez que se aplica la configuración por instancia, la MIG almacena los metadatos con reconocimiento del estado en el campo Estado conservado de la configuración (preservedStateFromConfig) de una instancia gestionada.

Antes de empezar

  • Consulta cuándo usar grupos de instancias gestionados con reconocimiento del estado y cómo funcionan.
  • 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:

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

    gcloud

    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.

    Terraform

    Para usar las muestras de Terraform de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      Instala Google Cloud CLI.

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

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Set up authentication for a local development environment.

    REST

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

      Instala Google Cloud CLI.

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

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Limitaciones

Un MIG con metadatos con estado tiene las siguientes limitaciones:

Un MIG con configuración con reconocimiento del estado (un MIG con reconocimiento del estado) tiene las siguientes limitaciones:

  • No puedes usar el autoescalado si tu MIG tiene una configuración con reconocimiento del estado.
  • Si quieres usar actualizaciones continuas automatizadas, debes definir el método de sustitución en RECREATE.
  • En el caso de los MIGs regionales con reconocimiento del estado, debes inhabilitar la redistribución proactiva (establecer el tipo de redistribución en NONE) para evitar que se eliminen instancias con reconocimiento del estado mediante la redistribución automática entre zonas.
  • Si usas una configuración de todas las instancias para anular las propiedades de la plantilla de instancia, no puedes especificar esas propiedades en ninguna configuración por instancia y, al mismo tiempo, en la configuración de todas las instancias del grupo.

  • Cuando eliminas de forma permanente una instancia (ya sea manualmente o cambiando su tamaño), el MIG no conserva los metadatos con estado de la instancia.

Definir metadatos con reconocimiento del estado al crear una instancia

Define metadatos con reconocimiento del estado al crear manualmente instancias en un MIG. Esto resulta útil para migrar una aplicación con reconocimiento del estado en VMs independientes a un MIG con reconocimiento del estado y para crear instancias con reconocimiento del estado.

Cuando creas manualmente una instancia en un MIG y proporcionas metadatos con reconocimiento del estado, el MIG realiza las siguientes tareas:

  1. Crea una instancia gestionada a partir de la plantilla de instancia con el nombre de instancia proporcionado.
  2. Crea una configuración por instancia con los metadatos con reconocimiento del estado proporcionados y establece esos metadatos en la instancia.
  3. Almacena los metadatos con reconocimiento del estado en el estado conservado de la configuración (preservedStateFromConfig) de la instancia gestionada asociada.

gcloud

Para crear una instancia gestionada con un nombre personalizado y definir metadatos con estado en esa VM, usa el comando gcloud compute instance-groups managed create-instance con la marca --stateful-metadata.

gcloud compute instance-groups managed create-instance NAME \
  --instance INSTANCE_NAME \
  --stateful-metadata KEY=VALUE[,KEY=VALUE,...]

Haz los cambios siguientes:

  • NAME: el nombre del MIG en el que se va a crear una instancia
  • INSTANCE_NAME: el nombre de la instancia que se va a crear
  • KEY y VALUE: pares clave-valor de metadatos con estado que se definen individualmente para las instancias, además de los metadatos definidos en la plantilla de instancia.
    • Los valores de clave que definas aquí tendrán prioridad sobre los valores de clave de la plantilla de instancia que entren en conflicto.

Ejemplo

Debes implementar un clúster de nodos, example-cluster, que pueda funcionar en uno de estos dos modos: active o standby. Puedes definir el modo de cada VM de un clúster por separado mediante metadatos. Por ejemplo: mode:active. También puedes configurar el nivel de detalle del registro de cada nodo mediante una clave de metadatos logging que puede tener el valor basic o elaborate. La aplicación del nodo se configura con valores de los metadatos de la instancia.

Para crear un nodo activo, node-12, con un registro detallado, debes ejecutar el siguiente comando:

gcloud compute instance-groups managed create-instance example-cluster \
  --instance node-12 \
  --stateful-metadata mode=active,logging=elaborate

El comando crea una VM, node-12, en el MIG example-cluster y define dos pares clave-valor de metadatos, mode:active y logging:elaborate, para la nueva instancia.

Terraform

Para crear una instancia gestionada con un nombre personalizado y definir metadatos con estado en esa VM, usa el google_compute_per_instance_configrecurso.

En el siguiente ejemplo se usa un MIG zonal. Si aún no tienes un MIG zonal, crea uno con VMs confinadas en una sola zona.

resource "google_compute_per_instance_config" "default" {
  instance_group_manager = google_compute_instance_group_manager.default.name
  zone                   = google_compute_instance_group_manager.default.zone
  name                   = "node-12"
  preserved_state {
    metadata = {
      mode    = "active"
      logging = "elaborate"
    }
  }
}

Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.

REST

Para crear una o varias instancias gestionadas en un MIG con nombres de VM personalizados y definir metadatos con estado de forma individual en estas VMs, usa el método instanceGroupManagers.createInstances. En el caso de los MIGs regionales, utiliza el método regionInstanceGroupManagers.createInstances.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/createInstances
{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY" : "VALUE",
          ...
        }
      }
    },
    ...
  ]
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto de la solicitud
  • ZONE: la zona en la que se encuentra el MIG (se aplica a un MIG zonal)
    • En el caso de un MIG regional, sustituye zones/ZONE por regions/REGION y especifica la región del MIG.
  • NAME: el nombre del MIG en el que se va a crear una instancia.
  • INSTANCE_NAME: el nombre de la instancia que se va a crear
  • KEY y VALUE: pares clave-valor de metadatos con estado que se definen individualmente para las instancias, además de los metadatos definidos en la plantilla de instancia.
    • Los valores de clave que definas aquí tendrán prioridad sobre los valores de clave de la plantilla de instancia que entren en conflicto.

Ejemplo

Debes implementar un clúster de nodos, example-cluster, que pueda funcionar en uno de estos dos modos: active o standby. Puedes definir el modo de cada VM de un clúster por separado mediante metadatos. Por ejemplo: mode:active. También puedes configurar el nivel de detalle del registro de cada nodo mediante una clave de metadatos logging que puede tener el valor basic o elaborate. La aplicación del nodo se configura con valores de los metadatos de la instancia.

Para crear un nodo activo, node-12, con un registro detallado, ejecuta el siguiente método:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/createInstances

{
  "instance": [
    {
      "name": "node-12",
      "preservedState" : {
        "metadata": {
          "mode":"active",
          "logging":"elaborate"
        }
      }
    }
  ]
}

El método crea una VM, node-12, en el MIG example-cluster y define dos pares clave-valor de metadatos, mode:active y logging:elaborate, para la nueva instancia.

Definir, modificar y eliminar metadatos con estado de forma individual para instancias de VM ya creadas

Para definir, modificar o eliminar metadatos con reconocimiento del estado de una instancia de un MIG, defínelos en una configuración por instancia asociada y, a continuación, aplica la configuración actualizando la instancia.

gcloud

Para configurar metadatos con reconocimiento del estado de forma individual para una instancia de VM de un MIG, define o elimina los metadatos con reconocimiento del estado en la configuración por instancia asociada. Si aplicas la configuración a la instancia al mismo tiempo (--update-instance), puedes elegir si quieres que la instancia siga ejecutándose, reiniciarla o volver a crearla. Si no aplicas la configuración (--no-update-instance), los cambios no se aplicarán hasta que vuelvas a crear o actualizar la instancia.

Si no existe una configuración por instancia para una instancia determinada, usa el comando gcloud compute instance-groups managed instance-configs create con una de las siguientes marcas:

gcloud compute instance-groups managed instance-configs create NAME \
  --instance INSTANCE_NAME \
  --stateful-metadata KEY=VALUE[,KEY=VALUE,...] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_ACTION]

Si ya existe una configuración por instancia para una instancia determinada, usa el gcloud compute instance-groups managed instance-configs update comando con lo siguiente:

  • La marca --stateful-metadata para definir o modificar metadatos.
  • Marca --remove-stateful-metadata para quitar metadatos con estado específicos de la instancia.
gcloud compute instance-groups managed instance-configs update NAME \
  --instance INSTANCE_NAME \
  [--stateful-metadata KEY=VALUE[,KEY=VALUE,...]] \
  [--remove-stateful-metadata KEY[,KEY,...]] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_ACTION]

Haz los cambios siguientes:

  • NAME: el nombre del grupo de instancias gestionado.
  • INSTANCE_NAME: nombre de la instancia para la que se va a configurar los metadatos con reconocimiento del estado.
  • KEY=VALUE: pares clave-valor de metadatos con reconocimiento del estado que se definen individualmente para la instancia, además de los metadatos definidos en la plantilla de instancia. Los valores de clave que defina aquí tendrán prioridad sobre los valores de clave de la plantilla de instancia que entren en conflicto.
  • KEY: claves de metadatos con reconocimiento del estado específicas de la instancia que se van a quitar de la configuración por instancia.
    • Si la plantilla de instancia no define un valor para la clave, el par clave-valor se eliminará por completo de la instancia cuando se aplique el cambio.
    • Si la plantilla de instancia define un valor para la clave, se asignará a la instancia cuando se aplique el cambio.
  • MINIMAL_ACTION: realiza al menos la acción especificada al aplicar la actualización de configuración por instancia a la instancia. Un MINIMAL_ACTION solo se puede definir cuando se usa la marca --update-instance. El valor debe ser uno de los siguientes:

    • none: no se realiza ninguna acción.
    • refresh: aplica las actualizaciones que se puedan aplicar sin detener la instancia.
    • restart: detén la instancia y, a continuación, vuelve a iniciarla.
    • replace: recrea la instancia.

    Si se omite, se usará la acción menos disruptiva que requiera la actualización.

Ejemplo

Tienes un clúster de nodos, example-cluster, que puede funcionar en uno de los dos modos: active o standby. Puedes definir el modo de cada máquina virtual del clúster individualmente mediante metadatos. Por ejemplo: mode:active. También puedes configurar el nivel de detalle del registro de cada nodo mediante una logging clave de metadatos que puede tener el valor basic o elaborate. La aplicación de cada nodo consume los valores de los metadatos de instancia.

La plantilla de instancia define los metadatos mode:active y logging:basic que se usarán como valores predeterminados en todas las instancias. Has definido logging:elaborate en una configuración por instancia para la VM node-12 del clúster. Ahora, quieres cambiar node-12 al modo de espera y cambiar el registro a basic para esta máquina virtual.

Para cambiar la instancia node-12 a modo de espera y su registro a básico, ejecuta el siguiente comando:

gcloud compute instance-groups managed instance-configs update example-cluster \
  --instance node-12 \
  --stateful-metadata mode=standby \
  --remove-stateful-metadata logging

El comando realiza lo siguiente:

  1. Define los metadatos de mode:standby en la configuración por instancia asociada a la VM node-12 en el MIG example-cluster.
  2. Quita los metadatos de logging:elaborate de la configuración por instancia de la instancia node-12.
  3. Aplica el cambio de configuración por instancia a la VM node-12:
    • Define los metadatos de mode:standby según la configuración.
    • Define los metadatos de logging:basic de la plantilla de instancia porque el valor de la clave logging ya no se define en la configuración de cada instancia.
  4. El cambio se aplica a la VM inmediatamente de forma predeterminada porque se omite la marca --no-update-instance.
  5. La VM sigue ejecutándose durante la actualización porque se omite la marca --instance-update-minimal-action y se elige la acción menos disruptiva para la actualización de forma predeterminada, en este caso: refresh.

REST

Para configurar metadatos con reconocimiento del estado de forma individual para las instancias de VM de un MIG, define o elimina los metadatos en las configuraciones por instancia asociadas. A continuación, actualiza la instancia para aplicar la configuración.

Si aún no existen configuraciones por instancia para las instancias en cuestión, usa el instanceGroupManagers.updatePerInstanceConfigs método con metadatos con reconocimiento del estado:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/updatePerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY": "VALUE",
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

Si ya existen configuraciones por instancia para las instancias indicadas, usa el método instanceGroupManagers.patchPerInstanceConfigs.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY": "VALUE",
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto de la solicitud.
  • ZONE: la zona en la que se encuentra el MIG (se aplica a un MIG zonal).
    • En el caso de un MIG regional, sustituye zones/ZONE por regions/REGION y especifica la región del MIG.
  • NAME: el nombre del MIG.
  • INSTANCE_NAME: nombre de la VM para la que se van a configurar los metadatos con reconocimiento del estado.
  • KEY y VALUE: pares clave-valor de metadatos con estado que se definen individualmente para las instancias, además de los metadatos definidos en la plantilla de instancia.
    • Los valores de metadatos con estado definidos para las claves que ya existen en la plantilla de instancia anulan los valores de la plantilla de instancia.
    • El resto de las entradas de metadatos de la plantilla de instancia no se verán afectadas y seguirán estando disponibles.
    • Si se proporciona null como valor, se elimina la clave de la configuración por instancia.
  • FINGERPRINT: opcional. La huella digital de la configuración proporcionada, si ya existe. Se usa para el bloqueo optimista.

Los métodos updatePerInstanceConfigs y patchPerInstanceConfigs actualizan las configuraciones por instancia especificadas, pero no aplican las actualizaciones de configuración a las instancias de VM asociadas. Los cambios se aplican a una VM cuando actualizas o vuelves a crear la instancia. Para aplicar los cambios a una VM, puedes aplicar la actualización manualmente o usar Updater en modo proactivo u oportunista.

Ejemplo

Tienes un clúster de nodos, example-cluster, que puede funcionar en uno de los dos modos: active o standby. Puedes definir el modo de cada máquina virtual del clúster individualmente mediante metadatos. Por ejemplo: mode:active. También puedes configurar el nivel de detalle del registro de cada nodo mediante una logging clave de metadatos que puede tener el valor basic o elaborate. La aplicación de cada nodo consume los valores de los metadatos de instancia.

La plantilla de instancia define los metadatos mode:active y logging:basic que se usarán como valores predeterminados en todas las instancias. Has definido logging:elaborate en una configuración por instancia para la VM node-12 del clúster. Ahora, quieres cambiar node-12 al modo Inactivo y cambiar el registro a basic en esta instancia.

Para cambiar la VM node-12 a espera y su registro a básico, aplica un parche a la configuración por instancia asociada mediante el método patchPerInstanceConfigs:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "node-12",
      "preservedState" : {
        "metadata": {
          "mode": "standby",
          "logging": null
        }
      }
    }
  ]
}

El método hace lo siguiente:

  1. Define los metadatos de mode:standby en la configuración por instancia asociada a la VM node-12 del MIG example-cluster.
  2. Quita los metadatos logging:elaborate de la configuración por instancia porque el valor proporcionado es null.

La actualización de la configuración aún no se ha aplicado a la instancia de VM node-12. La actualización de la configuración se aplicará la próxima vez que recrees o actualices la instancia, o si usas la actualización automática proactiva.

Para aplicar la actualización de la configuración por instancia a la instancia de VM node-12, llama al método instanceGroupManagers.applyUpdatesToInstances de la instancia:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/applyUpdatesToInstances

{
  "instances": ["/zones/us-east1-c/instances/node-12"],
  "minimalAction": "NONE"
}

El método aplica la configuración actualizada por instancia a la node-12 VM:

  1. Define los metadatos de mode:standby según la configuración por instancia.
  2. Define los metadatos de logging:basic de la plantilla de instancia porque el valor de la clave logging ya no se define en la configuración de cada instancia.
  3. La VM sigue ejecutándose durante la actualización porque minimalAction se ha definido como NONE, lo que permite que el MIG use la acción menos disruptiva necesaria para la actualización. Para actualizar los metadatos de una instancia, se necesita la acción REFRESH, que no interrumpe una instancia en ejecución.

Comentarios

Queremos conocer tus casos prácticos, tus retos y tus comentarios sobre los MIGs con estado. Envíanos tus comentarios a nuestro equipo a la dirección mig-discuss@google.com.

Siguientes pasos