Esegui la migrazione di un carico di lavoro esistente a un gruppo di istanze gestite stateful


Se hai già un'applicazione stateful su istanze di macchine virtuali (VM) Compute Engine autonome (non gestite), puoi eseguirne la migrazione a un gruppo di istanze gestite stateful.

Configurando un gruppo di istanze gestite stateful e utilizzando le istanze gestite, puoi usufruire dei seguenti vantaggi:

  • Stato preservato: conservazione di nomi, dischi e metadati delle istanze anche se viene ricreata un'istanza.
  • Riparazione automatica: ricreazione automatica delle VM con carichi di lavoro non riusciti all'interno della stessa zona.
  • Aggiornamenti automatici: deployment graduali di nuove configurazioni di istanze o versioni software nelle VM di un gruppo di istanze gestite.

Limitazioni

  • Devi arrestare le VM esistenti per eseguire la migrazione dei dischi esistenti o, in alternativa, per acquisire snapshot coerenti da utilizzare dalle nuove istanze gestite.
  • Devi eliminare le VM esistenti se vuoi riutilizzarne i nomi.
  • L'applicazione deve essere in grado di funzionare su VM con lo stesso tipo di macchina. Se la tua applicazione esistente richiede più istanze di tipi di macchine diversi, crea più modelli di istanze e gruppi di istanze gestite, uno per tipo di macchina.
  • L'applicazione deve avviarsi all'avvio della VM. Puoi utilizzare un'immagine personalizzata o uno script di avvio. Di seguito sono descritte le varie opzioni.
  • Non puoi aggiornare il sistema operativo o il software implementando gli aggiornamenti dell'immagine di avvio in un MIG se scegli di creare dischi di avvio stateful.
  • Puoi ottenere l'alta disponibilità multizona solo creando repliche ridondanti in più zone e configurando la replica dei dati a livello di applicazione. Il gruppo di istanze gestite con stato esegue la riparazione automatica solo delle istanze all'interno della stessa zona e non orchestra il failover tra zone.

  • Non puoi utilizzare la scalabilità automatica con un gruppo di istanze gestite stateful.

  • Esamina le limitazioni dei gruppi di istanze gestite stateful.

Costi

Questo tutorial utilizza i componenti fatturabili di Google Cloud, tra cui:

  • Compute Engine

Utilizza il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.

Prima di iniziare

Questa guida utilizza gcloud CLI. Puoi accedere a questo strumento utilizzando Cloud Shell. In alternativa, se vuoi eseguire l'interfaccia a riga di comando gcloud sul tuo computer locale, scarica e installa la versione più recente di gcloud CLI.

Panoramica della migrazione

  1. Comprendi i componenti che costituiscono un gruppo di istanze gestite stateful.
  2. Esamina la configurazione esistente per determinare le specifiche comuni delle VM.
  3. Se vuoi, crea un'immagine personalizzata da utilizzare come immagine del disco di avvio comune.
  4. Crea un modello di istanza per specificare la configurazione comune delle VM per il gruppo di istanze gestite.
  5. Crea un gruppo di istanze gestite vuoto.
  6. Converti le VM esistenti in istanze gestite nel gruppo di istanze gestite, incluse le configurazioni per istanza.
  7. Configura la riparazione automatica per il gruppo di istanze gestite per migliorare la resilienza dell'applicazione.
  8. Se vuoi, per ridurre il sovraccarico di configurazione, sostituisci le configurazioni per istanza con un criterio stateful.

Componenti

Configura le istanze gestite del MIG stateful tramite diversi componenti:

  • Un modello di istanza contiene la configurazione comune per le VM nel gruppo di istanze gestite, tra cui il tipo di macchina, l'immagine del disco di avvio, le specifiche facoltative per i dischi aggiuntivi e uno script di avvio facoltativo.
  • Un'immagine personalizzata facoltativa contiene la tua applicazione e funge da immagine del disco di avvio comune.
  • Una configurazione per istanza contiene elementi stateful specifici per l'istanza. Ad esempio, puoi collegare un disco esistente a un'istanza specifica del gruppo. Questo disco potrebbe essere scollegato da un'istanza autonoma esistente, recuperato da uno snapshot o da un disco regionale. Il nome del dispositivo del disco non deve essere definito nel modello di istanza.
  • Un criterio con stato facoltativo contiene elementi con stato comuni. Ad esempio, definisce tutti i dischi con un nome del dispositivo specifico (come definito nel modello di istanza) come con stato per tutte le istanze del gruppo.

Quali componenti devi utilizzare?

I componenti da utilizzare dipendono dalla configurazione esistente. La tabella seguente fornisce un riepilogo generale di alcune possibili configurazioni per un'applicazione che viene eseguita su una o più istanze. Più avanti in questo tutorial esaminerai la configurazione esistente per determinare quale di queste configurazioni devi utilizzare.

Hai dati o configurazioni stateful sui tuoi dischi di avvio che devi gestire? Come viene avviata la tua applicazione?
L'applicazione è configurata su un disco di avvio esistente L'applicazione è configurata con uno script di avvio
No: i dischi di avvio sono senza stato
  1. Utilizzare un modello di istanza con un'immagine personalizzata
  2. Aggiungi configurazioni per istanza (o un criterio stateful) per i dischi di dati stateful
  1. Utilizzare un modello di istanza con uno script di avvio
  2. Aggiungi configurazioni per istanza (o un criterio stateful) per i dischi di dati stateful
Sì: almeno un disco di avvio è stateful
  1. Utilizzare un modello di istanza con un'immagine personalizzata
  2. Aggiungi configurazioni per istanza (o un criterio stateful) per i dischi di avvio e di dati stateful
  1. Utilizzare un modello di istanza con uno script di avvio
  2. Aggiungi configurazioni per istanza (o un criterio stateful) per i dischi di avvio e di dati stateful

Rivedi la configurazione esistente

Esamina le istanze autonome esistenti per controllare il tipo di macchina, i dischi e i metadati di ogni istanza.

Utilizza il comando instances describe per ogni istanza.

gcloud compute instances describe INSTANCE_NAME

Rispondi alle seguenti domande per prepararti ai passaggi successivi di questa guida.

Domande Implicazioni
Proprietà VM
Qual è il tipo di macchina che vuoi utilizzare per il tuo gruppo? Specifica questo tipo di macchina nel modello di istanza del MIG.
Come viene avviata la tua applicazione: è preconfigurata su un disco di avvio o è installata, configurata e avviata da uno script di avvio? Se l'applicazione è preconfigurata su un disco di avvio, crea un'immagine personalizzata quindi specificala nel modello di istanza del gruppo di istanze gestite.

Se l'applicazione viene avviata da uno script di avvio, specifica lo script di avvio nel modello di istanza del tuo MIG.

Se la tua applicazione richiede sia un'immagine del disco di avvio personalizzata sia uno script di avvio, specifica entrambi nel modello di istanza.
Vuoi conservare i nomi delle istanze esistenti? Devi eliminare le istanze autonome esistenti per liberare i nomi delle istanze.

Se i dischi di avvio rimangono stateless e se vuoi utilizzare aggiornamenti in sequenza automatici nel gruppo di istanze gestite, consulta la documentazione relativa alla conservazione dei nomi delle istanze.
Elementi con stato
Per ogni istanza, ci sono metadati specifici dell'istanza che devi conservare? Specifica i metadati specifici per istanza utilizzando le configurazioni per istanza.
I tuoi dischi di avvio sono stateful? In altre parole, ci sono dati su un disco di avvio di cui devi conservare lo stato? Se devi conservare lo stato dei dischi di avvio, non puoi aggiornare il sistema operativo o il software implementando gli aggiornamenti delle immagini dei dischi di avvio.
Tutte le istanze hanno gli stessi tipi di dischi? Ad esempio, hanno tutti un disco di dati? Oppure hanno e richiedono configurazioni dei dischi univoche? Se tutte le istanze hanno una configurazione dei dischi comune, definisci i nomi dei dispositivi comuni nel modello di istanza, ad esempio "data-disk". In questo modo, puoi utilizzare un criterio stateful per dichiarare i dischi come stateful nel MIG, con un overhead inferiore rispetto alle configurazioni per istanza.
Se dovessi espandere il gruppo, le dimensioni dei dischi attuali sono sufficienti? Specifica le dimensioni del disco necessarie nel modello di istanza. Le nuove istanze riceveranno i dischi specificati, a condizione che non vengano ridefiniti in un criterio stateful o in configurazioni per istanza.

Questa guida inizia con la creazione di configurazioni per istanza per i dischi stateful esistenti. Tuttavia, puoi convertire queste configurazioni in un criterio con stato in un secondo momento a condizione che i dischi abbiano nomi di dispositivi comuni dichiarati nel modello di istanze del gruppo.

Configurazione di esempio

Questa guida utilizza il seguente esempio di base per illustrare i passaggi di migrazione. Supponiamo che tu abbia un'applicazione stateful in esecuzione su tre VM Compute Engine autonome. Supponiamo le seguenti specifiche della VM:

  • Ogni VM ha lo stesso tipo di macchina.
  • Ogni VM esiste nello stesso progetto e nella stessa zona.
  • Il disco di avvio di ogni VM contiene la stessa applicazione, che è configurata sul disco di avvio per avviarsi all'avvio della VM.
  • Il disco di avvio di ogni VM non contiene altri dati o configurazioni che devi conservare.
  • Ogni VM ha un disco permanente secondario con dati stateful, ovvero dati per i quali devi mantenere lo stato corrente.

Modifica i valori riportati di seguito per utilizzarli in questo tutorial.

- Machine type: n2-standard-2
- Project: my-project
- Zone: europe-west1-c
- Name of one of the VMs to migrate: my-instance-1

Creare un'immagine personalizzata

Se l'applicazione o uno dei relativi requisiti sono già configurati su un disco di avvio esistente, crea un'immagine personalizzata che puoi riutilizzare. In alternativa, se la tua applicazione viene installata, configurata e avviata esclusivamente utilizzando uno script di avvio, salta questo passaggio e vai a Creare un modello di istanza.

Nello scenario di esempio discusso in precedenza, il disco di avvio di ogni VM autonoma esistente contiene l'applicazione configurata. Pertanto, puoi seguire i passaggi per creare un'immagine personalizzata in base a una di queste VM.

  1. Arresta una delle istanze.

    gcloud compute instances stop my-instance-1
  2. Determina l'origine del disco descrivendo l'istanza.

    gcloud compute instances describe my-instance-1

    L'output è simile al seguente:

    ...
    disks:
    – autoDelete: true
      boot: true
      ...
      source: https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1
      ...
    

    Individua il campo source nell'output e prendi nota dell'URL completo del disco di avvio in quel campo.

  3. Utilizza il comando images create per preparare un'immagine personalizzata che utilizzi la stessa origine.

    gcloud compute images create my-boot-image \
        --source-disk=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1
    

    L'output è simile al seguente:

    Created [https://www.googleapis.com/compute/v1/projects/my-project/global/images/my-boot-image].
    

Crea un modello di istanza

Un modello di istanza è una risorsa Compute Engine immutabile che memorizza la configurazione della VM. Una volta creato, un modello non può essere aggiornato. Se devi modificarlo in un secondo momento, crea un nuovo modello e poi implementalo nel gruppo.

Segui i passaggi descritti in Creazione di un nuovo modello di istanza utilizzando le seguenti impostazioni.

  • Tipo di macchina: specifica un tipo di macchina adatto a tutte le tue istanze esistenti.

  • Script di avvio: se avvii l'applicazione utilizzando uno script di avvio, specificalo.

  • Disco di avvio:

    • Immagine: specifica un'immagine del disco di avvio comune per tutte le VM del gruppo di istanze gestite. Ad esempio, se hai creato un'immagine personalizzata in base al disco di avvio di una VM esistente, specificalo. Se devi utilizzare un disco di avvio esistente per una VM specifica, puoi specificarlo esplicitamente con una configurazione per istanza quando converti la VM in un'istanza gestita, come spiegato più avanti in questo documento.
    • Nome del dispositivo: specifica un nome del dispositivo che rifletta lo scopo del disco, ad esempio boot-disk. In questo modo puoi configurare un singolo criterio stateful per conservare tutti i dischi nel gruppo di istanze gestite con quel nome dispositivo.
    • Dimensioni: specifica una dimensione del disco di avvio sufficiente per le istanze esistenti e per quelle future, nel caso in cui tu voglia aggiungerne.
  • Dischi aggiuntivi: per impostazione predefinita, quando aggiungi istanze al gruppo di istanze gestite, il gruppo di istanze gestite crea i dischi in base al modello. Tieni presente che un modello di istanza non supporta la configurazione dei dischi di una regione, ma puoi configurarli in un secondo momento utilizzando le configurazioni per istanza.

    • Nome dispositivo: per ogni disco, specifica un nome che rifletta lo scopo del disco, ad esempio data-disk.
    • Dimensione: specifica una dimensione del disco sufficiente per le istanze future, nel caso in cui ne aggiungi.

Ai fini di questa migrazione, la specifica più importante per ogni disco aggiuntivo è il nome del dispositivo, che verrà utilizzato come chiave per specificare quali dischi sono stateful. Avere un nome dispositivo comune per dischi simili ti consente di utilizzare un criterio con stato comune per conservare tutti i dischi nel gruppo di istanze gestite. La specifica delle dimensioni o dell'immagine per i dischi aggiuntivi nel modello di istanza verrà utilizzata solo per creare nuovi dischi per le nuove istanze che potresti creare oltre a quelle di cui stai eseguendo la migrazione. Quando esegui la migrazione delle istanze esistenti, dovrai conservare i dischi dati esistenti scollegandoli dalle istanze originali e ricollegandoli alle nuove istanze gestite, come spiegato più avanti in questo documento.

Il seguente comando instance-templates create crea un modello per lo scenario di esempio. Il comando include un flag --image che rimanda all'immagine di avvio personalizzata creata in precedenza, nonché un disco di dati aggiuntivo.

gcloud compute instance-templates create my-instance-template \
 --machine-type=n2-standard-2 \
 --image=https://www.googleapis.com/compute/v1/projects/my-project/global/images/my-boot-image \
 --boot-disk-device-name=boot-disk \
 --create-disk=mode=rw,size=100,type=pd-standard,device-name=data-disk

L'output è simile al seguente:

Created [https://www.googleapis.com/compute/v1/projects/my-project/global/instanceTemplates/my-instance-template].
NAME                     MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
my-instance-template  n2-standard-2               2021-04-27T11:02:07.552-07:00

Prendi nota dell'URL del modello, che puoi trovare nella prima riga dell'output.

Creare un gruppo di istanze gestite

Il passaggio successivo consiste nel creare un gruppo di istanze gestite (MIG). Per creare un gruppo di istanze gestite a livello di singola zona, segui le istruzioni per creare un gruppo di istanze gestite in una singola zona. In alternativa, se vuoi proteggerti da errori legati alle regioni utilizzando un gruppo di istanze gestite a livello di regione, segui le istruzioni per creare un gruppo di istanze gestite con VM in più zone all'interno di una regione.

Quando crei il tuo gruppo di immagini in primo piano, includi le seguenti specifiche:

  • Imposta la dimensione del gruppo su 0. Aggiungerai le istanze in un secondo momento.
  • Se stai creando un gruppo di istanze gestite a livello di regione, imposta il tipo di ridistribuzione delle istanze su NONE in modo che il gruppo di istanze gestite non ridistribuisca automaticamente le istanze tra le zone.

Il seguente comando instance-groups managed create crea un gruppo di istanze gestite a livello di zona per la configurazione di esempio descritta in precedenza. Per creare un gruppo di istanze gestite a livello di regione, sostituisci --zone=ZONE con --region=REGION.

gcloud compute instance-groups managed create my-mig \
    --size=0 \
    --template=https://www.googleapis.com/compute/v1/projects/my-project/global/instanceTemplates/my-instance-template \
    --zone=europe-west1-c

L'output è simile al seguente:

Created [https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/instanceGroupManagers/my-mig].
NAME    LOCATION        SCOPE  BASE_INSTANCE_NAME  SIZE  TARGET_SIZE  INSTANCE_TEMPLATE         AUTOSCALED
my-mig  europe-west1-c  zone   my-mig              0     0            my-instance-template      no

Dopo aver creato la risorsa, puoi utilizzarla per interagire con il gruppo di istanze gestite, ad esempio per impostare criteri sul gruppo e per aggiungere o rimuovere istanze dal gruppo.

Converti le VM esistenti in istanze gestite

Per ogni VM non gestita esistente, utilizza la procedura riportata di seguito per trasformarla in un'istanza gestita nel gruppo di istanze gestite. Questa procedura esegue la migrazione dei dischi esistenti alle nuove istanze gestite. In alternativa, puoi creare snapshot dei dischi esistenti e poi creare dischi in base a questi snapshot per l'utilizzo da parte delle istanze gestite.

  1. Descrivi la VM esistente.

    gcloud compute instances describe my-instance-1
    

    Prendi nota degli elementi che vuoi conservare dalla VM esistente, che possono includere quanto segue:

    • Nome istanza
    • Disco di avvio
    • Dischi secondari
    • Metadati dell'istanza
  2. Arresta la VM esistente.

    gcloud compute instances stop my-instance-1
    
  3. Scollega tutti i dischi con stato, incluso il disco di avvio se prevedi di riutilizzarlo.

    gcloud compute instances detach-disk my-instance-1 --disk=my-data-disk-1
    
  4. Elimina la VM esistente in modo da poterne creare un'altra con lo stesso nome. Se non vuoi conservare i nomi delle istanze, puoi eliminare la VM esistente in un secondo momento per non doverla più pagare.

    gcloud compute instances delete my-instance-1
    
  5. Segui i passaggi per creare un'istanza gestita.

    • Puoi riutilizzare il nome dell'istanza originale se l'hai eliminata. In alternativa, fornisci un nuovo nome.
    • Specifica i metadati o i dischi stateful richiesti da questa istanza gestita. Il MIG memorizza questi elementi specifici per istanza in una configurazione per istanza:

      • Specifica uno o più dischi, ad esempio quelli scollegati dall'istanza VM originale.

      • Specifica i metadati dell'istanza VM originale.

    Ad esempio, il seguente comando crea un'istanza gestita con lo stesso nome della VM originale e riutilizza il disco dati originale. Il disco di avvio per la VM viene creato dall'immagine specificata nel modello di istanza del gruppo.

    gcloud compute instance-groups managed create-instance my-mig \
        --instance=my-instance-1    \
        --stateful-metadata=role=primary      \
        --stateful-disk=device-name=data-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-data-disk-1 \
        --zone=europe-west1-c
    

    Se devi riutilizzare un disco di avvio di una vecchia VM, utilizza lo stesso comando con un altro flag --stateful-disk. Utilizza lo stesso nome del dispositivo per il disco di avvio specificato nel modello di istanza, ad esempio:

    gcloud compute instance-groups managed create-instance my-mig \
        --instance=my-instance-1 \
        --stateful-metadata=role=secondary    \
        --stateful-disk=device-name=data-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-data-disk-1 \
        --stateful-disk=device-name=boot-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1-boot-disk \
        --zone=europe-west1-c
    
  6. Ripeti i passaggi per ogni VM non gestita esistente.

Se vuoi visualizzare le configurazioni per istanza risultanti, esegui il comando instance-configs list.

gcloud compute instance-groups managed instance-configs list my-mig \
    --zone=europe-west1-c

Per visualizzare lo stato preservato di un'istanza, esegui il comando describe-instance.

gcloud compute instance-groups managed describe-instance my-mig \
  --instance=my-instance-1 \
  --zone=europe-west1-c

Per ulteriori informazioni, consulta la pagina relativa all'applicazione, alla visualizzazione e alla rimozione della configurazione stateful nei gruppi di istanze gestite.

Configurazione della riparazione automatica

I gruppi di istanze gestite riparano automaticamente le istanze gestite che smettono di funzionare. Per migliorare ulteriormente la disponibilità della tua applicazione e verificare che risponda, configura un controllo di integrità basato sull'applicazione. Consulta l'esempio di controllo di integrità dell'integrità per i comandi di esempio.

Utilizzo di un criterio stateful anziché di configurazioni per istanza

Un criterio stateful ti consente di dichiarare come stateful i dischi che hanno un nome dispositivo comune nel gruppo di istanze gestite. Un singolo criterio stateful richiede meno lavoro per la gestione rispetto a più configurazioni per istanza. Ad esempio, con un criterio stateful, puoi designare tutti i dischi con il nome dispositivo data-disk come stateful per tutte le istanze del gruppo di istanze gestite.

Se il tuo gruppo di istanze gestite soddisfa le seguenti condizioni, puoi sostituire le configurazioni per istanza con un criterio stateful:

  • Tutte le VM hanno lo stesso nome dispositivo (ad es. data-disk) per dischi con stato simile. Questo nome del dispositivo è definito nel modello di istanza del MIG.
  • Nessuna VM ha metadati stateful univoci specificati in una configurazione per istanza. Se hai metadati stateful definiti in una configurazione per istanza, puoi rimuovere il disco dalla configurazione per istanza, ma devi mantenere la configurazione per istanza per gestire i metadati stateful specifici dell'istanza.

Per sostituire più configurazioni per istanza con un singolo criterio con stato, segui questi passaggi.

  1. Configura i dischi stateful in un criterio stateful. Segui le istruzioni riportate in Impostazione e aggiornamento della configurazione stateful per i dischi in un gruppo di istanze gestite esistente.

    Per lo scenario di esempio, utilizza il seguente comando. Dichiara che tutti i dischi nel gruppo di istanze gestite con un nome dispositivo specifico verranno conservati.

    gcloud compute instance-groups managed update my-mig \
      --stateful-disk=device-name=data-disk,auto-delete=never
    
  2. Se devi conservare i metadati specifici dell'istanza, aggiorna la configurazione per istanza. In caso contrario, elimina la configurazione per istanza. Applica immediatamente la modifica alla configurazione con il flag --update-instance. Ad esempio, per eliminare la configurazione per istanza, utilizza il seguente comando:

    gcloud compute instance-groups managed instance-configs delete my-mig \
      --instances=my-instance-1 \
      --update-instance
    
  3. (Facoltativo). Verifica che gli elementi stateful siano ora archiviati nello stato conservato dal criterio (preservedStateFromPolicy) per ogni istanza gestita. Per saperne di più, consulta la sezione Visualizzare gli stati preservati delle istanze gestite.

Aggiunta di altre VM

Se devi aggiungere VM per far crescere la tua applicazione, puoi aggiungerne altre aumentando le dimensioni del MIG o creando manualmente altre istanze. Il gruppo di istanze gestite crea tutte le sue VM, inclusi i relativi dischi permanenti, in base al modello di istanza del gruppo. Se il gruppo ha un criterio stateful, tutti gli elementi elencati nel criterio stateful vengono conservati durante le operazioni di riavvio, ricreazione, riparazione automatica e aggiornamento per tutte le istanze nuove ed esistenti nel gruppo. Se devi configurare metadati o dischi stateful solo per VM specifiche nel tuo gruppo, utilizza le configurazioni per istanza.

Passaggi successivi