Best practice per la gestione delle immagini


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

Informazioni sulle immagini

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

Comprendere le immagini.

Un'immagine è un insieme di byte non elaborati utilizzati per creare un hard disk precompilato. Su qualsiasi disco formattato è scritta una tabella delle partizioni che punta a una o più partizioni contenenti dati. Affinché un'immagine sia avviabile, deve contenere quanto segue:

Affinché un disco venga importato come immagine Compute Engine, i byte del disco devono essere scritti in un file denominato disk.raw.

Dopo che la sequenza completa di byte del disco è stata scritta nel file, il file viene archiviato utilizzando il formato tar e poi compresso utilizzando il formato GZIP. Puoi quindi caricare il file*.tar.gz risultante su 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 regione di Google Cloud. Le immagini appena registrate vengono spesso utilizzate come volumi di avvio per le istanze Compute Engine.

Per un'introduzione più di base a questi termini di Compute Engine, consulta Istanze di macchine virtuali e Immagini nella documentazione.

Scegliere un'immagine di avvio

Il primo passaggio per utilizzare Compute Engine è scegliere l'immagine che vuoi come sistema operativo per l'istanza della macchina virtuale (VM). Puoi utilizzare le immagini pubbliche fornite da Google Cloud, che vengono aggiornate regolarmente. Google Cloud offre una serie di sistemi operativi, tra cui Debian, Ubuntu e CentOS, da utilizzare senza costi aggiuntivi. Alcuni sistemi operativi, come Red Hat Enterprise Linux e Microsoft Windows, sono immagini premium, per le quali vengono addebitate tariffe aggiuntive per ogni ora di esecuzione delle istanze.

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

Per una maggiore sicurezza, puoi anche utilizzare la funzionalità Immagini attendibili per definire un criterio dell'organizzazione che impedisca l'utilizzo delle immagini in progetti di immagini pubbliche specifici per la creazione di immagini di avvio.

Immagine di avvio.

Puoi utilizzare le immagini pubbliche di Google Cloud per avviare un'istanza Compute Engine, dopodiché puoi personalizzarla per eseguire la tua applicazione.

Un approccio per configurare l'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 ogni volta che l'istanza si avvia, quindi devi renderlo idempotente per evitare di ritrovarti in uno stato incoerente o parzialmente configurato. Se le istanze fanno parte di un gruppo di istanze gestite, puoi utilizzare Instance Group Updater per riavviare o ricreare le istanze, il che esegue di nuovo lo script di avvio. Una pratica comune è utilizzare lo script di avvio per eseguire uno strumento di gestione della configurazione come Chef o Ansible.

Creazione di immagini personalizzate

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

  • Manuale
  • Automatico
  • Importa

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

La cottura delle immagini presenta i seguenti vantaggi:

  • Tempo più breve dall'avvio all'idoneità dell'applicazione.
  • Maggiore affidabilità per i deployment delle applicazioni.
  • Rollback alle versioni precedenti più semplice.
  • Meno dipendenze da servizi esterni durante il bootstrap dell'applicazione.
  • L'aumento di scala crea istanze contenenti versioni software identiche.

Baking 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 quell'istanza. Utilizza questo metodo se puoi configurare le immagini da zero manualmente anziché utilizzare il baking automatico o l'importazione di immagini esistenti.

Per creare una semplice immagine personalizzata, segui questi passaggi:

  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. Questa procedura richiede di eliminare l'istanza, ma di conservare il disco di avvio.

Baking automatico

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 per rendere la creazione di immagini più riproducibile, verificabile, configurabile e affidabile. Puoi anche utilizzare Packer all'interno di una pipeline Spinnaker per produrre immagini di cui viene eseguito il deployment in cluster di istanze.

Importazione di immagini esistenti

Puoi importare le immagini del disco di avvio dall'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 dettagliata per la migrazione manuale di immagini disco RAW, Amazon Machine Images (AMI) e immagini VirtualBox.

Un'altra opzione per importare le immagini esistenti è utilizzare Migrate to Virtual Machines.

Migrate to Virtual Machines è una catena di strumenti e un servizio che semplifica la migrazione delle macchine da una piattaforma all'altra con tempi di inattività minimi utilizzando la replica continua a livello di blocco. Puoi eseguire la migrazione delle macchine a Compute Engine e poi utilizzare il baking manuale per creare le immagini.

Crittografia delle immagini

Per impostazione predefinita, tutti i dischi in Compute Engine sono criptati utilizzando le chiavi di crittografia di Google. Anche le immagini create dai dischi sono criptate. In alternativa, puoi fornire le tue chiavi di crittografia al momento della creazione dei dischi. Dopo aver creato il disco, puoi creare un'immagine criptata fornendo le tue chiavi di crittografia al comando di creazione dell'immagine. Per ulteriori informazioni sulla crittografia at-rest e sulle chiavi di crittografia fornite dal cliente, consulta Crittografia at-rest 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. Sebbene la pipeline possa gestire la creazione di immagini, devi anche assicurarti che i meccanismi di implementazione utilizzino le versioni più recenti delle immagini. Infine, devi avere un processo per selezionare le immagini, in modo che quelle vecchie e obsolete non vengano utilizzate inavvertitamente.

Famiglie di immagini

Le famiglie di immagini ti aiutano a gestire le immagini del tuo progetto raggruppando quelle correlate, in modo da poter eseguire il roll forward e rollback tra versioni specifiche delle immagini. Per saperne 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 fa riferimento la famiglia di immagini ritirando l'immagine utilizzando il seguente comando:

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

Puoi scegliere tra vari stati di ritiro:

Stato Descrizione
OBSOLETE Immagini che non sono più le più recenti, ma che possono comunque essere lanciate dagli utenti. Al momento del lancio, gli utenti vedranno un avviso che li informa che non stanno più utilizzando 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 montate come disco non di avvio.
ELIMINATO Immagini che sono già state eliminate o che sono contrassegnate per l'eliminazione in futuro. Non possono essere avviati e devi eliminarli il prima possibile.

Applicazione dei criteri di 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 come obsolete in futuro, fornisci i flag --obsolete-in o --obsolete-on. Puoi incorporare questo comando in un processo di compilazione delle immagini per applicare un criterio del ciclo di vita delle immagini che limiti la proliferazione di immagini obsolete ed scadute nel progetto. Ad esempio, alla fine della pipeline di creazione delle immagini, puoi includere un controllo aggiuntivo per le immagini che devono essere ritirate o eliminate ed eseguire queste azioni esplicitamente.

Anche se per impostazione predefinita le immagini ritirate ed eliminate non vengono più visualizzate tramite l'API e l'interfaccia utente, puoi comunque visualizzarle specificando il flag --show-deprecated. Per eliminare completamente l'immagine e i relativi dati, devi inviare un comando di eliminazione esplicito per l'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. L'isolamento delle risorse in progetti consente la fatturazione granulare, l'applicazione della sicurezza e la rete segregata. Sebbene la maggior parte delle risorse cloud non debba essere distribuita su più progetti, le immagini sono ottime candidate per la condivisione tra progetti. Utilizzando un insieme condiviso di immagini, puoi seguire una procedura comune per fornire immagini con best practice per sicurezza, autorizzazione, gestione dei pacchetti e operazioni preconfigurate per il resto dell'organizzazione.

Condivisione di immagini.

Puoi condividere le immagini assegnando ruoli IAM ai progetti di un'organizzazione. Al progetto che contiene le immagini che vuoi condividere con altri progetti, indicato nel diagramma precedente come "Progetto di creazione di immagini", devono essere applicati i seguenti ruoli e criteri IAM:

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

I progetti che vuoi che possano 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 Condividere immagini tra progetti nella documentazione di Compute Engine.

Passaggi successivi