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


Se disponi di un'applicazione stateful esistente 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 ottenere i seguenti vantaggi:

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

Limitazioni

  • Devi arrestare le VM esistenti per eseguire la migrazione dei loro dischi esistenti o, in alternativa, creare snapshot coerenti per l'utilizzo da parte delle nuove istanze gestite.
  • Devi eliminare le VM esistenti se vuoi riutilizzarne i nomi.
  • L'applicazione deve poter essere eseguita su VM con lo stesso tipo di macchina. Se l'applicazione esistente richiede più istanze di tipi di macchine diversi, crea più modelli di istanza e gruppi di istanze gestite, uno per tipo di macchina.
  • L'applicazione deve essere avviata all'avvio della VM. Puoi usare un'immagine personalizzata o uno script di avvio. Ciascuna opzione è trattata di seguito.
  • Non puoi aggiornare il sistema operativo o il software implementando gli aggiornamenti delle immagini di avvio in un gruppo di istanze gestite se scegli di creare dischi di avvio stateful.
  • Puoi ottenere un'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 stateful 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 gcloud CLI sul tuo computer locale, scarica e installa l'interfaccia a riga di comando più recente.

Panoramica della migrazione

  1. Comprendi i componenti che compongono un gruppo di istanze gestite stateful.
  2. Rivedi la configurazione esistente per determinare le specifiche comuni per le VM.
  3. Facoltativamente, crea un'immagine personalizzata da utilizzare come immagine disco di avvio comune.
  4. Crea un modello di istanza per specificare la configurazione VM comune 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 al fine di migliorare la resilienza dell'applicazione.
  8. Facoltativamente, per ridurre l'overhead della configurazione, sostituisci le configurazioni per istanza con un criterio stateful.

Componenti

Puoi configurare le istanze gestite del gruppo di istanze gestite stateful tramite diversi componenti:

  • Un modello di istanza contiene configurazioni comuni 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 disco di avvio comune.
  • Una configurazione per istanza contiene elementi stateful specifici dell'istanza. Ad esempio, puoi collegare un disco esistente a un'istanza specifica nel gruppo. Questo disco può essere scollegato da un'istanza autonoma esistente, recuperato da uno snapshot o da un disco a livello di regione. Non è necessario definire il nome del disco nel modello di istanza.
  • Un criterio stateful facoltativo contiene elementi stateful comuni. Ad esempio, definisce tutti i dischi con un nome di dispositivo specifico (come definito nel modello di istanza) come stateful per tutte le istanze nel gruppo.

Quali componenti devi utilizzare?

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

Nei tuoi dischi di avvio sono presenti configurazioni o dati stateful che devi gestire? Come inizia la tua candidatura?
L'applicazione è configurata su un disco di avvio esistente L'applicazione è configurata con uno script di avvio
No: i dischi di avvio sono stateless
  1. Utilizza un modello di istanza con un'immagine personalizzata
  2. Aggiungi configurazioni per istanza (o un criterio stateful) per i dischi di dati stateful
  1. Utilizza 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. Utilizza un modello di istanza con un'immagine personalizzata
  2. Aggiungi configurazioni per istanza (o un criterio stateful) per l'avvio stateful e i dischi di dati
  1. Utilizza un modello di istanza con uno script di avvio
  2. Aggiungi configurazioni per istanza (o un criterio stateful) per l'avvio stateful e i dischi di dati

Rivedi la configurazione esistente

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

Utilizza il comando instances describe per ciascuna delle tue istanze.

gcloud compute instances describe INSTANCE_NAME

Rispondi alle seguenti domande per prepararti ai passaggi successivi della 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 gruppo di istanze gestite.
Come si avvia l'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 questo script nel modello di istanza del gruppo di istanze gestite.

Se l'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 vuoi utilizzare aggiornamenti in sequenza automatici nel tuo gruppo di istanze gestite, consulta la documentazione relativa alla preservazione dei nomi delle istanze.
Elementi con stato
Per ogni istanza, esistono metadati specifici dell'istanza che devi conservare? Specifica i metadati specifici dell'istanza utilizzando le configurazioni per istanza.
I dischi di avvio sono stateful? In altre parole, ci sono dati che risiedono 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 dell'immagine disco di avvio.
Tutte le istanze hanno gli stessi tipi di dischi? Ad esempio, hanno tutti un disco dati? Oppure hanno e richiedono configurazioni dei dischi univoche? Se tutte le istanze hanno una configurazione del disco 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 questi dischi come stateful nel gruppo di istanze gestite, con un overhead inferiore rispetto alle configurazioni per istanza.
Se dovessi ampliare il gruppo, le dimensioni dei dischi attuali sono sufficienti? Specifica le dimensioni dei dischi necessarie nel modello di istanza. Le nuove istanze riceveranno i dischi specificati da te, 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 stateful in un secondo momento, a condizione che i dischi abbiano nomi di dispositivi comuni dichiarati nel modello di istanza del gruppo.

Esempio di configurazione

Questa guida utilizza l'esempio di base riportato di seguito per illustrare i passaggi della migrazione. Supponi di avere un'applicazione stateful in esecuzione su tre VM Compute Engine autonome. Supponiamo che tu abbia specificato le seguenti specifiche per le 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 ha la stessa applicazione, che è configurata sul disco di avvio per l'avvio all'avvio della VM.
  • Il disco di avvio di ogni VM non contiene altri dati o configurazioni da conservare.
  • Ogni VM dispone di un disco permanente secondario con dati stateful, ovvero dati per i quali devi mantenere lo stato attuale.

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 la tua applicazione o i suoi requisiti sono già configurati su un disco di avvio esistente, crea un'immagine personalizzata da riutilizzare. In alternativa, se l'applicazione viene installata, configurata e avviata esclusivamente utilizzando uno script di avvio, salta questo passaggio e vai alla sezione 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. Quindi puoi seguire i passaggi per creare un'immagine personalizzata in base a una qualsiasi di queste VM.

  1. Arresta una delle istanze.

    gcloud compute instances stop my-instance-1
  2. Descrivi l'istanza per determinare l'origine del disco.

    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 annota l'URL completo del disco di avvio al suo interno.

  3. Utilizza il comando images create per preparare un'immagine personalizzata che utilizza 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 archivia la configurazione VM. Una volta creato un modello, non puoi aggiornarlo. Se devi modificarlo in un secondo momento, crea un nuovo modello e implementalo nel gruppo.

Segui la procedura descritta in Creazione di un nuovo modello di istanza utilizzando le seguenti impostazioni.

  • Tipo di macchina: specifica un tipo di macchina compatibile con tutte le istanze esistenti.

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

  • Disco di avvio:

    • Immagine: specifica un'immagine disco di avvio comune per tutte le VM nel gruppo di istanze gestite. Ad esempio, se hai creato un'immagine personalizzata basata sul disco di avvio di una VM esistente, specificala. Se hai bisogno di utilizzare un disco di avvio esistente per una VM specifica, puoi specificare esplicitamente il disco di avvio per quella VM con una configurazione per istanza, quando converti la VM in un'istanza gestita, come spiegato più avanti in questo documento.
    • Nome dispositivo: specifica il nome del dispositivo che riflette lo scopo del disco, ad esempio boot-disk. Ciò consente di 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 future, nel caso tu voglia aggiungerne una.
  • Dischi aggiuntivi: per impostazione predefinita, quando aggiungi istanze al gruppo di istanze gestite, quest'ultimo crea dischi in base al modello. Tieni presente che un modello di istanza non supporta la configurazione dei dischi a livello di regione, ma puoi configurare i dischi a livello di regione in un secondo momento utilizzando configurazioni per istanza.

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

Ai fini di questa migrazione, la specifica più importante per ogni disco aggiuntivo è il nome del dispositivo, che utilizzerai come chiave per specificare quali dischi sono stateful. Avere un nome comune per i dischi simili consente di utilizzare un criterio stateful comune per conservare tutti questi dischi nel gruppo di istanze gestite. La specifica delle dimensioni o dell'immagine per 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 di istanze esistenti, puoi conservare i dischi dati esistenti scollegandoli dalle istanze originali e ricollegandoli alle nuove istanze gestite, come spiegato di seguito 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 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. Per creare un gruppo di istanze gestite a zona singola, segui le istruzioni per creare un gruppo di istanze gestite in una zona singola. In alternativa, se vuoi proteggerti da errori a livello di zona utilizzando un gruppo di istanze gestite a livello di regione, segui le istruzioni per creare un gruppo di istanze gestite con le VM in più zone di un'area geografica.

Quando crei il gruppo di istanze gestite, includi le seguenti specifiche:

  • Imposta le dimensioni 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 comando instance-groups managed create seguente 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 ciascuna delle VM non gestite esistenti, utilizza la procedura seguente per trasformarla in un'istanza gestita nel gruppo di istanze gestite. Questa procedura esegue la migrazione dei dischi esistenti nelle nuove istanze gestite. In alternativa, puoi creare snapshot di dischi esistenti e quindi creare dischi basati su 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, tra cui:

    • 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 stateful, 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 smettere di pagarla.

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

    • Puoi riutilizzare il nome dell'istanza originale se hai eliminato quella originale. In alternativa, specifica un nuovo nome.
    • Specifica i dischi o i metadati stateful richiesti da questa istanza gestita. Il gruppo di istanze gestite archivia questi elementi specifici dell'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 della 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 da una VM precedente, utilizza lo stesso comando con un flag --stateful-disk aggiuntivo. Utilizza per il disco di avvio lo stesso nome di dispositivo 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 ciascuna delle tue VM non gestite esistenti.

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 di conservazione 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 maggiori informazioni, consulta Applicare, visualizzare e rimuovere la configurazione stateful nei MIG.

Configurazione della riparazione automatica

I gruppi di istanze gestite correggono automaticamente le istanze gestite che si interrompono. Per migliorare ulteriormente la disponibilità della tua applicazione e verificare che l'applicazione risponda, configura un controllo di integrità basato sull'applicazione. Consulta l'esempio di configurazione del controllo di integrità per alcuni comandi di esempio.

Utilizzo di criteri stateful anziché configurazioni per istanza

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

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

  • Tutte le VM hanno lo stesso nome di dispositivo (ad esempio data-disk) per dischi stateful simili. Questo nome dispositivo è definito nel modello di istanza del gruppo di istanze gestite.
  • Nessuna VM ha metadati stateful univoci specificati in una configurazione per istanza. Se in una configurazione per istanza sono definiti metadati stateful, puoi rimuovere il disco dalla configurazione per istanza, ma devi mantenere la configurazione per istanza per conservare i metadati stateful specifici dell'istanza.

Segui questi passaggi per sostituire più configurazioni per istanza con un singolo criterio stateful.

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

    Per lo scenario di esempio, utilizza il comando seguente. Dichiara che tutti i dischi nel gruppo di istanze gestite con un nome di 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 maggiori informazioni, consulta Visualizzazione degli stati conservati delle istanze gestite.

Aggiunta di altre VM

Se hai bisogno di aggiungere VM per far crescere la tua applicazione, puoi aggiungerne altre aumentando le dimensioni del gruppo di istanze gestite o creando manualmente più istanze. Il gruppo di istanze gestite crea tutte le VM, compresi i 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 del gruppo. Se devi configurare dischi stateful o metadati solo per VM specifiche nel tuo gruppo, utilizza le configurazioni per istanza.

Passaggi successivi