Migrazione dei container a Google Cloud: migrazione di Kubernetes a GKE

Questo documento è utile per pianificare, progettare e implementare la migrazione da un ambiente Kubernetes autogestito a Google Kubernetes Engine (GKE). Se non viene eseguita correttamente, lo spostamento di app da un ambiente all'altro può essere un'attività difficile, per cui devi pianificare ed eseguire con attenzione la migrazione.

Questo documento fa parte di una serie in più parti sulla migrazione a Google Cloud. Se ti interessa una panoramica della serie, vedi Migrazione a Google Cloud: Scegliere il percorso di migrazione.

Questo documento fa parte di una serie in cui viene illustrata la migrazione dei container a Google Cloud:

Questo documento è utile se stai pianificando di eseguire la migrazione da un ambiente Kubernetes autogestito a GKE. Il tuo ambiente potrebbe essere in esecuzione in un ambiente on-premise, in un ambiente di hosting privato o in un altro provider cloud. Questo documento è utile anche per valutare l'opportunità di eseguire la migrazione e per capire come potrebbe essere.

Utilizzando GKE, ottieni i seguenti vantaggi:

Questo documento presuppone che tu abbia letto e che hai familiarità con le seguenti attività:

Il seguente diagramma illustra il percorso del percorso di migrazione.

Percorso di migrazione in quattro fasi.

Durante ogni passaggio della migrazione, segui le fasi definite in Migrazione a Google Cloud: guida introduttiva:

  1. Valutare e scoprire i tuoi carichi di lavoro.
  2. Pianificazione e costruzione di una base.
  3. Deployment dei carichi di lavoro.
  4. Ottimizzare l'ambiente.

Valutazione dell'ambiente

Nella fase di valutazione, determini i requisiti e le dipendenze per la migrazione del tuo ambiente Kubernetes autogestito a GKE:

  1. Crea un inventario completo delle tue app.
  2. Classifica le app in base alle loro proprietà e alle loro dipendenze.
  3. Forma e forma i tuoi team su Google Cloud.
  4. Crea un esperimento e una proof of concept su Google Cloud.
  5. Calcola il costo totale di proprietà (TCO) dell'ambiente di destinazione.
  6. Scegli prima i carichi di lavoro di cui vuoi eseguire la migrazione.

Le sezioni seguenti si basano su Migrazione a Google Cloud: valutazione e scoperta dei carichi di lavoro.

Crea i tuoi inventari

Per definire l'ambito della migrazione, devi comprendere il tuo ambiente Kubernetes attuale. Raccoglierai prima le informazioni sui tuoi cluster, quindi ti concentrerai sui carichi di lavoro di cui hai eseguito il deployment in tali cluster e sulle dipendenze dei carichi di lavoro. Al termine della fase di valutazione, avrai due inventari: uno per i cluster e uno per i carichi di lavoro di cui è stato eseguito il deployment.

Per creare l'inventario dei tuoi cluster, considera quanto segue per ogni cluster:

  • Numero e tipo di nodi. Quando conosci il numero di nodi e delle caratteristiche di ciascun nodo presente nel tuo ambiente attuale, dimensioni i tuoi cluster quando passi a GKE. I nodi nel nuovo ambiente potrebbero essere eseguiti in una generazione di architettura hardware diversa da quella che utilizzi nel tuo ambiente. Le prestazioni di ogni generazione di architettura sono diverse, quindi il numero di nodi necessari nel nuovo ambiente potrebbe essere diverso da quello dell'ambiente. Valuta qualsiasi tipo di hardware che stai utilizzando nei nodi, ad esempio dispositivi di archiviazione ad alte prestazioni, GPU e TPU.
  • Cluster interno o esterno. Valuta a quali attori, interni o esterni al tuo ambiente, è esposto ogni cluster. Per supportare i tuoi casi d'uso, questa valutazione include i carichi di lavoro in esecuzione nel cluster e le interfacce che interagiscono con i cluster.
  • Multi-tenancy Se gestisci cluster multi-tenant nel tuo ambiente, valuta se funziona nel tuo nuovo ambiente Google Cloud. Ora è un buon momento per valutare come migliorare i tuoi cluster multi-tenant perché la tua strategia multi-tenancy influenza il modo in cui crei le tue basi su Google Cloud.
  • Versione di Kubernetes. Raccogli informazioni sulla versione di Kubernetes dei tuoi cluster per valutare se esiste una mancata corrispondenza tra queste versioni e quelle disponibili in GKE. Se esegui una versione precedente o una versione rilasciata di recente, è possibile che tu stia utilizzando funzionalità non disponibili in GKE. Le funzionalità potrebbero essere deprecate o la versione di Kubernetes che le fornisce non è ancora disponibile in GKE.
  • Ciclo di upgrade di Kubernetes. Per mantenere un ambiente affidabile, scopri come gestisci gli upgrade di Kubernetes e in che modo il ciclo di upgrade è correlato agli upgrade di GKE.
  • Pool di nodi. Se utilizzi un tipo di raggruppamento di nodi, potresti valutare in che modo questi raggruppamenti vengono mappati al concetto di pool di nodi in GKE, poiché i tuoi criteri di raggruppamento potrebbero non essere adatti per GKE.
  • Inizializzazione del nodo. Valuta come inizializzare ciascun nodo prima di contrassegnarlo come disponibile per l'esecuzione dei tuoi carichi di lavoro, in modo da trasferire le procedure di inizializzazione a GKE.

I seguenti elementi che valuti nel tuo inventario sono incentrati sulla sicurezza della tua infrastruttura e dei tuoi cluster Kubernetes:

  • Spazi dei nomi. Se utilizzi gli spazi dei nomi di Kubernetes nei tuoi cluster per separare logicamente le risorse, valuta quali sono in ogni spazio dei nomi e scopri perché hai creato questa separazione. Ad esempio, potresti utilizzare gli spazi dei nomi come parte della tua strategia multitenancy. Potresti aver eseguito il deployment dei carichi di lavoro negli spazi dei nomi prenotati per i componenti di sistema di Kubernetes e potresti avere un controllo inferiore in GKE.
  • Controllo dell'accesso basato sui ruoli (RBAC). Se utilizzi l'autorizzazione RBAC nei tuoi cluster, elenca una descrizione di tutti i ClusterRole e ClusterRoleBinding configurati nei cluster.
  • Criteri di rete. Elenca tutti i criteri di rete che hai configurato nei cluster e comprendi come funzionano i criteri di rete in GKE.
  • Criteri e contesti di sicurezza dei pod. Acquisisci informazioni sui PodSecurityPolicies e sui contesti di sicurezza dei pod configurati nei cluster e scopri come funzionano in GKE.
  • Account di servizio. Se un processo nel cluster interagisce con il server API Kubernetes, acquisisci informazioni sugli account di servizio che sta utilizzando.

Dopo aver completato l'inventario dei cluster Kubernetes e aver valutato la sicurezza del tuo ambiente, crea l'inventario dei carichi di lavoro di cui è stato eseguito il deployment in tali cluster. Quando valuti i tuoi carichi di lavoro, raccogli informazioni sui seguenti aspetti:

  • Pod e controller. Per dimensionare i cluster nel nuovo ambiente, valuta quante istanze di ogni carico di lavoro hai eseguito il deployment e se utilizzi ResourceQuotes e calcola i limiti di consumo delle risorse. Raccogliere informazioni sui carichi di lavoro in esecuzione sui nodi del piano di controllo di ciascun cluster e sui controller utilizzati da ciascun carico di lavoro. Ad esempio, quanti deployment utilizzi? Quanti DaemonSet stai utilizzando?
  • Job e CronJob. I cluster e i carichi di lavoro potrebbero dover eseguire job o CronJob nell'ambito delle procedure di inizializzazione o di funzionamento. Valutare il numero di istanze di Job e di CronJob di cui hai eseguito il deployment, nonché le responsabilità e i criteri di completamento di ogni istanza.
  • Horizontal Pod Autoscaler. Per eseguire la migrazione dei criteri di scalabilità automatica nel nuovo ambiente, scopri come funziona Horizontal Pod Autoscaler su GKE.
  • Carichi di lavoro stateless e stateful. I carichi di lavoro stateless non archiviano i dati o lo stato nel cluster o in uno spazio di archiviazione permanente. Le applicazioni stateful salvano i dati per un utilizzo futuro. Per ogni carico di lavoro, valuta quali componenti sono stateless e quali sono stateful, perché la migrazione di carichi di lavoro stateful è in genere più difficile rispetto alla migrazione di quelli stateless.
  • Funzionalità di Kubernetes. Dall'inventario del cluster, sai quale versione di Kubernetes viene eseguita da ciascun cluster. Consulta le note di rilascio di ciascuna versione di Kubernetes per sapere quali funzionalità viene fornita e quali ne vengono ritirate. Valuta quindi i tuoi carichi di lavoro rispetto alle funzionalità di Kubernetes di cui hai bisogno. L'obiettivo di questa attività è sapere se stai utilizzando funzionalità deprecate o funzionalità non ancora disponibili in GKE. Se trovi funzionalità non disponibili, esegui la migrazione dalle funzionalità deprecate e adotta quelle nuove quando sono disponibili in GKE.
  • Spazio di archiviazione. Per i carichi di lavoro stateful, valuta se utilizzano gli oggetti PersistenceVolumeClaim. Elenca eventuali requisiti di archiviazione, ad esempio le dimensioni e la modalità di accesso, e in che modo questi PersistenceVolumeClaim vengono mappati a PersistenceVolumes. Per prendere in considerazione la crescita futura, valuta se è necessario espandere qualsiasi PersistenceVolumeClaim.
  • Configurazione e iniezione di secret. Per evitare di ricreare gli artefatti di cui è possibile eseguire il deployment ogni volta che si verifica una modifica nella configurazione dell'ambiente, inserisci la configurazione e i secret nei pod utilizzando ConfigMap e secret. Per ogni carico di lavoro, valuta quali ConfigMap e Secret vengono utilizzati dal carico di lavoro e in che modo stai compilando questi oggetti.
  • Dipendenze. I carichi di lavoro probabilmente non funzionano in modo isolato. Potrebbero avere dipendenze, interne al cluster o di sistemi esterni. Per ogni carico di lavoro, acquisisci le dipendenze e se i tuoi carichi di lavoro hanno una tolleranza quando le dipendenze non sono disponibili. Ad esempio, le dipendenze comuni includono file system distribuiti, database, piattaforme di distribuzione segrete, sistemi di gestione di identità e accessi, meccanismi di Service Discovery e qualsiasi altro sistema esterno.
  • Servizi Kubernetes. Per esporre i carichi di lavoro a client interni ed esterni, utilizza i Servizi. Per ogni servizio è necessario conoscere il relativo tipo. Per i servizi esposti esternamente, valuta come il servizio interagisce con il resto dell'infrastruttura. Ad esempio, in che modo la tua infrastruttura supporta i servizi LoadBalancer e gli oggetti Ingress? Di quali controller Ingress hai eseguito il deployment nei cluster?
  • Mesh di servizi. Se utilizzi un mesh di servizi nel tuo ambiente, valuta la relativa configurazione. È inoltre necessario sapere quanti cluster si estende, quali servizi fanno parte del mesh e come si modifica la topologia del mesh. Ad esempio, utilizzi il meccanismo di iniezione automatica per aggiungere automaticamente i servizi al mesh?
  • Incompatibilità e tolleranze e affinità e anti-affinità. Per ogni pod e nodo, valuta se hai configurato qualsiasi incompatibilità dei nodi, tolleranze dei pod o affinità per personalizzare la pianificazione dei pod nei cluster Kubernetes. Queste proprietà potrebbero anche fornirti informazioni su possibili configurazioni di nodi o pod non omogenei e potrebbero indicare che i pod o i nodi devono essere entrambi valutati con particolare attenzione e attenzione. Ad esempio, se hai configurato un particolare insieme di pod in modo che sia pianificato solo per alcuni nodi nel cluster Kubernetes, potrebbe significare che i pod hanno bisogno di risorse specializzate disponibili solo su tali nodi.

Dopo aver valutato i cluster e i relativi carichi di lavoro, valuta gli altri servizi e aspetti di supporto nell'infrastruttura, ad esempio:

Completa il test

Dopo aver creato gli inventari relativi ai cluster e ai carichi di lavoro Kubernetes, completa le altre attività della fase di valutazione in Migrazione a Google Cloud: valutazione e scoperta dei carichi di lavoro.

Pianificazione e costruzione degli elementi di base

Nella fase di pianificazione e creazione, esegui il provisioning e la configurazione dell'infrastruttura e dei servizi cloud che supportano i carichi di lavoro su Google Cloud:

  1. Creare una gerarchia di risorse.
  2. Configura la gestione di identità e accessi.
  3. Configura la fatturazione.
  4. Configurare la connettività di rete.
  5. Rafforza la tua sicurezza.
  6. Configura monitoraggio e avvisi.

Se hai già adottato Infrastructure as Code per gestire i carichi di lavoro nel tuo ambiente Kubernetes, puoi applicare la stessa procedura al tuo ambiente Google Cloud. Analizza i descrittori di Kubernetes perché alcune risorse Google Cloud di cui GKE esegue automaticamente il provisioning sono configurabili utilizzando etichette e annotazioni. Ad esempio, puoi eseguire il provisioning di un bilanciatore del carico interno anziché di uno esterno aggiungendo un'annotazione a un servizio LoadBalancer.

Le sezioni seguenti si basano su Migrazione a Google Cloud: Creazione delle basi.

Crea una gerarchia di risorse

Per progettare una gerarchia delle risorse efficiente, valuta in che modo la tua attività e le strutture organizzative vengono mappate a Google Cloud come descritto in Migrazione a Google Cloud: creazione delle basi e Preparare un ambiente GKE per la produzione.

Ad esempio, se hai bisogno di un ambiente multi-tenant in GKE, puoi scegliere tra le seguenti opzioni:

  • Creazione di un progetto Google Cloud per ogni tenant.
  • Condivisione di un progetto tra diversi tenant e provisioning di più cluster GKE.
  • usando gli spazi dei nomi Kubernetes.

La scelta dipende dall'isolamento, dalla complessità e dalle esigenze di scalabilità. Ad esempio, avere un progetto per tenant isola i tenant l'uno dall'altro, ma la gerarchia di risorse diventa più complessa da gestire a causa dell'elevato numero di progetti. Tuttavia, anche se la gestione degli spazi dei nomi Kubernetes è relativamente più semplice di una gerarchia di risorse complessa, questa opzione non garantisce altrettanto isolamento. Ad esempio, il piano di controllo potrebbe essere condiviso tra i tenant.

Configura la gestione di identità e accessi

Identity and Access Management fornisce gli strumenti per configurare centralmente il controllo dell'accesso granulare per le risorse cloud. Per ulteriori informazioni, consulta Identity and Access Management e Preparare un ambiente Google GKE per la produzione.

Scopri in che modo Kubernetes RBAC interagisce con la gestione di identità e accessi in Google Cloud e configura il RBAC in base ai tuoi requisiti raccolti nella fase di valutazione.

Configura la fatturazione

Prima di eseguire il provisioning di qualsiasi risorsa Google Cloud, configura la fatturazione Cloud e comprendi il modello di prezzi GKE. Per ulteriori informazioni, consulta la pagina relativa alla fatturazione.

Configurare la connettività di rete

La configurazione di rete è un aspetto fondamentale del tuo ambiente. Valuta il modello di rete GKE e i requisiti di connettività dei tuoi carichi di lavoro. Dopodiché, puoi iniziare a pianificare la tua configurazione di rete. Per maggiori informazioni, consulta la pagina Connettività e networking.

Rafforza la tua sicurezza

Comprendere le differenze tra il modello di sicurezza dell'ambiente e il modello di Google Cloud e come rafforzare la sicurezza dei tuoi cluster GKE è fondamentale per proteggere gli asset critici. Per ulteriori informazioni, consulta la sezione Sicurezza.

Configura monitoraggio e avvisi

Un quadro chiaro delle prestazioni dell'infrastruttura e dei carichi di lavoro è fondamentale per individuare aree di miglioramento. GKE offre integrazioni profonde con la suite operativa di Google Cloud, per consentirti di ottenere informazioni di logging e monitoraggio sui cluster e sui carichi di lavoro GKE all'interno di tali cluster. Per ulteriori informazioni, consulta la pagina Monitoraggio e avvisi.

deployment dei carichi di lavoro

Nella fase di deployment, procedi nel seguente modo:

  1. Provisioning e configurazione della piattaforma e degli ambienti di runtime.
  2. Esegui la migrazione dei dati da un ambiente precedente a uno nuovo.
  3. Esegui il deployment dei tuoi carichi di lavoro.

Le seguenti sezioni si basano su Migrazione a Google Cloud: trasferimento di grandi set di dati, Migrazione a Google Cloud: deployment dei carichi di lavoro e Migrazione a Google Cloud: migrazione da deployment manuali a deployment containerizzati automatizzati.

Provisioning e configurazione della piattaforma di runtime e degli ambienti

Prima di spostare qualsiasi carico di lavoro nel nuovo ambiente Google Cloud, esegui il provisioning dei cluster GKE.

Dopo la fase di valutazione, sai come eseguire il provisioning dei cluster GKE nel nuovo ambiente Google Cloud per soddisfare le tue esigenze. Puoi eseguire il provisioning di:

Dopo aver creato i cluster GKE e prima di eseguire il deployment di qualsiasi carico di lavoro, esegui il provisioning e configura spazi dei nomi, RBAC, criteri di rete, ResourceQuotes e PodSecurityPolicies per ciascun cluster GKE.

Esegui la migrazione dei dati da un ambiente precedente a uno nuovo

Ora puoi trasferire i dati necessari ai tuoi carichi di lavoro stateful.

Migrazione a Google Cloud: Il trasferimento di set di dati di grandi dimensioni contiene indicazioni su questo argomento. Se hai intenzione di modernizzare i carichi di lavoro per applicare un'architettura di microservizi o se l'hai già adottata o se hai bisogno di indicazioni sulle finestre tagliate e sulle strategie di manutenzione pianificate, consulta la pagina sulla migrazione di un'applicazione monolitica ai microservizi su GKE. Per saperne di più sulle opzioni di archiviazione dati disponibili su GKE, consulta la pagina sulla configurazione dello spazio di archiviazione. Ad esempio, puoi utilizzare i dischi permanenti di Compute Engine, a livello di zona o replicati in un'area geografica, oppure puoi utilizzare Filestore.

Esegui il provisioning di tutta l'infrastruttura di archiviazione necessaria prima di spostare i dati. Se utilizzi provisioning di StorageClass, li configuri nei nuovi cluster.

Esegui il deployment dei tuoi carichi di lavoro

Per eseguire il deployment dei carichi di lavoro, devi progettare e implementare un processo di deployment in base ai tuoi requisiti. Se i processi di deployment non ti soddisfano e vuoi eseguire la migrazione a un processo automatizzato più moderno, consulta Migrazione a Google Cloud: migrazione da deployment manuali a container e automazione. Contiene le istruzioni per eseguire la migrazione dai deployment manuali agli strumenti di orchestrazione dei container e all'automazione. La fase di deployment è anche un'opportunità per modernizzare i carichi di lavoro. Ad esempio, se utilizzi un qualsiasi pod nel tuo ambiente, valuta la possibilità di eseguire la migrazione di questi carichi di lavoro ai deployment.

Quando il processo di deployment è pronto, puoi eseguire il deployment dei carichi di lavoro su GKE.

Ottimizzazione dell'ambiente

L'ottimizzazione è l'ultima fase della migrazione. In questa fase, rendi il tuo ambiente più efficiente di prima. In questa fase, esegui più iterazioni di un loop ripetibile finché il tuo ambiente non soddisfa i requisiti di ottimizzazione. I passaggi di questo loop ripetibile sono i seguenti:

  1. Valutare il tuo ambiente attuale, i tuoi team e il tuo ciclo di ottimizzazione.
  2. Definizione dei requisiti e degli obiettivi di ottimizzazione.
  3. Ottimizzazione dell'ambiente e dei tuoi team.
  4. Regolazione del loop di ottimizzazione.

Le seguenti sezioni si basano su Migrazione a Google Cloud: Ottimizzazione dell'ambiente.

Valuta il tuo ambiente attuale, i tuoi team e il tuo ciclo di ottimizzazione

Mentre la prima valutazione si concentra sulla migrazione dal tuo ambiente a GKE, questa valutazione è personalizzata per la fase di ottimizzazione.

Definire i requisiti di ottimizzazione

Consulta i seguenti requisiti di ottimizzazione per il tuo ambiente GKE:

  • Implementa processi di deployment avanzati. Processi come i deployment canary o i deployment blu/verdi offrono maggiore flessibilità e possono aumentare l'affidabilità dell'ambiente, estendere i test e ridurre l'impatto di qualsiasi problema per gli utenti.
  • Configura un mesh di servizi. Introducendo un mesh di servizi nel tuo ambiente, utilizzi funzionalità come l'osservabilità, la gestione del traffico e l'autenticazione reciproca per i tuoi servizi e riduci la pressione sui team di DevOps. Puoi eseguire il deployment di un mesh di servizi multi-cluster per segmentare meglio i carichi di lavoro o un mesh di servizi espanso per supportare la migrazione al nuovo ambiente.
  • Configura la scalabilità automatica. Hai diverse opzioni complementari per scalare automaticamente il tuo ambiente GKE. Puoi scalare automaticamente i tuoi cluster e i carichi di lavoro all'interno di ciascun cluster. Configurando il gestore della scalabilità automatica del cluster, puoi ridimensionare automaticamente un cluster GKE in base alle esigenze dei tuoi carichi di lavoro aggiungendo o rimuovendo nodi worker nel cluster. Se vuoi scalare automaticamente i carichi di lavoro, regola le richieste e i limiti di consumo delle CPU e della memoria tramite il scalatore automatico pod verticale. Quando utilizzi il gestore della scalabilità automatica, non devi pensare ai valori da specificare per ogni CPU e richiesta di memoria di ogni container.
  • Riduci i costi con le macchine virtuali prerilasciabili (VM). Se alcuni dei tuoi carichi di lavoro sono tolleranti agli ambienti di runtime senza garanzia di disponibilità, valuta la possibilità di eseguire il deployment di questi carichi di lavoro in un pool di nodi composto da VM prerilasciabili. I prezzi delle VM prerilasciabili sono inferiori rispetto alle VM di Compute Engine standard, quindi puoi ridurre i costi dei cluster.
  • Integra GKE con altri prodotti. Alcuni prodotti Google Cloud possono integrarsi con GKE per rafforzare la sicurezza del tuo ambiente. Ad esempio, puoi analizzare i container per rilevare le vulnerabilità o utilizzare immagini di base gestite in Container Registry.
  • Progetta i tuoi cluster GKE in modo che siano fungibili. Considerando i tuoi cluster come fungibili e automatizzando il provisioning e la configurazione, puoi snellire e generalizzare i processi operativi per mantenerli e anche semplificare le migrazioni future e gli upgrade dei cluster GKE. Ad esempio, se devi eseguire l'upgrade di un cluster GKE fungibile a una nuova versione di GKE, puoi eseguire automaticamente il provisioning e la configurazione di un nuovo cluster di cui è stato eseguito l'upgrade, quindi eseguire automaticamente il deployment dei carichi di lavoro nel nuovo cluster e disattivare il vecchio cluster GKE obsoleto.

Anche se puoi perseguire alcuni di questi requisiti di ottimizzazione in un ambiente Kubernetes, è più facile in GKE perché non devi spendere tanto per mantenere il cluster in esecuzione. Puoi concentrarti sull'ottimizzazione.

Completa l'ottimizzazione

Dopo aver compilato l'elenco dei requisiti di ottimizzazione, completa le altre attività della fase di ottimizzazione.

Passaggi successivi