Esegui la migrazione a Google Cloud: esegui il deployment dei carichi di lavoro

Last reviewed 2023-12-08 UTC

Questo documento può aiutarti a pianificare e progettare la fase di deployment della migrazione a Google Cloud. Dopo aver valutato l'ambiente attuale, pianificato la migrazione a Google Cloud e creato gli elementi di base di Google Cloud, puoi eseguire il deployment dei tuoi carichi di lavoro.

Questo documento fa parte della seguente serie in più parti sulla migrazione a Google Cloud:

Il seguente diagramma illustra il percorso del tuo percorso di migrazione.

Percorso di migrazione con quattro fasi.

La fase di deployment è la terza fase della migrazione a Google Cloud, in cui progetti un processo di deployment per i tuoi carichi di lavoro.

Questo documento è utile se stai pianificando una migrazione da un ambiente on-premise, da un ambiente di hosting privato, da un altro cloud provider a Google Cloud o se stai valutando l'opportunità di eseguire la migrazione e vuoi esplorarne l'aspetto.

In questo documento esamineremo i diversi tipi di processi di deployment, in ordine di flessibilità, automazione e complessità, insieme ai criteri su come scegliere l'approccio adatto a te:

  1. Esegui il deployment manualmente.
  2. Esegui il deployment con gli strumenti di gestione della configurazione (CM).
  3. Esegui il deployment utilizzando gli strumenti di orchestrazione dei container.
  4. Esegui automaticamente il deployment.

Prima di eseguire il deployment dei carichi di lavoro, pianifica e progetta la fase di deployment. Innanzitutto, devi valutare i diversi tipi di processi di deployment implementati per i tuoi carichi di lavoro. Quando valuti i tipi di processi di deployment, puoi decidere di iniziare con un processo semplice per passare a uno più complesso in futuro. Questo approccio può portare a risultati più rapidi, ma può anche introdurre difficoltà quando si passa a un processo più avanzato, perché è necessario assorbire il debito tecnico accumulato utilizzando la procedura più semplice. Ad esempio, se passi da deployment completamente manuali a una soluzione automatizzata, potresti dover gestire gli upgrade alla pipeline di deployment e alle app.

Sebbene sia possibile implementare diversi tipi di processi di deployment in base alle esigenze dei tuoi carichi di lavoro, questo approccio può anche aumentare la complessità di questa fase. Se implementi diversi tipi di processi di deployment, puoi trarre vantaggio dalla maggiore flessibilità, ma potresti aver bisogno di competenze, strumenti e risorse su misura per ciascun processo, il che si traduce in uno sforzo maggiore da parte tua.

Esegui il deployment manualmente

Un deployment completamente manuale è supportato da un processo di provisioning, configurazione e deployment completamente non automatizzato. Anche se potrebbero esistere specifiche ed elenchi di controllo per ogni passaggio del processo, non sono previsti controlli automatici o applicazioni di tali specifiche. Un processo manuale è soggetto a errore umano, non ripetibile e le sue prestazioni sono limitate dal fattore umano.

I processi di deployment completamente manuali possono essere utili, ad esempio, quando è necessario strumentare rapidamente un esperimento in un ambiente sandbox. Configurare un processo strutturato e automatizzato per un esperimento che dura minuti può inutilmente rallentare il ritmo, soprattutto nelle prime fasi della migrazione, quando potresti non disporre della competenza necessaria negli strumenti e nelle pratiche che ti consentono di creare un processo automatizzato.

Anche se questa limitazione non si applica a Google Cloud, i deployment completamente manuali potrebbero essere la tua unica opzione quando hai a che fare con ambienti bare metal che non dispongono delle API di gestione necessarie. In questo caso, non è possibile implementare un processo automatizzato a causa della mancanza delle interfacce necessarie. Se hai un'infrastruttura virtualizzata legacy che non supporta l'automazione, potresti essere costretto a implementare un processo completamente manuale

Ti consigliamo di evitare un deployment completamente manuale, a meno che tu non abbia altre opzioni.

Puoi implementare un processo completamente manuale di provisioning, configurazione e deployment utilizzando strumenti come la console Google Cloud, Cloud Shell, le API Cloud e Google Cloud CLI.

Esegui il deployment con gli strumenti di gestione delle configurazioni

Gli strumenti CM ti consentono di configurare un ambiente in modo ripetibile e controllato. Questi strumenti includono un insieme di plug-in e moduli che implementano già operazioni di configurazione comuni. Questi strumenti ti consentono di concentrarti sullo stato finale che vuoi ottenere per il tuo ambiente, anziché implementare la logica per raggiungerlo. Se il set di operazioni incluso non è sufficiente, gli strumenti CM spesso presentano un sistema di estensioni che puoi utilizzare per sviluppare i tuoi moduli. Sebbene queste estensioni siano possibili, prova a utilizzare i moduli e i plug-in predefiniti ove applicabile per evitare ulteriori carichi di lavoro per lo sviluppo e la manutenzione.

Gli strumenti CM vengono utilizzati quando devi configurare gli ambienti. Puoi anche utilizzarle per eseguire il provisioning dell'infrastruttura e implementare un processo di deployment per i carichi di lavoro. Gli strumenti CM offrono un processo migliore rispetto a un processo di provisioning, configurazione e deployment completamente manuale perché sono ripetibili, controllati e verificabili. Tuttavia, ci sono diversi svantaggi perché gli strumenti CM non sono progettati per il provisioning o il deployment. Di solito mancano funzionalità integrate per implementare una logica di provisioning elaborata, come il rilevamento e la gestione delle differenze tra lo stato reale dell'infrastruttura e lo stato desiderato, o processi di deployment avanzati, come deployment senza tempi di inattività o deployment blu/verde. Puoi implementare le funzionalità mancanti utilizzando i punti di estensione menzionati in precedenza. Queste estensioni possono comportare uno sforzo maggiore e aumentare la complessità generale del processo di deployment, perché è necessaria l'esperienza necessaria per progettare, sviluppare e gestire una soluzione di deployment personalizzata.

Puoi implementare questo tipo di processo di provisioning, configurazione e deployment utilizzando strumenti come Ansible, Chef, Puppet e SaltStack.

Esegui il deployment utilizzando gli strumenti di orchestrazione dei container

Se hai già investito o prevedi di investire nella containerizzazione dei carichi di lavoro, puoi utilizzare uno strumento di orchestrazione dei container per eseguirne il deployment.

Uno strumento di orchestrazione dei container si occupa della gestione dell'infrastruttura alla base dell'ambiente e supporta un'ampia gamma di operazioni di deployment e componenti di base per implementare la logica di deployment, che puoi utilizzare quando quelle integrate non sono sufficienti. Utilizzando questi strumenti, puoi concentrarti sulla composizione della logica di deployment effettiva utilizzando i meccanismi forniti, anziché doverli implementare.

Gli strumenti di orchestrazione dei container forniscono anche astrazioni che puoi utilizzare per generalizzare i processi di deployment in diversi ambienti sottostanti, senza dover progettare e implementare più processi per ciascuno dei tuoi ambienti. Ad esempio, questi strumenti di solito includono la logica per la scalabilità e l'upgrade dei deployment, così non devi implementarli autonomamente. Puoi anche iniziare a sfruttare questi strumenti per implementare i processi di deployment nell'ambiente attuale, per poi trasferirli nell'ambiente di destinazione perché l'implementazione è sostanzialmente la stessa, per definizione. Adottando questi strumenti in anticipo, puoi acquisire esperienza nell'amministrazione degli ambienti containerizzati e questa esperienza è utile per la migrazione a Google Cloud.

Puoi utilizzare uno strumento di orchestrazione dei container se i tuoi carichi di lavoro sono già containerizzati o se puoi containerizzarli in futuro e prevedi di investire in questo sforzo. Nel secondo caso, devi eseguire un'analisi approfondita di ciascun carico di lavoro per determinare quanto segue:

  • Assicurati che sia possibile la containerizzazione del carico di lavoro.
  • Valuta i potenziali vantaggi che potresti ottenere containerizzando il carico di lavoro.

Se le insidie potenziali superano i vantaggi della containerizzazione, utilizza uno strumento di orchestrazione dei container solo se i tuoi team sono già impegnati a utilizzarli e se non desideri gestire ambienti eterogenei.

Ad esempio, il deployment delle soluzioni di data warehouse non viene generalmente eseguito utilizzando strumenti di orchestrazione dei container, poiché non sono progettate per l'esecuzione in container temporanei.

Puoi implementare questo processo di deployment utilizzando Google Kubernetes Engine (GKE) su Google Cloud. Se ti interessa un ambiente serverless, puoi utilizzare strumenti come Cloud Run.

Esegui automaticamente il deployment

Indipendentemente dagli strumenti di provisioning, configurazione, deployment e orchestrazione che utilizzi nel tuo ambiente, puoi implementare processi di deployment completamente automatizzati per ridurre al minimo gli errori umani e consolidare, semplificare e standardizzare i processi in tutta l'organizzazione. Se necessario, puoi anche inserire passaggi di approvazione manuale nel processo di deployment, ma ogni passaggio è automatizzato.

I passaggi di una tipica pipeline di deployment end-to-end sono i seguenti:

  1. Revisione del codice.
  2. Integrazione continua (CI).
  3. Produzione di artefatti.
  4. Deployment continuo (CD), con approvazioni manuali finali.

Puoi automatizzare ciascuno di questi passaggi in modo indipendente dagli altri, in modo da poter migrare gradualmente i processi di deployment attuali verso una soluzione automatizzata oppure implementare un nuovo processo direttamente nell'ambiente di destinazione. Affinché questo processo sia efficace, devi disporre di procedure di test e convalida in ogni passaggio della pipeline, non solo durante la fase di revisione del codice o di CI.

Per ogni modifica nel codebase, devi eseguire un controllo approfondito per valutare la qualità della modifica. Quasi tutti gli strumenti di gestione del codice sorgente offrono un supporto di primo livello per le revisioni del codice. Spesso supportano anche la creazione e l'inizializzazione automatiche delle recensioni esaminando l'area del codice sorgente che è stata modificata, a condizione che siano stati configurati i team responsabili di ciascuna area del codebase. In ogni revisione puoi anche eseguire controlli automatici sul codice sorgente, ad esempio linter e analisti statici, per applicare standard di qualità e coerenza in tutto il codebase.

Dopo aver esaminato e integrato una modifica nel codebase, lo strumento CI può eseguire automaticamente test, valutare i risultati e quindi informarti di eventuali problemi con la build corrente. Puoi aggiungere valore a questo passaggio seguendo un processo di sviluppo basato su test per una copertura di test completa delle funzionalità di ogni carico di lavoro.

Per ogni build riuscita, puoi automatizzare la creazione degli artefatti di deployment. Questi artefatti rappresentano una versione pronta per il deployment dei carichi di lavoro, con le modifiche più recenti. Nell'ambito della fase di creazione dell'artefatto, puoi anche eseguire una convalida automatica dell'artefatto stesso. Ad esempio, esegui un'analisi delle vulnerabilità in base a problemi noti e approvi l'artefatto per il deployment solo se non vengono trovate vulnerabilità.

Infine, puoi automatizzare il deployment di ogni artefatto approvato nell'ambiente di destinazione. Se disponi di più ambienti di runtime, puoi anche implementare una logica di deployment univoca per ciascuno di essi, aggiungendo anche passaggi di approvazione manuale, se necessario. Ad esempio, puoi eseguire automaticamente il deployment di nuove versioni dei tuoi carichi di lavoro nei tuoi ambienti di sviluppo, controllo qualità e pre-produzione e al contempo richiedere al team di controllo di produzione una revisione e un'approvazione manuali per il deployment nell'ambiente di produzione.

Sebbene un processo end-to-end completamente automatizzato sia una delle opzioni migliori se hai bisogno di un processo automatizzato, strutturato, semplificato e verificabile, l'implementazione di questo processo non è un'attività banale. Prima di scegliere questo tipo di processo, dovresti avere una visione chiara dei vantaggi previsti, dei costi necessari e se il tuo attuale livello di conoscenza e competenza del tuo team è sufficiente per implementare un processo di deployment completamente automatizzato.

Puoi implementare processi di deployment completamente automatizzati con Cloud Deploy.

Passaggi successivi