Configuración de metadatos con estado en MIG


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

Al configurar metadatos con estado en un grupo de instancias administrado (MIG) , garantiza 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 administrada .

Configure metadatos con estado individualmente para instancias de VM en un MIG configurándolos en configuraciones por instancia y aplicando la configuración. Puede establecer una configuración por instancia al crear la instancia o en instancias administradas existentes. Después de aplicar la configuración por instancia, el MIG almacena metadatos con estado en el campo de estado preservado de la configuración ( preservedStateFromConfig ) de una instancia administrada.

Antes de comenzar

Limitaciones

Un MIG con metadatos con estado tiene las siguientes limitaciones:

Un MIG con configuración con estado —un MIG con estado —tiene las siguientes limitaciones:

  • No puede utilizar el escalado automático si su MIG tiene una configuración con estado.
  • Si desea utilizar actualizaciones continuas automáticas, debe configurar el método de reemplazo en RECREATE .
  • Para MIG regionales con estado, debe deshabilitar la redistribución proactiva (establezca el tipo de redistribución en NONE ) para evitar la eliminación de instancias con estado mediante la redistribución automática entre zonas.
  • Si utiliza una configuración de todas las instancias para anular las propiedades de la plantilla de instancias, no puede especificar esas propiedades en ninguna configuración por instancia y al mismo tiempo en la configuración de todas las instancias del grupo.

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

Configuración de metadatos con estado en la creación de instancias

Establezca metadatos con estado al crear instancias manualmente en un MIG. Esto es útil para migrar una aplicación con estado en máquinas virtuales independientes a un MIG con estado y al crear instancias con estado.

Cuando crea manualmente una instancia en un MIG y proporciona metadatos con estado, el MIG realiza las siguientes tareas:

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

nube de gcloud

Para crear una instancia administrada con un nombre personalizado y establecer metadatos con estado en esa VM, use el 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,...]

Reemplace lo siguiente:

  • NAME : el nombre del MIG en el que crear una instancia
  • INSTANCE_NAME : el nombre de la instancia a crear
  • KEY y VALUE : pares clave-valor de metadatos con estado para configurar individualmente para las instancias además de los metadatos definidos en la plantilla de instancia
    • Los valores clave que establezca aquí tienen prioridad sobre cualquier valor clave en conflicto de la plantilla de instancia.

Ejemplo

Debe implementar un clúster de nodos, example-cluster , que pueda funcionar en uno de dos modos: active o standby . El modo se configura individualmente para cada VM en un clúster mediante metadatos, por ejemplo: mode:active . También puede configurar qué tan elaborado debe ser el registro para cada nodo, utilizando una clave de metadatos logging que se puede configurar como basic o elaborate . La aplicación en el nodo se configura utilizando valores de los metadatos de la instancia.

Para crear un nodo activo, node-12 , con un registro elaborado, ejecutaría 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 máquina virtual, node-12 , en el MIG example-cluster y establece dos pares clave-valor de metadatos, mode:active y logging:elaborate , para la nueva instancia.

Terraformar

Para crear una instancia administrada con un nombre personalizado y establecer metadatos con estado en esa VM, use el recurso google_compute_per_instance_config .

El siguiente ejemplo utiliza un MIG zonal. Si aún no tiene un MIG zonal, cree un MIG zonal con máquinas virtuales confinadas a 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 aprender a aplicar o eliminar una configuración de Terraform, consulte Comandos básicos de Terraform .

DESCANSAR

Para crear una o varias instancias administradas en un MIG con nombres de VM personalizados y establecer metadatos con estado individualmente en estas VM, use el método instanceGroupManagers.createInstances . Para un MIG regional, utilice 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",
          ...
        }
      }
    },
    ...
  ]
}

Reemplace lo siguiente:

  • PROJECT_ID : el ID del proyecto para la solicitud
  • ZONE : la zona donde se encuentra el MIG (aplica a un MIG zonal)
    • Para un MIG regional, reemplace zones/ ZONE con regions/ REGION y especifique la región del MIG
  • NAME : el nombre del MIG en el que crear una instancia
  • INSTANCE_NAME : el nombre de la instancia a crear
  • KEY y VALUE : pares clave-valor de metadatos con estado para configurar individualmente para las instancias además de los metadatos definidos en la plantilla de instancia
    • Los valores clave que establezca aquí tienen prioridad sobre cualquier valor clave en conflicto de la plantilla de instancia.

Ejemplo

Debe implementar un clúster de nodos, example-cluster , que pueda funcionar en uno de dos modos: active o standby . El modo se configura individualmente para cada VM en un clúster mediante metadatos, por ejemplo: mode:active . También puede configurar qué tan elaborado debe ser el registro para cada nodo, utilizando una clave de metadatos logging que se puede configurar como basic o elaborate . La aplicación en el nodo se configura utilizando valores de los metadatos de la instancia.

Para crear un nodo activo, node-12 , con un registro elaborado, ejecute 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 máquina virtual, node-12 , en el MIG example-cluster y establece dos pares clave-valor de metadatos, mode:active y logging:elaborate , para la nueva instancia.

Configurar, modificar y eliminar metadatos con estado individualmente para instancias de VM existentes

Establezca, modifique o elimine metadatos con estado para una instancia existente en un MIG configurándolos en una configuración asociada por instancia y luego aplicando la configuración actualizando la instancia.

nube de gcloud

Para configurar metadatos con estado individualmente para una instancia de VM en un MIG, establezca o elimine metadatos con estado en la configuración por instancia asociada. Si aplica la configuración a la instancia al mismo tiempo ( --update-instance ), puede elegir si desea mantener la instancia en ejecución, reiniciarla o volver a crearla. Si no aplica la configuración ( --no-update-instance ), sus cambios no tendrán efecto hasta que vuelva a crear o actualice 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 comando gcloud compute instance-groups managed instance-configs update con:

  • El indicador --stateful-metadata para configurar o modificar metadatos, o
  • El indicador --remove-stateful-metadata para eliminar 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]

Reemplace lo siguiente:

  • NAME : El nombre del grupo de instancias administrado.
  • INSTANCE_NAME : el nombre de la instancia para la cual configurar metadatos con estado.
  • KEY = VALUE : pares clave-valor de metadatos con estado que se configurarán individualmente para la instancia además de los metadatos definidos en la plantilla de instancia. Los valores clave que establezca aquí tienen prioridad sobre cualquier valor clave en conflicto de la plantilla de instancia.
  • KEY : Claves de metadatos con estado específicas de la instancia para eliminar de la configuración por instancia.
    • Si la plantilla de instancia no define un valor para la clave, el par clave-valor se elimina completamente de la instancia cuando se aplica el cambio.
    • Si la plantilla de instancia define un valor para la clave, el valor de la plantilla de instancia se establece en la instancia cuando se aplica el cambio.
  • MINIMAL_ACTION : realice al menos la acción especificada al aplicar la actualización de configuración por instancia a la instancia. Solo se puede establecer una MINIMAL_ACTION cuando se usa el indicador --update-instance . El valor debe ser uno de los siguientes:

    • none : ninguna acción.
    • refresh : aplica actualizaciones que se pueden aplicar sin detener la instancia.
    • restart : detiene la instancia y luego la reinicia.
    • replace : recrea la instancia.

    Si se omite, se utiliza la acción menos disruptiva requerida por la actualización.

Ejemplo

Tiene un grupo de nodos, example-cluster , que puede funcionar en uno de dos modos: active o standby . El modo se configura individualmente para cada VM en el clúster mediante metadatos, por ejemplo: mode:active . También puede configurar qué tan elaborado debe ser el registro para cada nodo, utilizando una clave de metadatos logging que se puede configurar como basic o elaborate . La aplicación en cada nodo consume los valores de los metadatos de la instancia.

La plantilla de instancia define los metadatos mode:active y logging:basic que se utilizarán de forma predeterminada para todas las instancias. Ha configurado logging:elaborate en una configuración por instancia para la máquina virtual node-12 en el clúster. Ahora desea cambiar node-12 al modo de espera y cambiar el registro a basic para esta máquina virtual.

Para cambiar la instancia node-12 al modo de espera y su registro al modo básico, ejecute 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 hace lo siguiente:

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

DESCANSAR

Para configurar metadatos con estado individualmente para instancias de VM existentes en un MIG, establezca o elimine los metadatos en las configuraciones por instancia asociadas. Luego actualice la instancia para aplicar la configuración .

Si aún no existen configuraciones por instancia para las instancias dadas, use el método instanceGroupManagers.updatePerInstanceConfigs con metadatos con 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 dadas, use 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"
    },
    ...
  ]
}

Reemplace lo siguiente:

  • PROJECT_ID : el ID del proyecto para la solicitud.
  • ZONE : La zona donde se encuentra el MIG (aplica a un MIG zonal).
    • Para un MIG regional, reemplace zones/ ZONE con regions/ REGION y especifique la región del MIG.
  • NAME : El nombre del MIG.
  • INSTANCE_NAME : el nombre de la máquina virtual para la cual configurar metadatos con estado.
  • KEY y VALUE : pares clave-valor de metadatos con estado que se configuran individualmente para las instancias, además de cualquier metadato definido 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.
    • Otras entradas de metadatos de la plantilla de instancia no se ven afectadas y están disponibles.
    • Proporcionar null como valor elimina la clave de la configuración por instancia.
  • FINGERPRINT : (Opcional). La huella digital para la configuración dada si ya existe. Se utiliza para 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 actualiza o vuelve a crear la instancia. Para aplicar los cambios a una VM, puede aplicar la actualización manualmente o usar el Actualizador en modo proactivo u oportunista.

Ejemplo

Tiene un grupo de nodos, example-cluster , que puede funcionar en uno de dos modos: active o standby . El modo se configura individualmente para cada VM en el clúster mediante metadatos, por ejemplo: mode:active . También puede configurar qué tan elaborado debe ser el registro para cada nodo, utilizando una clave de metadatos logging que se puede configurar como basic o elaborate . La aplicación en cada nodo consume los valores de los metadatos de la instancia.

La plantilla de instancia define los metadatos mode:active y logging:basic que se utilizarán de forma predeterminada para todas las instancias. Ha configurado logging:elaborate en una configuración por instancia para la máquina virtual node-12 en el clúster. Ahora, desea cambiar node-12 al modo de espera y cambiar el registro a basic para esta instancia.

Para cambiar la máquina virtual node-12 al modo de espera y su registro a básico, parchee 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. Establece mode:standby en la configuración por instancia asociada con la máquina virtual, node-12 , en el MIG example-cluster .
  2. Elimina logging:elaborate metadatos de la configuración por instancia porque el valor proporcionado es null .

La actualización de 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 vuelva a crear o actualice la instancia o si utiliza la actualización automática proactiva .

Para aplicar la actualización de configuración por instancia a la instancia de VM node-12 , llame al método instanceGroupManagers.applyUpdatesToInstances para 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 máquina virtual node-12 :

  1. Establece mode:standby , según la configuración por instancia.
  2. Establece logging:basic de la plantilla de instancia porque el valor de la clave logging ya no está definido por la configuración por instancia.
  3. La máquina virtual sigue ejecutándose durante la actualización porque minimalAction está configurada en NONE , lo que permite que MIG utilice la acción menos disruptiva requerida para la actualización. Una actualización de metadatos de instancia requiere la acción REFRESH , que no interrumpe una instancia en ejecución.

Comentario

Queremos conocer sus casos de uso, desafíos y comentarios sobre los MIG con estado. Comparta sus comentarios con nuestro equipo en mig-discuss@google.com .

¿Qué sigue?