Questa pagina descrive quando e perché creare modelli di istanza deterministici. I modelli di istanza deterministici chiariscono esplicitamente il tipo di app o servizi di terze parti da installare sulle tue istanze quando il modello di istanza viene implementato. Creando dati deterministici di esempio, riduci al minimo l'ambiguità e il comportamento imprevisto del tuo modelli di istanza.
Perché creare modelli di istanza deterministici
In generale, consigliamo di impostare le proprietà del modello di istanze il più esplicite e deterministiche possibile. Se utilizzi una startup script nei modelli di istanza che installano o utilizzano servizi di terze parti, assicurati che questi script forniscano informazioni esplicite, come o la versione più recente dell'app da installare. Compute Engine può fare affidamento solo sulle informazioni definite nel modello e non ha alcun controllo sui servizi di terze parti a cui viene fatto riferimento. Se il modello è troppo vago, il modello di istanza potrebbe comportarsi in modo imprevisto.
Ad esempio, considera il comando seguente per creare un modello di istanza uno script di avvio che installa apache2 e utilizza un file ospitato su server esterno:
gcloud compute instance-templates create example-template-with-startup \
--image-family debian-9 \
--image-project debian-cloud \
--metadata startup-script='#! /bin/bash
sudo apt install -y apache2
scp myuser@108.59.87.185:index.php /var/www/'
Esistono due potenziali problemi con questo script di avvio:
- Lo script non definisce esplicitamente quale versione di apache2 installare,
e si basa sulla versione attuale disponibile nel repository
apt
. - Lo script si basa su un file ospitato da terze parti che non è sottoposto a controllo della versione e potrebbe essere stato modificato dall'ultima volta che è stato utilizzato il modello di istanza.
Se utilizzi un gestore della scalabilità automatica, non viene generato può causare l'aggiunta da parte del gestore della scalabilità automatica di nuove istanze a un gruppo di istanze gestite con un indirizzo configurazione, ad esempio una versione diversa di apache2.
Analogamente, se hai applicato il modello a un gruppo di istanze gestite, il valore il gruppo a un modello diverso di servizio e poi decidi di eseguire il rollback al modello precedente, potresti terminare con istanze che usano una versione diversa del file apache2 o index.php rispetto a prima dell'aggiornamento perché le istanze recuperano sempre i dati più recenti all'avvio.
Evitare comportamenti ambigui o imprevisti dei modelli di istanze
Per evitare comportamenti imprevisti del modello, utilizza uno dei seguenti metodi:
Utilizza immagini ottimizzate per il contenitore oppure Docker, con i tag Docker. Ad esempio, ti consigliamo di assegnare nuovi tag per ogni nuova compilazione dell'immagine Docker e di utilizzarli nei modelli di istanze anziché nel tag più recente predefinito. Per un'immagine ottimizzata per i container, puoi fare riferimento esplicitamente a una particolare build della tua immagine nel file manifest . L'esempio seguente utilizza l'immagine Docker "myimage" nella versione con tag "version_2_1_3":
version: v1beta2 containers: - name: simple-echo image: myimage:version_2_1_3 [ rest of your manifest file ]
Creare un'immagine personalizzata da usare come immagine per il modello. Questa soluzione è preferibile agli script di avvio perché garantisce che ogni istanza sia uguale. Gli script di avvio potrebbero avere risultati diversi dopo gli aggiornamenti del pacchetto di distribuzione. Utilizza gli script di avvio nei modelli di istanza per la prototipazione e il rapido sviluppo. Inoltre, immagini personalizzate quando è tutto pronto per il deployment di servizi di qualità enterprise.
Se utilizzi script di avvio, valuta la possibilità di aggiornarli in modo che deterministici. Ad esempio, crea una nuova versione del modello precedente e specifica uno script di avvio deterministico come segue:
gcloud compute instance-templates create example-template-with-startup-2-1-3 \ --image-family debian-9 \ --image-project debian-cloud \ --metadata startup-script='#! /bin/bash sudo apt install -y apache2=2.2.20-1ubuntu1 scp myuser@108.59.87.185:version_2_1_3/index.php /var/www/'
dove "version_2_1_3" è una sottodirectory contenente script PHP per alla versione 2.1.3 del servizio.