Questa pagina descrive le best practice che puoi seguire per pianificare e progettare cluster di grandi dimensioni.
Perché pianificare cluster GKE di grandi dimensioni
Ogni sistema informatico, incluso Kubernetes, ha alcuni limiti di architettura. Il superamento dei limiti potrebbe influire sulle prestazioni del cluster o, in alcuni casi, persino causare tempi di inattività. Segui le best practice ed esegui le azioni consigliate per assicurarti che i tuoi cluster eseguano i carichi di lavoro in modo affidabile su larga scala.
Limitazioni dei cluster GKE di grandi dimensioni
Quando GKE scala un cluster a un numero elevato di nodi, si impegna a modificare la quantità di risorse disponibili in base alle esigenze del sistema, rispettando al contempo gli obiettivi del livello di servizio (SLO). Google Cloud supporta cluster di grandi dimensioni. Tuttavia, in base al tuo caso d'uso, devi considerare le limitazioni dei cluster di grandi dimensioni per rispondere meglio ai requisiti di scalabilità dell'infrastruttura.
Questa sezione descrive le limitazioni e le considerazioni relative alla progettazione di cluster GKE di grandi dimensioni in base al numero previsto di nodi.
Cluster con un massimo di 5000 nodi
Quando progetti l'architettura del cluster per scalare fino a 5000 nodi, considera le seguenti condizioni:
- Disponibile solo per i cluster regionali.
- Disponibile solo per i cluster che utilizzano Private Service Connect.
- La migrazione dai cluster di zona a quelli regionali richiede la ricreazione del cluster per sbloccare un livello di quota dei nodi più elevato.
Se prevedi di scalare il cluster oltre i 5000 nodi, contatta l'assistenza clienti Google Cloud per aumentare le dimensioni del cluster e il limite di quota.
Cluster con più di 5000 nodi
GKE supporta cluster standard di grandi dimensioni fino a 15.000 nodi. Nella versione 1.31 e successive, GKE supporta cluster di grandi dimensioni fino a 65.000 nodi. Il limite di 65.000 è pensato per l'esecuzione di carichi di lavoro di AI su larga scala.
Se prevedi di scalare il cluster fino a 15.000 o 65.000 nodi, completa le seguenti attività:
Tieni presenti le seguenti limitazioni:
- Il gestore della scalabilità automatica dei cluster non è supportato. Utilizza invece l'API GKE per aumentare o diminuire le dimensioni dei pool di nodi.
- La funzionalità Multi-network non è supportata.
- I servizi con più di 100 pod devono essere senza interfaccia utente.
- Ogni pod deve essere eseguito sul proprio nodo, ad eccezione dei DaemonSet di sistema. Per definire la pianificazione dei pod su nodi specifici, puoi utilizzare l'affinità o l'anti-affinità dei pod di Kubernetes.
- La migrazione dai cluster di zona a quelli regionali richiede la ricreazione del cluster per sbloccare un livello di quota dei nodi più elevato.
- La migrazione a cluster che utilizzano Private Service Connect richiede la ricreazione del cluster per sbloccare il livello di quota dei nodi più elevato.
Contatta l'assistenza clienti Cloud per aumentare le dimensioni del cluster e il limite di quota a 15.000 o 65.000 nodi, a seconda delle tue esigenze di scalabilità.
Best practice per la suddivisione dei carichi di lavoro tra più cluster
Puoi eseguire i carichi di lavoro su un singolo cluster di grandi dimensioni. Questo approccio è più facile da gestire, più economico e offre un utilizzo migliore delle risorse rispetto a più cluster. Tuttavia, in alcuni casi devi prendere in considerazione la suddivisione del tuo carico di lavoro in più cluster:
- Consulta i casi d'uso multi-cluster per saperne di più sui requisiti generali e sugli scenari per l'utilizzo di più cluster.
- Inoltre, dal punto di vista della scalabilità, suddividi il cluster quando potrebbe superare uno dei limiti descritti nella sezione di seguito o una delle quote GKE. Ridurre il rischio di superare i limiti di GKE riduce il rischio di tempi di inattività o altri problemi di affidabilità.
Se decidi di suddividere il cluster, utilizza la gestione del parco risorse per semplificare la gestione di un parco risorse multi-cluster.
Limiti e best practice
Per assicurarti che la tua architettura supporti i cluster GKE su larga scala, esamina i seguenti limiti e le best practice correlate. Il superamento di questi limiti potrebbe causare un peggioramento delle prestazioni del cluster o problemi di affidabilità.
Queste best practice si applicano a qualsiasi cluster Kubernetes predefinito senza estensioni installate. L'estensione dei cluster Kubernetes con webhook o definizioni di risorse personalizzate (CRD) è una pratica comune, ma può limitare la possibilità di eseguire lo scale del cluster.
La tabella seguente estende le principali quote e i limiti di GKE. Inoltre, devi conoscere i limiti di Kubernetes open source per i cluster su larga scala.
I requisiti della versione GKE indicati nella tabella si applicano sia ai nodi sia al piano di controllo.
Limite GKE | Descrizione | Best practice |
---|---|---|
Dimensioni del database etcd | La dimensione massima del database etcd è di 6 GB. Se esegui un cluster molto grande con decine di migliaia di risorse, le istanze etcd potrebbero superare questo limite. Puoi controllare il livello di utilizzo dei tuoi cluster nella console Google Cloud. | Se superi questo limite, GKE potrebbe contrassegnare le tue istanze etcd come non attive. Di conseguenza, il piano di controllo
dei cluster non risponde.
Se superi questo limite, contatta l'assistenza Google Cloud. |
Dimensioni totali degli oggetti etcd per tipo | La dimensione totale di tutti gli oggetti del tipo di risorsa specificato non deve superare gli 800 MB. Ad esempio, puoi creare 750 MB di istanze di pod e 750 MB di secret, ma non puoi creare 850 MB di secret. Se crei più di 800 MB di oggetti, l'inizializzazione di Kubernetes o dei controller personalizzati potrebbe non riuscire e causare interruzioni. |
Mantieni le dimensioni totali di tutti gli oggetti di ogni tipo archiviati in etcd al di sotto di 800 MB. Questo è particolarmente applicabile ai cluster che utilizzano molti Secret o ConfigMap di grandi dimensioni o un volume elevato di CRD. |
Numero di servizi per i cluster in cui GKE Dataplane V2 non è abilitato | Il rendimento di iptables utilizzato da kube-proxy peggiora se si verifica una delle seguenti condizioni:
Questo limite viene eliminato quando è attivato GKE Dataplane V2. |
Mantieni il numero di servizi nel cluster al di sotto di 10.000. Per scoprire di più, consulta la sezione Esporre le applicazioni utilizzando i servizi. |
Numero di servizi per spazio dei nomi | Il numero di variabili di ambiente generate per i servizi potrebbe superare i limiti della shell. Ciò potrebbe causare l'arresto anomalo dei pod all'avvio. |
Mantieni il numero di servizi per spazio dei nomi al di sotto di 5000. Puoi disattivare il completamento di queste variabili di ambiente. Consulta la documentazione su come impostare Per scoprire di più, consulta la sezione Esporre le applicazioni utilizzando i servizi. |
Numero di pod dietro un singolo servizio per i cluster in cui GKE Dataplane V2 non è abilitato |
Ogni nodo esegue un kube-proxy che utilizza i watch per monitorare qualsiasi modifica del servizio. Più grande è un cluster, più dati relativi alle modifiche vengono elaborati dall'agente. Questo è particolarmente evidente nei cluster con più di 500 nodi. Le informazioni sugli endpoint sono suddivise
in Gli oggetti endpoint sono ancora disponibili per i componenti, ma qualsiasi endpoint superiore a 1000 pod viene troncato automaticamente. |
Mantieni il numero di pod dietro un singolo servizio inferiore a 10.000. Per scoprire di più, consulta la sezione Esporre le applicazioni che utilizzano i servizi. |
Numero di pod dietro un singolo servizio per i cluster in cui è abilitato GKE Dataplane V2 |
GKE Dataplane V2 contiene limiti al numero di pod esposti da un singolo servizio. Lo stesso limite si applica ai cluster Autopilot in quanto utilizzano GKE Dataplane V2. |
In GKE 1.23 e versioni precedenti, mantieni il numero di pod dietro un singolo servizio inferiore a 1000. In GKE 1.24 e versioni successive, mantieni il numero di pod dietro un singolo servizio inferiore a 10.000. Per scoprire di più, consulta la sezione Esporre le applicazioni utilizzando i servizi. |
Record DNS per servizio headless |
Il numero di record DNS per servizio headless è limitato sia per kube-dns sia per Cloud DNS. |
Mantieni il numero di record DNS per servizio headless al di sotto di 1000 per kube-dns e 3500/2000 (IPv4/IPv6) per Cloud DNS. |
Numero di tutti gli endpoint di servizio | Il numero di endpoint in tutti i servizi potrebbe raggiungere i limiti. Ciò potrebbe aumentare la latenza di programmazione o comportare l'impossibilità di programmare nuovi endpoint. |
Mantieni il numero di tutti gli endpoint in tutti i servizi al di sotto di 260.000. GKE Dataplane V2, che è il dataplane predefinito per GKE Autopilot, si basa su mappe eBPF attualmente limitate a 260.000 endpoint in tutti i servizi. |
Numero di oggetti Horizontal Pod Autoscaler per cluster |
Ogni Horizontal Pod Autoscaler (HPA) viene elaborato ogni 15 secondi. Più di 300 oggetti HPA possono causare un degrado lineare delle prestazioni. |
Mantieni il numero di oggetti HPA entro questo limite; in caso contrario, potresti riscontrare un degrado lineare della frequenza di elaborazione dell'HPA. Ad esempio,in GKE 1.22 con 2000 HPA, un singolo HPA verrà elaborato di nuovo ogni 1 minuto e 40 secondi. Per scoprire di più, consulta la sezione sulla scalabilità automatica in base all'utilizzo delle risorse e sulla scalabilità della scalabilità automatica orizzontale dei pod. |
Numero di pod per nodo | GKE ha un limite massimo di 256 pod per nodo. Si presume una media di massimo due container per pod. Se aumenti il numero di container per pod, questo limite potrebbe essere inferiore perché GKE alloca più risorse per container. |
Ti consigliamo di utilizzare nodi worker con almeno una vCPU per ogni 10 pod. Per scoprire di più, consulta l'articolo sull'upgrade manuale di un cluster o di un pool di nodi. |
Frequenza delle modifiche ai pod |
Kubernetes ha limiti interni che influiscono sulla frequenza di creazione o eliminazione dei pod (rotazione dei pod) in risposta alle richieste di scalabilità. Anche altri fattori, come l'eliminazione di un pod che fa parte di un servizio, possono influire su questo tasso di abbandono dei pod. Per i cluster con un massimo di 500 nodi, puoi prevedere una frequenza media di 20 pod creati al secondo e 20 pod eliminati al secondo. Per i cluster con più di 500 nodi, puoi aspettarti una frequenza media di 100 pod creati e 100 pod eliminati al secondo. |
Tieni conto del limite di frequenza di creazione ed eliminazione dei pod quando pianifichi come scalare i tuoi carichi di lavoro. I pod condividono lo stesso throughput di eliminazione con altri tipi di risorse (ad esempio EndpointSlices). Puoi ridurre il throughput di eliminazione quando definisci i pod come parte di un servizio. Per consentire a Cluster Autoscaler di rimuovere efficacemente i pod dai nodi sottoutilizzati, evita PodDisruptionBudgets troppo restrittivi e periodi di tolleranza per la terminazione lunghi. Anche le tolleranze con caratteri jolly sono sconsigliate, in quanto possono causare la pianificazione dei carichi di lavoro su nodi in fase di rimozione. |
Numero di orologi aperti | I nodi creano una sorveglianza per ogni Secret e ConfigMaps configurato per i pod. La quantità combinata di monitor creati da tutti i nodi potrebbe generare un carico considerevole sul piano di controllo del cluster. La presenza di più di 200.000 smartwatch per cluster potrebbe influire sul tempo di inizializzazione del cluster. Questo problema può causare frequenti riavvii del piano di controllo. |
Definisci nodi più grandi per ridurre la probabilità e la gravità dei problemi causati da un numero elevato di smartwatch. Una maggiore densità del pod (meno nodi di grandi dimensioni) potrebbe ridurre il numero di monitoraggi e attenuare la gravità del problema. Per saperne di più, consulta il confronto delle serie di macchine. |
Numero di secret per cluster se la crittografia dei secret a livello di applicazione è attivata | Un cluster deve decriptare tutti i secret durante l'avvio quando è attiva la crittografia dei secret a livello di applicazione. Se memorizzi più di 30.000 segreti, il cluster potrebbe diventare instabile durante l'avvio o gli upgrade, causando interruzioni del carico di lavoro. | Memorizza meno di 30.000 secret quando utilizzi la crittografia dei secret a livello di applicazione. Per saperne di più, consulta la sezione Crittografia dei secret a livello di applicazione. |
Larghezza di banda dei log per nodo |
Esiste un limite alla quantità massima di log inviati da ciascun nodo all'API Cloud Logging. Il limite predefinito varia da 100 a 500 Kbps a seconda del carico. Puoi aumentare il limite a 10 Mbps implementando una configurazione dell'agente Logging ad alta velocità in transito. Se superi questo limite, alcune voci di log potrebbero essere eliminate. |
Configura il logging in modo da rispettare i limiti predefiniti o configura un agente Logging ad alto throughput. Per scoprire di più, consulta Aumento del throughput dell'agente Logging. |
Limiti di Backup per GKE |
Puoi utilizzare Backup per GKE per eseguire il backup e il ripristino dei tuoi carichi di lavoro GKE. Il backup per GKE è soggetto a limiti che devi tenere presente quando definisci i tuoi piani di backup. |
Esamina i limiti di Backup for GKE. Se è possibile che il tuo carico di lavoro superi questi limiti, ti consigliamo di creare più piani di backup per partizionare il backup e rispettare i limiti. |
Limiti di Config Connector |
Puoi utilizzare Config Connector per gestire le risorse Google Cloud tramite Kubernetes. Config Connector ha due modalità di funzionamento:
|
Per informazioni dettagliate sui limiti di risorse, consulta le linee guida sulla scalabilità di Config Controller. Per informazioni sulla gestione di un numero elevato di risorse, consulta le best practice per Config Connector. |