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

Last reviewed 2024-12-08 UTC

Questo documento può aiutarti a pianificare e progettare la fase di deployment della tua migrazione a Google Cloud. Dopo aver valutato l'ambiente attuale, pianificato la migrazione a Google Cloud, e creato la Google Cloud base, puoi eseguire il deployment dei 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 viaggio di migrazione.

Percorso di migrazione con quattro fasi.

La fase di deployment è la terza fase della migrazione a Google Cloud in cui progetti una procedura 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 esplorare come potrebbe essere.

In questo documento, esamini i diversi tipi di procedure di deployment, in ordine di flessibilità, automazione e complessità, insieme ai criteri su come scegliere un 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 il deployment automaticamente.

Prima di eseguire il deployment dei carichi di lavoro, pianifica e progetta la fase di deployment. Innanzitutto, devi valutare i diversi tipi di procedure di deployment che implementi per i tuoi carichi di lavoro. Quando valuti i tipi di procedure di deployment, puoi decidere di iniziare con una procedura mirata e passare a una più complessa in futuro. Questo approccio può portare a risultati più rapidi, ma può anche introdurre attriti quando passi a una procedura più avanzata, perché devi assorbire il debito tecnico accumulato durante l'utilizzo della procedura mirata. Ad esempio, se passi da deployment completamente manuali a una soluzione automatizzata, potresti dover gestire gli upgrade della pipeline di deployment e delle app.

Sebbene sia possibile implementare diversi tipi di procedure di deployment in base alle esigenze dei carichi di lavoro, questo approccio può anche aumentare la complessità di questa fase. Se implementi diversi tipi di procedure di deployment, puoi usufruire della maggiore flessibilità, ma potresti aver bisogno di competenze, strumenti e risorse personalizzati per ogni procedura, il che si traduce in un maggiore impegno da parte tua.

Esegui il deployment manualmente

Un deployment completamente manuale è supportato da una procedura di provisioning, configurazione e deployment completamente non automatizzata. Sebbene possano esistere specifiche e checklist per ogni passaggio della procedura, non esiste alcun controllo o applicazione automatica di queste specifiche. Una procedura manuale è soggetta a errori umani, non è ripetibile e il suo rendimento è limitato dal fattore umano.

Le procedure di deployment completamente manuali possono essere utili, ad esempio, quando devi instrumentare rapidamente un esperimento in un ambiente sandbox. La configurazione di una procedura strutturata e automatizzata per un esperimento che dura pochi minuti può rallentare inutilmente il ritmo, soprattutto nelle fasi iniziali della migrazione, quando potresti non avere le competenze necessarie negli strumenti e nelle pratiche che ti consentono di creare una procedura automatizzata.

Sebbene questa limitazione non si applichi a Google Cloud, i deployment completamente manuali potrebbero essere l'unica opzione quando si tratta di ambienti bare metal che non dispongono delle API di gestione necessarie. In questo caso, non puoi implementare una procedura automatizzata a causa della mancanza delle interfacce necessarie. Se disponi di un'infrastruttura virtualizzata legacy che non supporta l'automazione, potresti essere costretto a implementare una procedura completamente manuale.

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

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

Esegui il deployment con gli strumenti di gestione della configurazione

Gli strumenti di gestione della configurazione consentono di configurare un ambiente in modo ripetibile e controllato. Questi strumenti includono un insieme di plug-in e moduli che implementano già le operazioni di configurazione comuni. Questi strumenti ti consentono di concentrarti sullo stato finale che vuoi raggiungere per il tuo ambiente, anziché implementare la logica per raggiungere questo stato finale. Se l'insieme di operazioni incluse non è sufficiente, gli strumenti di gestione della configurazione spesso includono 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 un carico di sviluppo e manutenzione aggiuntivo.

Utilizza gli strumenti di gestione della configurazione quando devi configurare gli ambienti. Puoi anche utilizzarli per eseguire il provisioning dell'infrastruttura e per implementare una procedura di deployment per i tuoi carichi di lavoro. Gli strumenti di gestione della configurazione sono una procedura migliore rispetto a una procedura di provisioning, configurazione e deployment completamente manuale perché è ripetibile, controllata e verificabile. Tuttavia, ci sono diversi svantaggi, perché gli strumenti di gestione della configurazione non sono progettati per le attività di provisioning o deployment. In genere non dispongono di funzionalità integrate per implementare una logica di provisioning elaborata, ad esempio il rilevamento e la gestione delle differenze tra lo stato reale dell'infrastruttura e lo stato desiderato o procedure di deployment avanzate, come i deployment senza tempi di inattività o i deployment blu/verde. Puoi implementare le funzionalità mancanti utilizzando i punti di estensione menzionati in precedenza. Queste estensioni possono comportare un impegno aggiuntivo e aumentare la complessità complessiva della procedura di deployment, perché hai bisogno delle competenze necessarie per progettare, sviluppare e gestire una soluzione di deployment personalizzata.

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

Una procedura di deployment di base che utilizza gli strumenti di gestione della configurazione può preparare gli ambienti di runtime ed eseguire il deployment dei carichi di lavoro in questi ambienti. Ad esempio, la procedura potrebbe creare un'istanza Compute Engine, installare il software richiesto ed eseguire il deployment dei carichi di lavoro. La configurazione di un ambiente di runtime che supporti i carichi di lavoro richiede tempo. Per ridurre la quantità di tempo necessaria per configurare un ambiente di runtime, puoi implementare una procedura che esegue gli strumenti di gestione della configurazione per produrre un modello, ad esempio un'immagine del sistema operativo. Puoi utilizzare questo modello per creare istanze dell'ambiente di runtime pronte per i carichi di lavoro. Ad esempio, puoi utilizzare Cloud Build per creare immagini di Compute Engine. Queste immagini vengono spesso chiamate immagini golden o immagini silver, entrambe modelli immutabili, come le immagini del sistema operativo, che crei per gli ambienti di runtime. La differenza tra le due dipende dalla quantità di lavoro che una procedura di deployment deve completare prima che le immagini possano eseguire un carico di lavoro:

  • Immagine golden: un modello che crei per gli ambienti di runtime o che prepari da un modello di base. Le immagini golden includono tutti i dati e le informazioni di configurazione di cui gli ambienti di runtime hanno bisogno per svolgere le attività assegnate. Puoi preparare diversi tipi di immagini golden per svolgere attività diverse. I sinonimi per i tipi di immagini golden includono flavor, spin e archetipo.
  • Immagine silver: un modello che crei per gli ambienti di runtime applicando modifiche minime a un'immagine golden o a un modello di base. Gli ambienti di runtime che eseguono un'immagine silver completano il provisioning e la configurazione al primo avvio, in base alle esigenze dei casi d'uso che questi ambienti di runtime devono supportare.

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 eseguire il deployment dei carichi di lavoro.

Uno strumento di orchestrazione dei container si occupa della gestione dell'infrastruttura sottostante all'ambiente e supporta un'ampia gamma di operazioni di deployment e blocchi predefiniti per implementare la logica di deployment che puoi utilizzare quando quelli integrati 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 le procedure di deployment a diversi ambienti sottostanti, in modo da non dover progettare e implementare più procedure per ciascuno dei tuoi ambienti. Ad esempio, questi strumenti in genere includono la logica per scalare ed eseguire l'upgrade dei deployment, quindi non devi implementarli autonomamente. Puoi persino iniziare a sfruttare questi strumenti per implementare le procedure di deployment nell'ambiente attuale e poi portarli nell'ambiente di destinazione, perché l'implementazione è in gran parte la stessa, per progettazione. Adottando questi strumenti in anticipo, acquisisci esperienza nell'amministrazione degli ambienti containerizzati, utile per la migrazione a Google Cloud.

Utilizza uno strumento di orchestrazione dei container se i carichi di lavoro sono già containerizzati o se puoi containerizzarli in futuro e prevedi di investire in questo impegno. In quest'ultimo caso, devi eseguire un'analisi approfondita di ogni carico di lavoro per determinare quanto segue:

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

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

Ad esempio, le soluzioni di data warehouse in genere non vengono sottoposte a deployment utilizzando strumenti di orchestrazione dei container, perché non sono progettate per essere eseguite in container temporanei.

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

Esegui il deployment automaticamente

Indipendentemente dagli strumenti di provisioning, configurazione, deployment e orchestrazione che utilizzi nel tuo ambiente, puoi implementare procedure di deployment completamente automatizzate per ridurre al minimo gli errori umani e per consolidare, semplificare e standardizzare le procedure all'interno della tua organizzazione. Se necessario, puoi anche inserire passaggi di approvazione manuale nella procedura 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 eventuali approvazioni manuali.

Puoi automatizzare ogni passaggio indipendentemente dagli altri, in modo da poter eseguire gradualmente la migrazione delle procedure di deployment attuali verso una soluzione automatizzata oppure puoi implementare una nuova procedura direttamente nell'ambiente di destinazione. Affinché questa procedura sia efficace, devi disporre di procedure di test e convalida in ogni passaggio della pipeline, non solo durante il passaggio di revisione del codice o il passaggio di CI.

Per ogni modifica al codebase, devi eseguire una revisione approfondita per valutare la qualità della modifica. La maggior parte degli strumenti di gestione del codice sorgente supporta la revisione del codice di primo livello. Spesso supportano anche la creazione e l'inizializzazione automatiche delle revisioni esaminando l'area del codice sorgente modificata, a condizione che tu abbia configurato i team responsabili di ogni area del codebase. In ogni revisione puoi anche eseguire controlli automatici sul codice sorgente, come linter e analizzatori statici per applicare standard di coerenza e qualità nel codebase.

Dopo aver esaminato e integrato una modifica nel codebase, lo strumento di CI può eseguire automaticamente i test, valutare i risultati e quindi inviarti una notifica in caso di problemi con la build corrente. Puoi aggiungere valore a questo passaggio seguendo una procedura di sviluppo basata sui test per una copertura completa dei test delle funzionalità di ogni carico di lavoro.

Per ogni build riuscita, puoi automatizzare la creazione di artefatti di deployment. Questi artefatti rappresentano una versione dei carichi di lavoro pronta per il deployment, con le ultime modifiche. Nell'ambito del passaggio di creazione degli artefatti, puoi anche eseguire una convalida automatica dell'artefatto stesso. Ad esempio, esegui una scansione delle vulnerabilità rispetto ai problemi noti e approvi l'artefatto per il deployment solo se non vengono rilevate vulnerabilità. Ad esempio, puoi utilizzare Artifact Registry per eseguire la scansione degli artefatti alla ricerca di vulnerabilità note.

Infine, puoi automatizzare il deployment di ogni artefatto approvato nell'ambiente di destinazione. Se hai più ambienti di runtime, puoi anche implementare una logica di deployment univoca per ciascuno, aggiungendo anche passaggi di approvazione manuale, se necessario. Ad esempio, puoi eseguire automaticamente il deployment di nuove versioni dei carichi di lavoro negli ambienti di sviluppo, garanzia di qualità e pre-produzione, pur richiedendo una revisione e un'approvazione manuali da parte del team di controllo della produzione per il deployment nell'ambiente di produzione.

Sebbene una procedura end-to-end completamente automatizzata sia una delle opzioni migliori se hai bisogno di una procedura automatizzata, strutturata, semplificata e verificabile, l'implementazione di questa procedura non è un'attività banale. Prima di scegliere questo tipo di procedura, devi avere una visione chiara dei vantaggi previsti, dei costi coinvolti e se il livello attuale di conoscenza ed esperienza del team è sufficiente per implementare una procedura di deployment completamente automatizzata.

Puoi implementare procedure di deployment completamente automatizzate con Cloud Deploy.

Passaggi successivi

Collaboratori

Autore: Marco Ferrari | Cloud Solutions Architect