Best practice per la gestione delle immagini

Questa soluzione fornisce indicazioni approfondite su come gestire le immagini Compute Engine. Le immagini forniscono l'ambiente operativo di base per le applicazioni eseguite in Compute Engine e sono essenziali per garantire il deployment e la scalabilità dell'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.

Informazioni sulle immagini

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

Comprendere le immagini.

Un'immagine è un bundle dei 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. Affinché un'immagine sia avviabile, deve contenere quanto segue:

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

Dopo che la sequenza completa di byte dal disco è stata scritta nel file, il file viene archiviato utilizzando il formato tar e quindi compresso con il formato GZIP. Quindi, puoi caricare il file risultante *.tar.gz 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 le istanze di macchine virtuali e le immagini nella documentazione.

Scelta di un'immagine di avvio

Il primo passaggio nell'utilizzo di Compute Engine è la scelta dell'immagine che vuoi impostare 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 varietà di sistemi operativi, tra cui Debian, Ubuntu e CentOS, senza alcun costo aggiuntivo per il tuo utilizzo. Alcuni sistemi operativi, come Red Hat Enterprise Linux e Microsoft Windows, sono immagini premium che comportano costi aggiuntivi per ogni ora di esecuzione delle istanze.

Per ulteriori informazioni su una determinata immagine, come criteri di aggiornamento automatico, patch di sicurezza e canali di assistenza, consulta la sezione sui dettagli del sistema operativo nella 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 durante l'avvio. Tieni presente che questo script viene eseguito ogni volta che viene avviata l'istanza, quindi devi renderlo idempotente per evitare di finire in uno stato incoerente o parzialmente configurato. Se le istanze fanno parte di un gruppo di istanze gestite, puoi utilizzare l'aggiornamento dei gruppi di istanze per riavviare o ricreare le istanze, eseguendo 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

Anche se la configurazione dello script di avvio di un'istanza è 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 creazione di immagini con le immagini ha i seguenti vantaggi:

  • Tempo più breve dall'avvio all'idoneità dell'applicazione.
  • Affidabilità migliorata per i deployment delle applicazioni.
  • Rollback alle versioni precedenti più semplice.
  • 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 creando un'immagine personalizzata da quell'istanza. Utilizza questo metodo se puoi configurare le immagini da zero anziché utilizzare la cottura automatica o l'importazione di immagini esistenti.

Puoi creare una semplice immagine personalizzata seguendo 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. Questo processo richiede l'eliminazione dell'istanza ma il 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 per rendere la riproduzione delle immagini più riproducibile, verificabile, configurabile e affidabile. Per ulteriori informazioni su come creare una pipeline di creazione automatica delle immagini, consulta la pagina Creazione automatica di immagini con Jenkins, Packer e Kubernetes. Puoi anche utilizzare Packer come parte di una pipeline di Spinnaker per produrre immagini di cui viene eseguito il deployment in cluster di istanze.

Importazione di immagini esistenti

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

Un'altra opzione per importare immagini esistenti consiste nell'utilizzare Google Cloud Migrate for Compute Engine.

Migrate for Compute Engine è una catena di strumenti e un servizio 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, quindi utilizzare la cottura manuale per creare immagini.

Crittografia delle immagini

Tutti i dischi in Compute Engine sono 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 per la creazione dell'immagine. Per ulteriori informazioni sulla crittografia dei dati inattivi e sulle chiavi di crittografia fornite dal cliente, consulta Crittografia dei dati inattivi nella documentazione di Google Cloud.

Ciclo di vita delle immagini

Dopo aver configurato una pipeline di build delle immagini, puoi utilizzare le immagini per avviare in modo affidabile le istanze di un'applicazione. Sebbene la pipeline sia in grado di gestire la creazione di immagini, devi anche assicurarti che i meccanismi di deployment utilizzino le versioni più recenti delle immagini. Infine, è necessario un processo per curare le immagini, in modo che le immagini vecchie e obsolete non vengano utilizzate inavvertitamente.

Famiglie di immagini

Le famiglie di immagini ti aiutano a gestire le immagini nel progetto raggruppando le immagini correlate, in modo da poter eseguire il rollback e il rollback tra versioni specifiche dell'immagine. 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 fa riferimento la famiglia di immagini ritirandola utilizzando il seguente comando:

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

Puoi scegliere tra diversi stati di ritiro:

Stato Descrizione
OBSOLETO Immagini che non sono più recenti, ma che possono ancora essere lanciate dagli utenti. Al momento del lancio, gli utenti vedranno un avviso che li informa che non utilizzano più l'immagine più recente.
OBSOLETO Immagini che non devono essere avviate dagli utenti o dall'automazione. Un 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 loro 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. Non è possibile avviare queste operazioni ed è necessario 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 contrassegnarli 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 compilazione di immagini per applicare un criterio del ciclo di vita delle immagini che limita la proliferazione di immagini scadute e scadute nel tuo progetto. Ad esempio, alla fine della pipeline di creazione delle immagini, potresti includere un controllo aggiuntivo relativo alle immagini che devono essere deprecate o eliminate, quindi eseguire tali azioni in modo esplicito.

Sebbene le immagini deprecate ed eliminate non vengano più mostrate tramite l'API e l'UI per impostazione predefinita, puoi comunque visualizzarle fornendo il flag --show-deprecated. Per eliminare completamente l'immagine e i relativi dati, devi inviare un comando 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 di risorse nei progetti consente una fatturazione granulare, un'applicazione forzata della sicurezza e una rete separata. Sebbene la maggior parte delle risorse cloud non debba necessariamente includere più progetti, le immagini sono idonee per essere condivise tra i progetti. Utilizzando un set condiviso di immagini, puoi seguire una procedura comune per fornire immagini con 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. Al progetto che contiene le immagini che vuoi condividere con altri progetti, indicati nel diagramma precedente come "Progetto di creazione di immagini", devono essere applicati i seguenti ruoli e criteri IAM:

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

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

Per istruzioni più dettagliate sulla condivisione di immagini tra progetti, vedi Condivisione di immagini tra progetti nella documentazione di Compute Engine.

Passaggi successivi