Best practice per gli upgrade dei cluster Google Distributed Cloud

Questo documento descrive le best practice e le considerazioni per l'upgrade di Google Distributed Cloud. Scopri come prepararti agli upgrade dei cluster e le best practice da seguire prima dell'upgrade. Queste best practice aiutano a ridurre i rischi associati agli upgrade dei cluster.

Se hai più ambienti, ad esempio test, sviluppo e produzione, ti consigliamo di iniziare con l'ambiente meno critico, ad esempio test, e verificare la funzionalità di upgrade. Dopo aver verificato che l'upgrade sia stato eseguito correttamente, passa all'ambiente successivo. Ripeti questa procedura finché non esegui l'upgrade degli ambienti di produzione. Questo approccio ti consente di passare da un punto critico all'altro e verificare che l'upgrade e i tuoi carichi di lavoro vengano eseguiti correttamente.

Elenco di controllo per l'upgrade

Ti consigliamo di seguire tutte le best practice descritte in questo documento. Utilizza il seguente elenco di controllo per monitorare i tuoi progressi. Ogni voce dell'elenco rimanda a una sezione di questo documento con maggiori informazioni:

Una volta completati questi controlli, puoi avviare la procedura di upgrade. Monitora l'avanzamento finché tutti i cluster non vengono aggiornati correttamente.

Pianifica l'upgrade

Gli aggiornamenti possono essere interrotti. Prima di iniziare l'upgrade, pianifica con attenzione per assicurarti che l'ambiente e le applicazioni siano pronti e preparati.

Stima l'impegno di tempo e pianifica un periodo di manutenzione

Il tempo necessario per eseguire l'upgrade di un cluster varia a seconda del numero di nodi e della densità del workload in esecuzione. Per completare correttamente l'upgrade di un cluster, utilizza un periodo di manutenzione con tempo sufficiente.

Per calcolare una stima approssimativa dell'upgrade, utilizza 10 minutes * the number of nodes per l'upgrade di un singolo nodo simultaneo.

Ad esempio, se hai 50 nodi in un cluster, il tempo totale di upgrade sarà di circa 500 minuti: 10 minutes * 50 nodes = 500 minutes.

Controllare la compatibilità di altri Google Cloud prodotti

Se il cluster esegue Cloud Service Mesh, Config Sync o Policy Controller, controlla Supporto per versioni e upgrade e verifica le versioni supportate con Google Distributed Cloud prima e dopo l'upgrade.

Il controllo di compatibilità si basa sul cluster amministratore o utente in cui vengono implementati Cloud Service Mesh, Config Sync o Policy Controller.

Controllare l'utilizzo delle risorse del cluster

Per assicurarti che i pod possano essere evacuati quando il nodo viene svuotato e che ci siano risorse sufficienti nel cluster in fase di upgrade per gestire l'upgrade, controlla l'utilizzo attuale delle risorse del cluster. Per controllare l'utilizzo delle risorse per il tuo cluster, utilizza le dashboard personalizzate in Google Cloud Observability.

Puoi utilizzare comandi come kubectl top nodes per ottenere l'utilizzo attuale delle risorse del cluster, ma le dashboard possono fornire una visualizzazione più dettagliata delle risorse consumate nel tempo. Questi dati sull'utilizzo delle risorse possono aiutarti a capire quando un upgrade causerebbe meno interruzioni, ad esempio durante i fine settimana o le serate, a seconda del carico di lavoro in esecuzione e dei casi d'uso.

La tempistica per l'upgrade del cluster di amministrazione potrebbe essere meno critica rispetto a quella per i cluster utente, perché un upgrade del cluster di amministrazione di solito non introduce tempi di inattività dell'applicazione. Tuttavia, è comunque importante verificare la disponibilità di risorse prima di iniziare l'upgrade di un cluster di amministrazione. Inoltre, l'upgrade del cluster di amministrazione potrebbe comportare alcuni rischi e pertanto potrebbe essere consigliato durante i periodi di utilizzo meno attivi, quando l'accesso di gestione al cluster è meno critico.

Risorse del control plane del cluster di amministrazione

Tutti i controller e i job di upgrade vengono eseguiti nei nodi del control plane del cluster di amministrazione. Controlla il consumo di risorse di questi nodi del control plane per le risorse di calcolo disponibili. In genere, la procedura di upgrade richiede 1000 millicore di CPU (1000 mCPU) e 2-3 GiB di RAM per ogni set di controller del ciclo di vita. Tieni presente che l'unità CPU "mCPU" sta per "millesimo di core", quindi 1000 millicore equivalgono a un core su ogni nodo per ogni set di controller del ciclo di vita. Per ridurre le risorse di calcolo aggiuntive richieste durante un upgrade, prova a mantenere i cluster utente alla stessa versione.

Nel seguente esempio di deployment, i due cluster utente hanno versioni diverse rispetto al cluster di amministrazione:

Cluster di amministrazione Cluster utente 1 Cluster utente 2
1.13.3 1.13.0 1.13.2

Un insieme di controller del ciclo di vita viene implementato nel controller di amministrazione per ogni versione in uso. In questo esempio, sono presenti tre set di controller del ciclo di vita: 1.13.3, 1.13.0 e 1.13.2. Ogni set di controller del ciclo di vita consuma un totale di 1000 mCPU e 3 GiB di RAM. Il consumo totale attuale di risorse di questi controller del ciclo di vita è di 3000 mCPU e 9 GiB di RAM.

Se il cluster utente 2 viene eseguito l'upgrade a 1.13.3, ora esistono due set di controller del ciclo di vita: 1.13.3 e 1.13.0:

Cluster di amministrazione Cluster utente 1 Cluster utente 2
1.13.3 1.13.0 1.13.3

Ora i controller del ciclo di vita consumano un totale di 2000 mCPU e 6 GiB di RAM.

Se il cluster utente 1 viene aggiornato alla versione 1.13.3, ora tutto il parco risorse viene eseguito alla stessa versione: 1.13.3:

Cluster di amministrazione Cluster utente 1 Cluster utente 2
1.13.3 1.13.3 1.13.3

Ora esiste un solo insieme di controller del ciclo di vita, che consumano un totale di 1000 mCPU e 3 GB di RAM.

Nell'esempio seguente, tutti i cluster utente hanno la stessa versione. Se il cluster di amministrazione viene aggiornato, vengono utilizzati solo due set di controller del ciclo di vita, quindi il consumo di risorse di calcolo viene ridotto:

Cluster di amministrazione Cluster utente 1 Cluster utente 2
1.14.0 1.13.3 1.13.3

In questo esempio, i controller del ciclo di vita consumano di nuovo un totale di 2000 mCPU e 6 GiB di RAM finché tutti i cluster utente non vengono aggiornati alla stessa versione del cluster di amministrazione.

Se i nodi del control plane non dispongono di risorse di calcolo aggiuntive durante l'upgrade, potresti visualizzare pod come anthos-cluster-operator, capi-controller-manager, cap-controller-manager o cap-kubeadm-bootstraper nello stato Pending. Per risolvere il problema, esegui l'upgrade di alcuni cluster di utenti alla stessa versione per consolidare le versioni e ridurre il numero di controller del ciclo di vita in uso. Se l'upgrade è già bloccato, puoi anche utilizzare kubectl edit deployment per modificare le implementazioni in attesa in modo da ridurre le richieste di CPU e RAM per adattarle al control plane del cluster di amministrazione.

La tabella seguente descrive in dettaglio i requisiti delle risorse di calcolo per diversi scenari di upgrade:

Cluster Risorse del cluster di amministrazione richieste
Upgrade del cluster utente Esegui l'upgrade alla stessa versione degli altri cluster: N/A

Esegui l'upgrade a una versione diversa degli altri cluster di amministrazione o utente: 1000 mCPU e 3 GiB di RAM

I cluster utente in un cluster ibrido hanno gli stessi requisiti di risorse.
Upgrade del cluster di amministrazione (con il cluster utente) 1000 mCPU e 3 GiB di RAM
Upgrade del cluster ibrido (senza cluster utente) Picco di 1000 mCPU e 3 GiB di RAM. Le risorse vengono restituite dopo l'utilizzo.
Autonoma Picco di 200 mCPU e 1 GiB di RAM. Le risorse vengono restituite dopo l'utilizzo.

Esegui il backup dei cluster

Prima di iniziare un upgrade, esegui il backup dei cluster utilizzando il comando bmctl backup cluster.

Poiché il file di backup contiene informazioni sensibili, archivialo in modo sicuro.

Verifica che i cluster siano configurati e funzionino correttamente

Per controllare l'integrità di un cluster prima di un upgrade, esegui bmctl check cluster sul cluster. Il comando esegue controlli avanzati, ad esempio per identificare i nodi che non sono configurati correttamente o che hanno pod in uno stato bloccato.

Quando esegui il comando bmctl upgrade cluster per eseguire l'upgrade dei cluster, vengono eseguiti alcuni controlli preflight. La procedura di upgrade si interrompe se questi controlli non vanno a buon fine. È consigliabile identificare e risolvere in modo proattivo questi problemi con il comando bmctl check cluster, anziché affidarsi ai controlli preliminari che servono a proteggere i cluster da eventuali danni.

Esaminare i deployment dei carichi di lavoro degli utenti

Esistono due aree da considerare per i carichi di lavoro degli utenti: draining e compatibilità API.

Svuotamento del workload

Il carico di lavoro dell'utente su un nodo viene svuotato durante un upgrade. Se il carico di lavoro ha una sola replica o tutte le repliche si trovano sullo stesso nodo, lo svuotamento del carico di lavoro potrebbe causare interruzioni nei servizi in esecuzione nel cluster. Esegui i tuoi carichi di lavoro con più repliche. Il numero di repliche deve essere superiore al numero di nodi simultanei.

Per evitare un upgrade bloccato, il processo di svuotamento dell'upgrade fino alla versione 1.33 non rispetta i budget di interruzione dei pod (PDB). I workload potrebbero essere eseguiti in uno stato di degrado e la replica con il servizio minimo sarebbe total replica number - concurrent upgrade number.

Compatibilità API

Per la compatibilità delle API, controlla la compatibilità delle API del workload con la versione secondaria più recente di Kubernetes quando esegui l'upgrade di una versione secondaria. Se necessario, esegui l'upgrade del carico di lavoro a una versione compatibile. Ove possibile, il team di ingegneria di GKE fornisce istruzioni per identificare i carichi di lavoro che utilizzano API incompatibili, ad esempio API Kubernetes rimosse.

Se utilizzi Cloud Service Mesh, Config Sync e Policy Controller, controlla se la versione installata è compatibile con la nuova versione di Google Distributed Cloud. Per informazioni sulla compatibilità delle versioni, vedi Supporto per versioni e upgrade.

Controllare l'utilizzo dei webhook

Controlla se il tuo cluster ha webhook, in particolare risorse pod per scopi di controllo come Policy Controller. Il processo di svuotamento durante l'upgrade del cluster potrebbe interrompere il servizio webhook Policy Controller, il che può causare il blocco o il rallentamento dell'upgrade. Ti consigliamo di disattivare temporaneamente questi webhook o di utilizzare un deployment a disponibilità elevata.

Esaminare l'utilizzo delle funzionalità in anteprima

Le funzionalità in anteprima sono soggette a modifiche e vengono fornite solo a scopo di test e valutazione. Non utilizzare le funzionalità in anteprima nei cluster di produzione. Non garantiamo che i cluster che utilizzano le funzionalità di anteprima possano essere aggiornati. In alcuni casi, blocchiamo esplicitamente gli upgrade per i cluster che utilizzano le funzionalità in anteprima.

Per informazioni sulle modifiche che provocano errori relative all'upgrade, consulta le note di rilascio.

Controllare lo stato di SELinux

Se vuoi attivare SELinux per proteggere i tuoi container, devi assicurarti che SELinux sia attivato in modalità Enforced su tutti i tuoi computer host. A partire dalla versione 1.9.0 o successive di Google Distributed Cloud, puoi abilitare o disabilitare SELinux prima o dopo la creazione o gli upgrade del cluster. SELinux è abilitato per impostazione predefinita su Red Hat Enterprise Linux (RHEL). Se SELinux è disattivato sulle macchine host o non ne hai la certezza, consulta Protezione dei container mediante SELinux per istruzioni su come attivarlo.

Google Distributed Cloud supporta SELinux solo nei sistemi RHEL.

Non modificare la configurazione della densità dei pod

Google Distributed Cloud supporta la configurazione di un massimo di 250 pod per nodo con nodeConfig.PodDensity.MaxPodsPerNode. Puoi configurare la densità dei pod solo durante la creazione del cluster. Non puoi aggiornare le impostazioni di densità dei pod per i cluster esistenti. Non tentare di modificare la configurazione della densità dei pod durante un upgrade.

Assicurati che i nodi del control plane e del bilanciatore del carico non siano in modalità di manutenzione

Prima di avviare un upgrade, assicurati che i nodi del control plane e del bilanciatore del carico non siano in manutenzione. Se un nodo è in modalità di manutenzione, l'upgrade viene messo in pausa per garantire che i pool di nodi del control plane e del bilanciatore del carico siano sufficientemente disponibili.

Passaggi successivi