Configurazione dei metadati stateful nei gruppi di istanze gestite

I metadati dell'istanza sono utili per impostare le proprietà delle applicazioni e comunicare con le tue applicazioni tramite il server dei metadati. Ad esempio, puoi utilizzare i metadati per configurare l'identità dell'istanza della macchina virtuale (VM), le variabili di ambiente, le informazioni sull'architettura del cluster o l'intervallo di dati di cui è responsabile una VM.

Se configuri i metadati stateful in un gruppo di istanze gestite, ti assicuri che i metadati specifici dell'istanza vengano conservati negli eventi di riparazione automatica, aggiornamento e ricreazione delle istanze gestite.

Configura singolarmente i metadati stateful per le istanze VM in un gruppo di istanze gestite impostandoli nelle configurazioni per istanza e applicando la configurazione. Puoi impostare una configurazione per istanza al momento della creazione o per le istanze gestite esistenti. Dopo aver applicato la configurazione per istanza, il gruppo di istanze gestite archivia i metadati stateful nel campo Stato conservato dalla configurazione (preservedStateFromConfig) di un'istanza gestita.

Prima di iniziare

  • Esamina quando utilizzare i MIG stateful e come funzionano i MIG stateful.
  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale viene verificata l'identità per l'accesso ai servizi e alle API Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti in Compute Engine nel seguente modo.

    Seleziona la scheda relativa a come prevedi di utilizzare gli esempi in questa pagina:

    gcloud

    1. Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init
    2. Imposta una regione e una zona predefinite.

    Terraform

    Per utilizzare gli esempi Terraform in questa pagina da un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Installa Google Cloud CLI.
    2. Per initialize gcloud CLI, esegui questo comando:

      gcloud init
    3. Crea credenziali di autenticazione locali per il tuo Account Google:

      gcloud auth application-default login

    Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

    REST

    Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, devi utilizzare le credenziali che fornisci a gcloud CLI.

      Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init

Limitazioni

Un gruppo di istanze gestite con metadati stateful presenta le seguenti limitazioni:

Un gruppo di istanze gestite con configurazione stateful, ovvero un gruppo di istanze gestite, ha le seguenti limitazioni:

  • Non puoi utilizzare la scalabilità automatica se il gruppo di istanze gestite ha una configurazione stateful.
  • Se vuoi utilizzare aggiornamenti in sequenza automatici, devi impostare il metodo di sostituzione su RECREATE.
  • Per i MIG a livello di regione stateful, devi disabilitare la ridistribuzione proattiva (imposta il tipo di ridistribuzione su NONE) per impedire l'eliminazione delle istanze stateful tramite la ridistribuzione automatica tra zone.
  • Se utilizzi una configurazione per tutte le istanze per eseguire l'override delle proprietà del modello di istanza, non puoi specificare queste proprietà in nessuna configurazione per istanza e contemporaneamente nella configurazione di tutte le istanze del gruppo.

  • Quando elimini definitivamente un'istanza (manualmente o tramite ridimensionamento), il gruppo di istanze gestite non conserva i metadati stateful dell'istanza.

Impostazione dei metadati stateful alla creazione dell'istanza

Imposta i metadati stateful durante la creazione manuale delle istanze in un gruppo di istanze gestite. È utile per eseguire la migrazione di un'applicazione stateful su VM autonome a un gruppo di istanze gestite stateful e per la creazione di istanze stateful.

Quando crei manualmente un'istanza in un gruppo di istanze gestite e fornisci metadati stateful, il gruppo di istanze gestite esegue le seguenti attività:

  1. Crea un'istanza gestita dal modello di istanza utilizzando il nome dell'istanza fornito.
  2. Crea una configurazione per istanza con i metadati stateful forniti e imposta questi metadati sull'istanza.
  3. Archivia i metadati stateful nello stato conservato dalla configurazione (preservedStateFromConfig) dell'istanza gestita associata.

gcloud

Per creare un'istanza gestita con un nome personalizzato e impostare metadati stateful sulla VM, utilizza il comando gcloud compute instance-groups managed create-instance con il flag --stateful-metadata.

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

Sostituisci quanto segue:

  • NAME: nome del gruppo di istanze gestite in cui creare un'istanza
  • INSTANCE_NAME: il nome dell'istanza da creare
  • KEY e VALUE: coppie chiave-valore dei metadati stateful da impostare singolarmente per le istanze oltre ai metadati definiti nel modello di istanza
    • Le coppie chiave-valore che imposti qui hanno la priorità su eventuali coppie chiave-valore in conflitto nel modello di istanza

Esempio

Devi eseguire il deployment di un cluster di nodi, example-cluster, che può operare in una delle due modalità: active o standby. Puoi impostare la modalità singolarmente per ogni VM in un cluster utilizzando i metadati, ad esempio: mode:active. Puoi inoltre configurare l'elaborazione del logging per ogni nodo utilizzando una chiave di metadati logging che può essere impostata su basic o elaborate. L'applicazione sul nodo è configurata utilizzando i valori dei metadati dell'istanza.

Per creare un nodo attivo, node-12, con logging elaborato, devi eseguire questo comando:

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

Il comando crea una VM, node-12, nel gruppo di istanze gestite example-cluster e imposta due coppie chiave-valore di metadati, mode:active e logging:elaborate, per la nuova istanza.

Terraform

Per creare un'istanza gestita con un nome personalizzato e impostare metadati stateful su quella VM, utilizza la risorsa google_compute_per_instance_config.

L'esempio seguente utilizza un gruppo di istanze gestite a livello di zona. Se non hai ancora un gruppo di istanze gestite a livello di zona, crea un gruppo di istanze gestite a livello di zona con VM limitate a una singola 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"
    }
  }
}

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

REST

Per creare una o più istanze gestite in un gruppo di istanze gestite con nomi di VM personalizzati e per impostare singolarmente i metadati stateful su queste VM, utilizza il metodo instanceGroupManagers.createInstances. Per un gruppo di istanze gestite a livello di regione, utilizza il metodo 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",
          ...
        }
      }
    },
    ...
  ]
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto per la richiesta
  • ZONE: la zona in cui si trova il gruppo di istanze gestite (si applica a un gruppo di istanze gestite a livello di zona)
    • Per un gruppo di istanze gestite a livello di regione, sostituisci zones/ZONE con regions/REGION e specifica la regione del gruppo di istanze gestite
  • NAME: il nome del gruppo di istanze gestite in cui creare un'istanza
  • INSTANCE_NAME: il nome dell'istanza da creare
  • KEY e VALUE: coppie chiave-valore dei metadati stateful da impostare singolarmente per le istanze oltre ai metadati definiti nel modello di istanza
    • Le coppie chiave-valore che imposti qui hanno la priorità su eventuali coppie chiave-valore in conflitto nel modello di istanza

Esempio

Devi eseguire il deployment di un cluster di nodi, example-cluster, che può operare in una delle due modalità: active o standby. Puoi impostare la modalità singolarmente per ogni VM in un cluster utilizzando i metadati, ad esempio: mode:active. Puoi inoltre configurare l'elaborazione del logging per ogni nodo utilizzando una chiave di metadati logging che può essere impostata su basic o elaborate. L'applicazione sul nodo è configurata utilizzando i valori dei metadati dell'istanza.

Per creare un nodo attivo, node-12, con logging elaborato, esegui questo metodo:

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"
        }
      }
    }
  ]
}

Il metodo crea una VM, node-12, nel gruppo di istanze gestite example-cluster e imposta due coppie chiave-valore dei metadati, mode:active e logging:elaborate, per la nuova istanza.

Impostazione, modifica e rimozione dei metadati stateful singolarmente per istanze VM esistenti

Imposta, modifica o rimuovi i metadati stateful per un'istanza esistente in un gruppo di istanze gestite impostandoli in una configurazione per istanza associata e quindi applicando la configurazione aggiornando l'istanza.

gcloud

Per configurare i metadati stateful singolarmente per un'istanza VM in un gruppo di istanze gestite, imposta o rimuovi i metadati stateful nella configurazione per istanza associata. Se applichi la configurazione all'istanza contemporaneamente (--update-instance), puoi scegliere se mantenere l'istanza in esecuzione, riavviarla o ricrearla. Se non applichi la configurazione (--no-update-instance), le modifiche non avranno effetto finché non ricrei o aggiorni l'istanza.

Se per una determinata istanza non esiste una configurazione per istanza, utilizza il comando gcloud compute instance-groups managed instance-configs create con uno dei seguenti flag:

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]

Se esiste già una configurazione per istanza per una determinata istanza, utilizza il comando gcloud compute instance-groups managed instance-configs update con:

  • Il flag --stateful-metadata per impostare o modificare i metadati oppure
  • Il flag --remove-stateful-metadata per la rimozione dei metadati stateful specifici dell'istanza.
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]

Sostituisci quanto segue:

  • NAME: il nome del gruppo di istanze gestite.
  • INSTANCE_NAME: il nome dell'istanza per cui configurare i metadati stateful.
  • KEY=VALUE: coppie chiave-valore dei metadati stateful da impostare singolarmente per l'istanza oltre ai metadati definiti nel modello di istanza. Le coppie chiave-valore che imposti qui hanno la priorità su eventuali coppie chiave-valore in conflitto nel modello di istanza.
  • KEY: chiavi di metadati stateful specifiche dell'istanza da rimuovere dalla configurazione per istanza.
    • Se il valore della chiave non è definito dal modello di istanza, la coppia chiave-valore viene rimossa completamente dall'istanza quando viene applicata la modifica.
    • Se il modello di istanza definisce un valore per la chiave, il valore del modello di istanza viene impostato per l'istanza quando viene applicata la modifica.
  • MINIMAL_ACTION: esegui almeno l'azione specificata quando applichi l'aggiornamento della configurazione per istanza all'istanza. È possibile impostare MINIMAL_ACTION solo quando viene utilizzato il flag --update-instance. Il valore deve essere uno dei seguenti:

    • none: nessuna azione.
    • refresh: applica gli aggiornamenti che è possibile applicare senza arrestare l'istanza.
    • restart: arresta l'istanza e riavviala.
    • replace: ricrea l'istanza.

    Se omessa, viene usata l'azione meno invasiva richiesta dall'aggiornamento.

Esempio

Hai un cluster di nodi, example-cluster, che può operare in una delle due modalità: active o standby. Puoi impostare la modalità singolarmente per ogni VM nel cluster utilizzando i metadati, ad esempio mode:active. Puoi anche configurare il livello di elaborazione del logging per ciascun nodo utilizzando una chiave di metadati logging che può essere impostata su basic o elaborate. L'applicazione su ciascun nodo consuma i valori dei metadati dell'istanza.

Il modello di istanza definisce i metadati mode:active e logging:basic da utilizzare come predefiniti per tutte le istanze. Hai impostato logging:elaborate in una configurazione per istanza per la VM node-12 nel cluster. Ora vuoi passare in modalità standby a node-12 e passare il logging a basic per questa VM.

Per passare l'istanza node-12 alla modalità standby e il logging di base, esegui questo comando:

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

Il comando esegue quanto segue:

  1. Imposta i metadati mode:standby nella configurazione per istanza associata alla VM node-12 nel gruppo di istanze gestite example-cluster.
  2. Rimuove i metadati logging:elaborate dalla configurazione per istanza per l'istanza node-12.
  3. Applica la modifica alla configurazione per istanza alla VM node-12:
    • Imposta i metadati mode:standby in base alla configurazione.
    • Imposta i metadati logging:basic dal modello di istanza perché il valore della chiave logging non è più definito dalla configurazione per istanza.
  4. Per impostazione predefinita, la modifica viene applicata immediatamente alla VM perché il flag --no-update-instance è omesso.
  5. La VM continua a essere in esecuzione durante l'aggiornamento perché il flag --instance-update-minimal-action viene omesso e per impostazione predefinita viene scelta l'azione meno invasiva per l'aggiornamento, in questo caso: refresh.

REST

Per configurare i metadati stateful singolarmente per le istanze VM esistenti in un gruppo di istanze gestite, imposta o rimuovi i metadati nelle configurazioni per istanza associate. Quindi aggiorna l'istanza per applicare la configurazione.

Se non esistono ancora configurazioni per istanza per le istanze specificate, utilizza il instanceGroupManagers.updatePerInstanceConfigs metodo con i metadati stateful:

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"
    },
    ...
  ]
}

Se esistono già configurazioni per istanza per le istanze specificate, utilizza il metodo 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"
    },
    ...
  ]
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto della richiesta.
  • ZONE: la zona in cui si trova il gruppo di istanze gestite (si applica a un gruppo di istanze gestite a livello di zona).
    • Per un gruppo di istanze gestite a livello di regione, sostituisci zones/ZONE con regions/REGION e specifica la regione del gruppo di istanze gestite.
  • NAME: il nome del gruppo di istanze gestite.
  • INSTANCE_NAME: il nome della VM per cui configurare i metadati stateful.
  • KEY e VALUE: coppie chiave-valore dei metadati stateful da impostare singolarmente per le istanze in aggiunta ai metadati definiti nel modello di istanza.
    • I valori dei metadati stateful definiti per le chiavi già esistenti nel modello di istanza sostituiscono i valori del modello di istanza.
    • Le altre voci di metadati del modello di istanza rimangono non interessate e disponibili.
    • Se specifichi null come valore, la chiave viene rimossa dalla configurazione per istanza.
  • FINGERPRINT: (facoltativo). L'impronta digitale per la configurazione specificata, se esistente. Utilizzato per il blocco ottimistico.

I metodi updatePerInstanceConfigs e patchPerInstanceConfigs aggiornano le configurazioni per istanza specificate, ma non applicano gli aggiornamenti della configurazione alle istanze VM associate. Le modifiche vengono applicate a una VM quando aggiorni o ricrei l'istanza. Per applicare le modifiche a una VM, puoi applicare l'aggiornamento manualmente o utilizzare il programma di aggiornamento in modalità proattiva o opportunistica.

Esempio

Hai un cluster di nodi, example-cluster, che può operare in una delle due modalità: active o standby. Puoi impostare la modalità singolarmente per ogni VM nel cluster utilizzando i metadati, ad esempio mode:active. Puoi anche configurare il livello di elaborazione del logging per ciascun nodo utilizzando una chiave di metadati logging che può essere impostata su basic o elaborate. L'applicazione su ciascun nodo consuma i valori dei metadati dell'istanza.

Il modello di istanza definisce i metadati mode:active e logging:basic da utilizzare come predefiniti per tutte le istanze. Hai impostato logging:elaborate in una configurazione per istanza per la VM node-12 nel cluster. A questo punto, vuoi passare alla modalità standby di node-12 e passare il logging a basic per questa istanza.

Per passare la VM node-12 alla modalità standby e il relativo logging a base di base, applica una patch alla configurazione per istanza associata utilizzando il metodo 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
        }
      }
    }
  ]
}

Il metodo fa quanto segue:

  1. Imposta i metadati mode:standby nella configurazione per istanza associata alla VM node-12 nel gruppo di istanze gestite example-cluster.
  2. Rimuove i metadati logging:elaborate dalla configurazione per istanza perché il valore fornito è null.

L'aggiornamento della configurazione non è ancora stato applicato all'istanza VM node-12. L'aggiornamento della configurazione verrà applicato la prossima volta che ricrei o aggiorni l'istanza oppure se utilizzi l'aggiornamento automatico proattivo.

Per applicare l'aggiornamento della configurazione per istanza all'istanza VM node-12, chiama il metodo instanceGroupManagers.applyUpdatesToInstances per l'istanza:

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"
}

Il metodo applica la configurazione per istanza aggiornata alla VM node-12:

  1. Imposta i metadati mode:standby in base alla configurazione per istanza.
  2. Imposta i metadati logging:basic dal modello di istanza perché il valore della chiave logging non è più definito dalla configurazione per istanza.
  3. La VM rimane in esecuzione durante l'aggiornamento perché minimalAction è impostato su NONE, il che consente al gruppo di istanze gestite di utilizzare l'azione meno invasiva richiesta per l'aggiornamento. Un aggiornamento dei metadati dell'istanza richiede l'azione REFRESH, che non interrompe un'istanza in esecuzione.

Feedback

Vogliamo conoscere i tuoi casi d'uso, le tue sfide e i tuoi feedback sui MIG stateful. Condividi il tuo feedback con il nostro team all'indirizzo mig-discuss@google.com.

Passaggi successivi