Best practice per la gestione delle immagini

Questa soluzione fornisce indicazioni approfondite su come gestire le immagini di Compute Engine. Le immagini forniscono l'ambiente operativo di base per le applicazioni in esecuzione su Compute Engine e sono fondamentali per garantire il deployment e la scalabilità della tua applicazione in modo rapido e affidabile. Puoi anche utilizzare le immagini per archiviare le versioni dell'applicazione per gli scenari di ripristino di emergenza o di rollback.

Comprendere le immagini

Un'immagine in Compute Engine è una risorsa cloud che fornisce un riferimento a un disco immutabile. La rappresentazione del disco viene quindi incapsulata utilizzando alcuni formati dei dati.

Comprendere le immagini.

Un'immagine è un bundle di byte non elaborati utilizzati per creare un disco rigido precompilato. scritta su qualsiasi disco formattato è una tabella di partizione che punta a una o più partizioni che contengono dati. Perché un'immagine sia avviabile, deve contenere quanto segue:

Per poter importare un disco come immagine Compute Engine, i byte del disco devono essere scritti in un file denominato disk.raw.

Dopo che la sequenza completa di byte dal disco è scritta nel file, il file viene archiviato utilizzando il formato tar e quindi compresso utilizzando il formato GZIP. Puoi quindi caricare il file *.tar.gz risultante in Cloud Storage e registrarlo come immagine in Compute Engine, come mostrato nel diagramma precedente. Dopo aver registrato un'immagine, puoi utilizzarla per creare repliche esatte del disco originale in qualsiasi area geografica di Google Cloud. Le immagini appena registrate vengono spesso utilizzate come volumi di avvio per le istanze di Compute Engine.

Per un'introduzione più semplice ai termini di Compute Engine, consulta la sezione Istanze di macchine virtuali e Immagini nella documentazione.

Scelta di un'immagine di avvio

Il primo passaggio per l'utilizzo di Compute Engine consiste nel scegliere l'immagine che vuoi utilizzare come sistema operativo per l'istanza della tua macchina virtuale (VM). Puoi utilizzare le immagini pubbliche fornite da Google Cloud, che vengono aggiornate regolarmente. Google Cloud offre una varietà di sistemi operativi, tra cui Debian, Ubuntu e CentOS, per il tuo utilizzo senza costi aggiuntivi. Alcuni sistemi operativi, come Red Hat Enterprise Linux e Microsoft Windows, sono immagini premium, che comportano costi aggiuntivi ogni ora in cui vengono eseguite le istanze.

Per ulteriori informazioni su una determinata immagine, ad esempio i criteri di aggiornamento automatico, le patch di sicurezza e i canali di assistenza, consulta la sezione Dettagli del sistema operativo della documentazione del prodotto.

Immagine di avvio.

Puoi utilizzare le immagini pubbliche di Google Cloud per avviare un'istanza di Compute Engine, dopodiché potrai personalizzare l'istanza per eseguire l'applicazione.

Un approccio alla configurazione dell'istanza è utilizzare lo script di avvio per eseguire i comandi che eseguono il deployment dell'applicazione all'avvio. Tieni presente che questo script viene eseguito a ogni avvio dell'istanza, quindi devi renderlo idempotente per evitare di finire in uno stato incoerente o parzialmente configurato. Se le tue istanze fanno parte di un gruppo di istanze gestite, puoi utilizzare il programma di aggiornamento dei gruppi di istanze per riavviare o ricreare le istanze, che esegue nuovamente lo script di avvio. Una prassi comune è utilizzare lo script di avvio per eseguire uno strumento di gestione della configurazione come Chef o Ansible.

Creazione di immagini personalizzate

Anche se configurare uno script di avvio di un'istanza è un modo valido per eseguire il provisioning dell'infrastruttura, un metodo più efficiente consiste nel creare una nuova immagine personalizzata con la tua configurazione incorporata nell'immagine pubblica. Puoi personalizzare le immagini in diversi modi:

  • Manuale
  • Automatico
  • Importa

Il processo di creazione di un'immagine personalizzata è chiamato cucina.

L'uso delle immagini nelle immagini offre i seguenti vantaggi:

  • Tempo più breve dall'avvio all'idoneità dell'applicazione.
  • Affidabilità migliorata per i deployment delle applicazioni.
  • Rollback più semplice alle versioni precedenti.
  • Meno dipendenze da servizi esterni durante il bootstrap dell'applicazione.
  • Lo scale up crea istanze che contengono versioni software identiche.

Cottura manuale

Puoi creare una semplice immagine personalizzata creando una nuova istanza VM da un'immagine pubblica, configurando l'istanza con le applicazioni e le impostazioni che preferisci e poi creando un'immagine personalizzata da tale istanza. Utilizza questo metodo se puoi configurare le immagini da zero manualmente, anziché utilizzare la cottura automatica o l'importazione di immagini esistenti.

Per creare una semplice immagine personalizzata:

  1. Crea un'istanza da un'immagine pubblica.
  2. Connettiti all'istanza.
  3. Personalizza l'istanza in base alle tue esigenze.
  4. Arresta l'istanza.
  5. Crea un'immagine personalizzata dal disco di avvio dell'istanza. Questo processo richiede l'eliminazione dell'istanza ma la conservazione del disco di avvio.

Cottura automatica

La cottura manuale è un modo semplice per iniziare se hai un numero ridotto di immagini, ma un numero elevato di immagini diventa difficile da controllare e gestire. Packer è uno strumento open source che rende più riproducibile, verificabile, configurabile e affidabile la creazione delle immagini. Per scoprire di più su come creare una pipeline di creazione automatica delle immagini, consulta Creazione automatica di immagini con Jenkins, Packer e Kubernetes. Puoi inoltre utilizzare Packer come parte di una pipeline Spinnaker per produrre immagini di cui viene eseguito il deployment in cluster di istanze.

Importazione delle immagini esistenti in corso...

Puoi importare le immagini dei dischi di avvio dalla loro infrastruttura esistente in Compute Engine utilizzando lo strumento di importazione dei dischi virtuali, che automatizza il processo di importazione delle immagini. Per le macchine Linux, ecco una guida approfondita sulla migrazione manuale delle immagini RAW, delle immagini Amazon Machine (AMI) e delle immagini VirtualBox.

Un'altra opzione per importare le immagini esistenti è l'utilizzo di Google Cloud Migrate for Compute Engine.

Migrate for Compute Engine è una catena e un servizio di strumenti che facilita la migrazione delle macchine da una piattaforma all'altra con tempi di inattività minimi grazie alla replica continua a livello di blocco. Puoi eseguire la migrazione delle macchine a Compute Engine e quindi utilizzare la cottura manuale per creare immagini.

Crittografia delle immagini

Tutti i dischi in Compute Engine vengono criptati per impostazione predefinita utilizzando le chiavi di crittografia di Google. Anche le immagini create dai dischi sono criptate. In alternativa, puoi fornire le tue chiavi di crittografia quando vengono creati i dischi. Dopo aver creato il disco, puoi creare un'immagine criptata fornendo le chiavi di crittografia al comando di creazione dell'immagine. Per ulteriori informazioni sulla crittografia dei dati inattivi e sulle chiavi di crittografia fornite dal cliente, consulta la sezione Crittografia dei dati inattivi nella documentazione di Google Cloud.

Ciclo di vita delle immagini

Dopo aver configurato una pipeline di compilazione delle immagini, puoi utilizzare le immagini per avviare in modo affidabile le istanze di un'applicazione. Anche se la pipeline è in grado di gestire le immagini, devi assicurarti che i meccanismi di deployment utilizzino le versioni più recenti delle immagini. Infine, occorre una procedura per la selezione delle immagini, in modo che le immagini precedenti e obsolete non vengano utilizzate inavvertitamente.

Famiglie di immagini

Le famiglie di immagini ti consentono di gestire le immagini nel progetto raggruppando le immagini correlate in modo da poter eseguire il rollback e tornare indietro tra versioni specifiche delle immagini. Per scoprire di più, consulta le best practice per le famiglie di immagini.

Ritiro di un'immagine

In qualità di amministratore, puoi anche eseguire il rollback dell'immagine a cui indirizza la famiglia di immagini ritirandola mediante il seguente comando:

gcloud compute images deprecate my-application-v3-20161011 --state DEPRECATED

È possibile scegliere tra diversi stati di ritiro:

Stato Descrizione
OBSOLETO Immagini che non sono più recenti, ma possono ancora essere lanciate dagli utenti. Gli utenti vedranno un avviso che li informa che non utilizzano più l'immagine più recente.
OBSOLETE Immagini che non devono essere avviate dagli utenti o dall'automazione. Il tentativo di creare un'istanza da queste immagini non andrà a buon fine. Puoi utilizzare questo stato dell'immagine per archiviare le immagini in modo che i relativi dati siano ancora disponibili quando vengono montati come disco non di avvio.
ELIMINATO Immagini che sono già state eliminate o sono contrassegnate per l'eliminazione in futuro. Queste funzionalità non possono essere avviate e devi eliminarle il prima possibile.

Applicazione dei criteri del ciclo di vita

Puoi contrassegnare le immagini per l'eliminazione o l'obsolescenza utilizzando il comando gcloud compute images deprecate. Puoi allegare metadati alle immagini per contrassegnarle per l'eliminazione futura fornendo uno dei flag --delete-in o --delete-on. Per allegare metadati per contrassegnare le immagini per l'obsolescenza futura, fornisci i flag --obsolete-in o --obsolete-on. Puoi incorporare questo comando in un processo di creazione di un'immagine per applicare un criterio del ciclo di vita delle immagini che limiti la proliferazione delle immagini obsolete e scadute nel tuo progetto. Ad esempio, alla fine della pipeline di creazione dell'immagine potresti includere un controllo aggiuntivo per le immagini che devono essere deprecate o eliminate, quindi puoi eseguire esplicitamente queste azioni.

Anche se le immagini obsolete ed eliminate non vengono più mostrate per impostazione predefinita tramite l'API e l'interfaccia utente, puoi comunque visualizzarle fornendo il flag --show-deprecated. Per eliminare completamente l'immagine e i relativi dati, devi inviare un comando esplicito per tale immagine.

Condivisione di immagini tra progetti

Le organizzazioni spesso creano più progetti Google Cloud per partizionare le risorse, gli ambienti e l'accesso degli utenti. Isolare le risorse nei progetti consente fatturazione, applicazione di sicurezza e networking segregati granulari. Anche se la maggior parte delle risorse cloud non ha bisogno di includere più progetti, le immagini sono ideali per la condivisione tra progetti. Utilizzando un set condiviso di immagini, puoi seguire una procedura comune per fornire le immagini con le best practice per la sicurezza, l'autorizzazione, la gestione dei pacchetti e le operazioni preconfigurate per il resto dell'organizzazione.

Condivisione di immagini.

Condividi le immagini assegnando ruoli IAM ai progetti di un'organizzazione. Il progetto contenente le immagini che vuoi condividere con altri progetti, indicati nel diagramma precedente come "Progetto di creazione di immagini", deve avere i seguenti ruoli IAM e criteri applicati.

  1. Consenti agli utenti del "Gruppo utenti immagine" di creare istanze da queste immagini concedendo loro il ruolo compute.imageUser.
  2. Consenti all'utente per la creazione di immagini di creare istanze in questo progetto concedendogli il ruolo compute.instanceAdmin.
  3. Consenti all'utente per la creazione di immagini "di creare immagini e dischi in questo progetto" assegnandogli il ruolo compute.storageAdmin.

I progetti per cui vuoi utilizzare le immagini condivise devono consentire agli utenti con il ruolo compute.imageUser di creare istanze assegnando loro il ruolo compute.instanceAdmin.

Per istruzioni più dettagliate sulla condivisione di immagini tra progetti, consulta la sezione relativa alla condivisione delle immagini tra progetti nella documentazione di Compute Engine.

Passaggi successivi