Se hai già un'applicazione stateful su istanze di macchine virtuali (VM) Compute Engine autonome (non gestite), puoi eseguire la migrazione a un gruppo di istanze gestite (MIG) stateful.
La configurazione di un MIG stateful e l'uso di istanze gestite offrono i seguenti vantaggi:
- Stato conservato: conservazione di nomi, dischi e metadati delle istanze anche quando vengono ricreate.
- Ripristino automatico: ricreazione automatica delle VM con workload con errori all'interno della stessa zona.
- Aggiornamenti automatici: deployment graduali di nuove configurazioni delle istanze o versioni software nelle VM di un MIG.
Limitazioni
- Devi arrestare le VM esistenti per eseguire la migrazione dei dischi esistenti o, in alternativa, per acquisire snapshot coerenti da utilizzare per le 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ù template di istanza e più MIG, 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.
- Se scegli di creare dischi di avvio stateful, non puoi aggiornare il sistema operativo o il software implementando gli aggiornamenti dell'immagine di avvio in un MIG.
- Puoi ottenere l'alta affidabilità multizona solo creando repliche ridondanti in più zone e configurando la replica dei dati a livello di applicazione. Il MIG stateful esegue il ripristino automatico solo delle istanze all'interno della stessa zona e non orchestra il failover tra zone.
- Non puoi utilizzare la scalabilità automatica con un MIG stateful.
- Esamina le limitazioni dei MIG stateful.
Costi
Questo tutorial utilizza componenti fatturabili di Trusted 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 computer locale, scarica e installa la versione più recente di gcloud CLI.
Panoramica della migrazione
- Comprendi i componenti che costituiscono un MIG stateful.
- Esamina la configurazione esistente per determinare le specifiche comuni delle VM.
- Facoltativamente, crea un'immagine personalizzata da utilizzare come immagine disco di avvio comune.
- Crea un template di istanza per specificare la configurazione comune delle VM per il MIG.
- Crea un MIG vuoto.
- Converti le VM esistenti in istanze gestite nel MIG, incluse le configurazioni per istanza.
- Configura il ripristino automatico per il MIG per migliorare la resilienza dell'applicazione.
- Facoltativamente, per ridurre l'overhead di configurazione, sostituisci le configurazioni per istanza con una policy stateful.
Componenti
Per configurare le istanze gestite del MIG stateful vengono utilizzati diversi componenti:
- Un template di istanza contiene la configurazione comune per le VM nel MIG, tra cui il tipo di macchina, l'immagine 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 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 o recuperato da uno snapshot, oppure potrebbe essere un disco a livello di regione. Non è necessario definire il nome dispositivo del disco nel template di istanza.
- Una policy stateful facoltativa contiene elementi stateful comuni. Ad esempio, definisce come stateful tutti i dischi con un nome dispositivo specifico (definito nel template di istanza) per tutte le istanze nel gruppo.
Componenti da 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 conservare? | Come si avvia 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 stateless |
|
|
Sì: almeno un disco di avvio è 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à delle VM | |
Quale tipo di macchina vuoi utilizzare per il tuo gruppo? | Specifica questo tipo di macchina nel template di istanza del MIG. |
Come si avvia 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 specifica l'immagine nel template di istanza del MIG. Se l'applicazione viene avviata da uno script di avvio, specifica lo script di avvio nel template di istanza del MIG. Se la tua applicazione richiede sia un'immagine disco di avvio personalizzata sia uno script di avvio, specifica entrambi nel template 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 tuo MIG, consulta la documentazione relativa alla conservazione dei nomi delle istanze. |
Elementi stateful | |
Per ogni istanza, ci sono metadati specifici dell'istanza che devi conservare? | Fornisci 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 disco di avvio.
|
Tutte le istanze hanno gli stessi tipi di dischi? Ad esempio, hanno tutte un disco di dati? Oppure hanno e richiedono configurazioni disco uniche? | Se tutte le istanze hanno una configurazione dei dischi comune, definisci i nomi dispositivo comuni nel template di istanza, ad esempio "data-disk". In questo modo, puoi utilizzare una policy 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 dei dischi necessarie nel template di istanza. Le nuove istanze riceveranno i dischi specificati, a condizione che i dischi non vengano ridefiniti in una policy 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 una policy stateful in un secondo momento, a condizione che i dischi abbiano nomi dispositivo comuni dichiarati nel template di istanza del gruppo.
Configurazione di esempio
Questa guida utilizza il seguente esempio di base per illustrare i passaggi della migrazione. Supponiamo che tu abbia un'applicazione stateful in esecuzione su tre VM Compute Engine autonome. Supponiamo che le VM abbiano le seguenti specifiche:
- 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, 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
Crea 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 Crea un template di istanza.
Nello scenario di esempio discusso in precedenza, il disco di avvio di ogni VM autonoma esistente contiene l'applicazione configurata. Di conseguenza, puoi seguire i passaggi per creare un'immagine personalizzata in base a una di queste VM.
Arresta una delle istanze.
gcloud compute instances stop my-instance-1
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.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 template di istanza
Un template di istanza è una risorsa Compute Engine immutabile in cui è archiviata la configurazione della VM. Una volta creato un template, non puoi aggiornarlo. Se devi modificarlo in un secondo momento, crea un nuovo template e poi implementalo nel gruppo.
Segui i passaggi descritti in Creazione di un nuovo template 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, specifica lo script.
Disco di avvio:
- Immagine: specifica un'immagine disco di avvio comune per tutte le VM del MIG. Ad esempio, se hai creato un'immagine personalizzata in base al disco di avvio di una VM esistente, specifica quella immagine. 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 dispositivo: specifica un nome dispositivo che rifletta lo scopo del disco, ad esempio
boot-disk
. In questo modo, puoi configurare una singola policy stateful per conservare tutti i dischi nel MIG con quel nome dispositivo. - Dimensione: 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 MIG, il MIG crea i dischi in base al template. Tieni presente che un template di istanza non supporta la configurazione dei dischi a livello di 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 prevedi di aggiungerne.
- Nome dispositivo: per ogni disco, specifica un nome che rifletta lo scopo del disco, ad esempio
Ai fini di questa migrazione, la specifica più importante per ogni disco aggiuntivo è il nome dispositivo, che verrà utilizzato come chiave per specificare quali dischi sono stateful. Assegnando un nome dispositivo comune ai dischi simili puoi utilizzare una policy stateful comune per conservare tutti quei dischi nell'intero MIG. La specifica delle dimensioni o dell'immagine per i dischi aggiuntivi nel template 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 di 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 template per lo scenario di esempio. Il comando include un flag --image
che punta all'immagine di avvio personalizzata creata in precedenza e 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 template, che puoi trovare nella prima riga dell'output.
Crea un gruppo di istanze gestite
Il passaggio successivo consiste nel creare un gruppo di istanze gestite (MIG). Per creare un MIG a livello di singola zona, segui le istruzioni in Crea un MIG in un'unica zona. In alternativa, se vuoi proteggerti da errori legati alle zone utilizzando un MIG a livello di regione, segui le istruzioni in Crea un MIG con VM in più zone all'interno di una regione.
Quando crei il tuo MIG, includi le seguenti specifiche:
- Imposta la dimensione del gruppo su
0
. Aggiungerai le istanze in un secondo momento. - Se stai creando un MIG a livello di regione, imposta il tipo di ridistribuzione delle istanze su
NONE
in modo che il MIG non ridistribuisca automaticamente le istanze tra le zone.
Il seguente comando instance-groups managed create
crea un MIG a livello di zona per la configurazione di esempio descritta in precedenza. Per creare un MIG 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 MIG, ad esempio per impostare le policy del gruppo e 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 MIG. Questa procedura esegue la migrazione dei dischi esistenti alle nuove istanze gestite. In alternativa, puoi creare snapshot dei dischi esistenti e poi creare dischi basati su questi snapshot, che verranno utilizzati dalle istanze gestite.
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
Arresta la VM esistente.
gcloud compute instances stop my-instance-1
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
Elimina la VM esistente per 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
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 dell'istanza in una configurazione per istanza:
Specifica uno o più dischi, ad esempio i dischi che avevi scollegato 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 di dati originale. Il disco di avvio per la VM viene creato dall'immagine specificata nel template 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 VM precedente, utilizza lo stesso comando con un ulteriore flag
--stateful-disk
. Utilizza lo stesso nome dispositivo per il disco di avvio specificato nel template 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
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 conservato 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 saperne di più, consulta Applicazione, visualizzazione e rimozione della configurazione stateful nei MIG.
Configurazione del ripristino automatico
I MIG ripristinano 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 e il ripristino automatico. Per esempi dei comandi, consulta la configurazione di esempio del controllo di integrità.
Utilizzo di una policy stateful anziché di configurazioni per istanza
Una policy stateful ti consente di dichiarare come stateful i dischi che hanno un nome dispositivo comune nel MIG. Una singola policy stateful richiede meno lavoro di gestione rispetto a più configurazioni per istanza. Ad esempio, con una policy stateful puoi designare tutti i dischi con il nome dispositivo data-disk
come stateful per tutte le istanze nel MIG.
Se il tuo MIG soddisfa le seguenti condizioni, puoi sostituire le configurazioni per istanza con una policy stateful:
- Tutte le VM hanno lo stesso nome dispositivo (ad es.
data-disk
) per dischi stateful simili. Questo nome dispositivo è definito nel template 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 una singola policy stateful, segui questi passaggi.
Configura i dischi stateful in una policy stateful. Segui le istruzioni riportate in Impostazione e aggiornamento della configurazione stateful per i dischi in un MIG esistente.
Per lo scenario di esempio, utilizza il seguente comando, che dichiara che tutti i dischi nel MIG con un nome dispositivo specifico verranno conservati.
gcloud compute instance-groups managed update my-mig \ --stateful-disk=device-name=data-disk,auto-delete=never
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 della 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
(Facoltativo) Verifica che gli elementi stateful siano ora archiviati nello stato conservato dalla policy (
preservedStateFromPolicy
) per ogni istanza gestita. Per saperne di più, consulta Visualizzazione degli stati conservati 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 MIG crea tutte le sue VM, inclusi i relativi dischi permanenti, in base al template di istanza del gruppo. Se il gruppo ha una policy stateful, tutti gli elementi elencati nella policy stateful vengono conservati durante le operazioni di riavvio, ricreazione, ripristino automatico e aggiornamento per tutte le istanze nuove ed esistenti nel gruppo. Se devi configurare metadati o dischi stateful solo per VM specifiche nel gruppo, utilizza le configurazioni per istanza.
Passaggi successivi
- Scopri di più sull'utilizzo delle istanze gestite.
- Scopri come funzionano i MIG stateful.