Questa pagina mostra come eseguire la migrazione del cluster e dei pool di nodi Google Kubernetes Engine (GKE) standard da Docker a immagini di nodi che utilizzano il runtime del container containerd.
Panoramica
I nodi Kubernetes utilizzano il runtime del container per avviare, gestire e arrestare i container in esecuzione nei pod. Il runtime containerd è un runtime di container standard di settore supportato da GKE.
Il runtime containerd fornisce l'astrazione a livelli che consente l'implementazione di un ampio insieme di funzionalità come gVisor e Image Streaming per estendere la funzionalità di GKE. Il runtime containerd è considerato più efficiente in termini di risorse e più sicuro rispetto al runtime Docker.
Per eseguire la migrazione del runtime del container:
- Identificare i nodi che utilizzano il runtime di Docker
- Verificare l'impatto della migrazione
- Modificare l'immagine del nodo
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installa e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo
gcloud components update
.
Identificare i nodi che utilizzano il runtime di Docker
Puoi controllare quali nodi utilizzano immagini dei nodi basate su Docker utilizzando i seguenti metodi:
- Utilizza uno script per eseguire l'iterazione su tutti i nodi di tutti i cluster GKE nel tuo progetto Google Cloud.
- Utilizza Google Cloud CLI,
kubectl
o la console Google Cloud per identificare le immagini di nodo. - Utilizza approfondimenti e consigli sul ritiro per identificare cluster e nodi in zone o regioni specifiche in un progetto Google Cloud.
Ti consigliamo di utilizzare uno script per identificare rapidamente tutti i nodi di cui è necessaria la migrazione.
Utilizzare uno script per identificare i nodi Docker
Lo script seguente esegue l'iterazione su ogni nodo di ogni cluster nei progetti disponibili e fornisce consigli utili, ad esempio:
- Se il provisioning automatico dei nodi è configurato per le immagini Docker
- Equivalenti suggeriti per l'immagine del nodo containerd per la migrazione
- Versioni delle immagini dei nodi suggerite per la migrazione
- Comandi suggeriti da eseguire per eseguire la migrazione dei nodi e delle impostazioni identificati
Lo script ignora i cluster GKE Autopilot, che utilizzano per impostazione predefinita Container-Optimized OS con l'immagine del nodo containerd.
Esegui questo script:
Identificare le immagini dei nodi utilizzando Google Cloud
Puoi controllare le immagini dei nodi per i nodi esistenti utilizzando Google Cloud CLI,kubectl
o la console Google Cloud.
gcloud
Esegui questo comando:
gcloud container node-pools list \
--cluster=CLUSTER_NAME \
--format="table(name,version,config.imageType)"
Sostituisci CLUSTER_NAME
con il nome del cluster.
L'output è simile al seguente:
NAME NODE_VERSION IMAGE_TYPE
default-pool 1.19.6-gke.600 UBUNTU
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster da verificare.
Seleziona la scheda Nodi.
Nella sezione Pool di nodi, controlla il valore nella colonna Tipo di immagine.
kubectl
Esegui questo comando:
kubectl get nodes -o wide
L'output è simile al seguente:
# For Docker runtime
NAME STATUS VERSION OS-IMAGE CONTAINER-RUNTIME
gke-node-1 Ready v1.16.15-gke.6000 Container-Optimized OS from Google docker://19.3.1
gke-node-2 Ready v1.16.15-gke.6000 Container-Optimized OS from Google docker://19.3.1
gke-node-3 Ready v1.16.15-gke.6000 Container-Optimized OS from Google docker://19.3.1
Il valore nella colonna CONTAINER-RUNTIME
mostra il runtime e la versione.
Identificare i cluster utilizzando approfondimenti e consigli sul ritiro
GKE rileva l'utilizzo di alcune API e funzionalità ritirate, tra cui le immagini dei nodi basate su Docker. Per saperne di più, consulta la pagina relativa ai ritiramenti di GKE.
Nell'ambito del rilevamento dell'utilizzo delle ritirate, GKE genera informazioni e consigli che identificano l'utilizzo delle immagini dei nodi basate su Docker con il sottotipo di informazioni DEPRECATION_K8S_1_24_DOCKERSHIM
.
Un accoppiamento di approfondimenti e consigli identifica un cluster con nodi che utilizzano immagini dei nodi basate su Docker. Ogni informazione e consiglio fornisce un elenco dei pool di nodi specifici in un cluster che utilizzano immagini dei nodi basate su Docker e per i quali è necessaria la migrazione alle immagini dei nodi containerd.
Per iniziare, segui le istruzioni per visualizzare approfondimenti e consigli sul ritiro. Per i comandi gcloud CLI, utilizza il seguente flag per visualizzare solo le informazioni su questa ritiro:
--filter="insightSubtype:DEPRECATION_K8S_1_24_DOCKERSHIM"
Dopo aver identificato i pool di nodi del cluster che utilizzano immagini dei nodi basate su Docker, segui le istruzioni per modificare l'immagine del nodo in un'immagine del nodo containerd.
Verificare l'impatto della migrazione
Prima di eseguire la migrazione dei cluster di produzione e dei pool di nodi a immagini dei nodi che utilizzano containerd, ti consigliamo vivamente di testare l'impatto della migrazione in un ambiente di staging per ridurre al minimo il rischio di problemi.
Ti consigliamo di eseguire la migrazione dei nodi indipendentemente dall'upgrade, in modo da poter isolare le variabili durante la verifica del funzionamento dei carichi di lavoro con la nuova configurazione. Inoltre, se esegui contemporaneamente l'upgrade del pool di nodi alla versione 1.24, non puoi eseguire il rollback della modifica perché la versione 1.24 non supporta i nodi Docker e non puoi eseguire il downgrade alle versioni minori.
Modificare l'immagine del nodo in un'immagine containerd
Se hai utilizzato lo script per identificare i tuoi nodi Docker, puoi utilizzare i comandi suggeriti restituiti dallo script per modificare le impostazioni di provisioning automatico dei nodi e le immagini dei nodi in modo che corrispondano a quelle di containerd.
Puoi anche eseguire la migrazione dei nodi da un tipo di immagine Docker a un tipo di immagine containerd aggiornando il pool di nodi e impostando un'immagine diversa utilizzando la gcloud CLI o la console Google Cloud.
GKE utilizza la strategia di upgrade dei nodi selezionata e la configurazione per eseguire la migrazione dell'immagine di un nodo. Per questa migrazione, ti consigliamo di utilizzare la strategia di upgrade blue-green perché, se i tuoi carichi di lavoro riscontrano problemi con la nuova immagine del nodo durante l'upgrade, puoi eseguire il rollback all'ambiente precedente con la configurazione dell'immagine del nodo originale.
gcloud
Esegui questo comando:
gcloud container clusters upgrade CLUSTER_NAME \
--image-type=NODE_IMAGE \
--node-pool=POOL_NAME \
--cluster-version=NODE_VERSION
Sostituisci quanto segue:
NODE_IMAGE
: l'immagine del nodo che vuoi che i nodi utilizzino.POOL_NAME
: il nome del pool di nodi di cui eseguire la migrazione.NODE_VERSION
: la versione esistente del pool di nodi. Ti consigliamo di impostare questo flag perché, in caso contrario, GKE tenterà di eseguire l'upgrade della versione del pool di nodi alla versione del piano di controllo e di aggiornare l'immagine del nodo nella stessa operazione. Se il piano di controllo esegue la versione 1.24, il comando non va a buon fine. Se il piano di controllo è in esecuzione con la versione 1.23, il comando va a buon fine, il che ti impedisce di testare le due modifiche (upgrade della versione e aggiornamento dell'immagine) in modo isolato.
L'output è simile al seguente:
NAME NODE_VERSION IMAGE_TYPE
default-pool 1.23.6-gke.600 UBUNTU_CONTAINERD
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster da verificare.
Fai clic sulla scheda Nodi.
Nella sezione Pool di nodi, fai clic sul nome del pool di nodi che vuoi modificare.
Nella pagina Dettagli del pool di nodi, fai clic su
Modifica.Nella sezione Nodi, fai clic su Cambia in Tipo di immagine.
Seleziona uno dei tipi di immagini containerd.
Fai clic su Cambia.
Esegui il rollback alle immagini dei nodi Docker
Se è stata eseguita la migrazione automatica o manuale dei tuoi nodi a nodi containerd e hai riscontrato un problema con i carichi di lavoro, svolgi i seguenti passaggi per ripristinare le immagini dei nodi Docker:
- Scegli il passaggio seguente in base allo stato dell'operazione:
- Se l'operazione è ancora in corso, puoi annullarla e eseguire il rollback.
- Se l'operazione è completata, consulta i passaggi della sezione precedente e seleziona l'immagine Docker equivalente.
- Configura un'esclusione dalla manutenzione per impedire temporaneamente a GKE di riprovare la migrazione.
- Esamina la causa principale del problema per poter eseguire la migrazione da Docker e assicurarti che nel cluster sia in esecuzione una versione supportata di GKE.
- Riprova a modificare l'immagine del nodo in un'immagine containerd. Se rimuovi l'esclusione per la manutenzione, GKE attiverà di nuovo l'operazione.
Aggiorna le configurazioni degli strumenti Infrastructure as Code (IaC)
Se utilizzi strumenti IaC come Terraform, Ansible o Pulumi per gestire i cluster GKE, assicurati di aggiornare le configurazioni in modo da utilizzare le immagini dei nodi containerd per impedire agli strumenti di riconciliare lo stato precedentemente desiderato con il nuovo stato effettivo. Ad esempio, il provider Terraform GKE supporta i tipi di immagini configurabili.
Aggiorna le configurazioni in modo che lo strumento non aggiorni nuovamente l'immagine del nodo a un'immagine del nodo basata su Docker dopo la migrazione alle immagini dei nodi containerd.
Modificare l'immagine del nodo predefinita per il provisioning automatico dei nodi
Se utilizzi il provisioning automatico dei nodi nel tuo cluster, modifica il tipo di immagine predefinito in un'immagine del nodo containerd. La modifica del tipo di immagine predefinito si applica solo ai nuovi pool di nodi di cui è stato eseguito il provisioning automatico. Devi modificare manualmente l'immagine del nodo per i pool di nodi con provisioning automatico esistenti.
Puoi modificare il tipo di immagine di provisioning automatico dei nodi predefinito utilizzando la gcloud CLI o un file di configurazione.
gcloud
Esegui questo comando:
gcloud container clusters update CLUSTER_NAME \
--enable-autoprovisioning \
--autoprovisioning-image-type=IMAGE_TYPE
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del cluster da aggiornare.IMAGE_TYPE
: il tipo di immagine del nodo, che può essere uno tra i seguenti:cos_containerd
ubuntu_containerd
File
Puoi utilizzare un file di configurazione YAML per modificare il tipo di immagine del nodo predefinito per il provisioning automatico dei nodi. Quando utilizzi un file, devi specificare anche i valori massimi per le risorse di CPU e memoria.
Salva il seguente file YAML:
resourceLimits: - resourceType: 'cpu' minimum: 4 maximum: 10 - resourceType: 'memory' maximum: 64 autoprovisioningNodePoolDefaults: imageType: 'IMAGE_TYPE'
Sostituisci
IMAGE_TYPE
con il tipo di immagine containerd.Applica la configurazione:
gcloud container clusters update CLUSTER_NAME \ --enable-autoprovisioning \ --autoprovisioning-config-file=FILE_NAME
Sostituisci
FILE_NAME
con il percorso del file di configurazione.
Risoluzione dei problemi
Per la risoluzione dei problemi e per i problemi noti con le soluzioni alternative, consulta Risoluzione dei problemi relativi al runtime del contenitore.
Passaggi successivi
- Scopri di più sul provisioning automatico dei nodi.
- Scopri di più sulle immagini dei nodi containerd.