Pianifica cluster GKE di grandi dimensioni


In questa pagina vengono descritte le best practice che puoi seguire quando pianifichi e progetti cluster di dimensioni molto grandi.

Perché pianificare cluster GKE di grandi dimensioni

Ogni sistema informatico, compreso Kubernetes, ha dei limiti architettonici. Il superamento dei limiti può influire sulle prestazioni del cluster o, negli stessi casi, causare tempi di inattività. Segui le best practice ed esegui le azioni consigliate per assicurarti che i cluster eseguano i carichi di lavoro in modo affidabile su larga scala.

Best practice per la suddivisione dei carichi di lavoro tra più cluster

Puoi eseguire i tuoi carichi di lavoro su un unico cluster di grandi dimensioni. Questo approccio è più facile da gestire, più conveniente e offre un migliore utilizzo delle risorse rispetto a più cluster. Tuttavia, in alcuni casi è necessario suddividere il carico di lavoro in più cluster:

  • Esamina i casi d'uso multi-cluster per saperne di più sui requisiti e sugli scenari generali 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 di GKE. La riduzione dei rischi per il raggiungimento dei 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 cluster GKE su larga scala, rivedi i limiti seguenti e le relative best practice. Il superamento di questi limiti può causare il peggioramento delle prestazioni del cluster o i problemi di affidabilità.

Queste best practice si applicano a qualsiasi cluster Kubernetes predefinito in cui non sono installate estensioni. L'estensione dei cluster Kubernetes con webhook o definizioni di risorse personalizzate (CRD) è comune, ma può limitare la tua capacità di scalare il cluster.

La seguente tabella estende le quote e i limiti di GKE principali. Dovresti anche acquisire familiarità con i limiti di Kubernetes open source per i cluster su larga scala.

I requisiti di versione di GKE menzionati nella tabella si applicano sia ai nodi sia al piano di controllo.

Limite GKE Descrizione Best practice
Dimensione del database etcd La dimensione massima del database etcd è 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 per i cluster nella console Google Cloud. Se superi questo limite, GKE potrebbe contrassegnare le tue istanze etcd come non integre. Di conseguenza, il piano di controllo del cluster non risponde.

Se superi questo limite, contatta l'assistenza Google Cloud.

Dimensione totale 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, è possibile che l'inizializzazione dei controller Kubernetes o dei controller personalizzati non vada a buon fine e che si verifichino interruzioni.

Mantieni le dimensioni totali di tutti gli oggetti di ogni tipo archiviati in etcd al di sotto di 800 MB. Ciò è 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 Le prestazioni degli iptables utilizzati da kube-proxy peggiorano nei casi seguenti:
  • Troppi servizi.
  • Il numero di backend dietro un servizio è elevato.

Questo limite viene eliminato quando è abilitato GKE Dataplane V2.

Mantieni il numero di servizi nel cluster al di sotto di 10.000.

Per scoprire di più, consulta Esposizione delle applicazioni tramite i servizi.

Numero di servizi per spazio dei nomi Il numero di variabili di ambiente generate per i servizi potrebbe superare i limiti di shell. Questo 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 la compilazione di queste variabili di ambiente. Consulta la documentazione per sapere come impostare enableServiceLinks in PodSpec su false.

Per scoprire di più, consulta Esposizione delle 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 watch per monitorare qualsiasi modifica al servizio. Più grande è un cluster, maggiore è il numero di dati correlati alle modifiche elaborati dall'agente. Ciò è particolarmente visibile nei cluster con più di 500 nodi.

Le informazioni sugli endpoint sono suddivise tra EndpointSlices separati. Questa suddivisione riduce la quantità di dati trasferiti a ogni modifica.

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 l'articolo sull'esposizione delle applicazioni tramite i servizi.

Numero di pod dietro un singolo servizio per i cluster in cui è abilitato GKE Dataplane V2

GKE Dataplane V2 contiene limiti sul numero di pod esposti da un singolo servizio.

Lo stesso limite è applicabile 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 Esposizione delle applicazioni tramite i servizi.

Record DNS per servizio headless

Il numero di record DNS per servizio headless è limitato sia per kube-dns che per Cloud DNS.

Mantieni il numero di record DNS per servizio headless inferiore a 1000 per kube-dns e a 3500/2000 (IPv4/IPv6) per Cloud DNS.

Numero di tutti gli endpoint di servizio Il numero di endpoint in tutti i Servizi può raggiungere i limiti. Ciò potrebbe aumentare la latenza di programmazione o determinare l'impossibilità di programmare nuovi endpoint.

Mantenere al di sotto di 64.000 il numero di tutti gli endpoint in tutti i servizi.

GKE Dataplane V2, che è il Dataplane predefinito per GKE, si basa su mappe eBPF che attualmente sono limitate a 64.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 peggioramento lineare delle prestazioni.

Mantieni il numero di oggetti HPA entro questo limite, altrimenti potresti riscontrare una riduzione lineare della frequenza dell'elaborazione HPA. Ad esempio,in GKE 1.22 con 2000 HPA, verrà rielaborato un singolo HPA ogni 1 minuto e 40 secondi.

Per saperne di più, consulta Scalabilità automatica basata sull'utilizzo delle risorse e scalabilità automatica orizzontale dei pod.

Numero di pod per nodo GKE ha un limite fisso di 256 pod per nodo. Questo presuppone che ci siano in media due o meno 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 saperne di più, consulta Eseguire l'upgrade manuale di un cluster o di un pool di nodi.

Percentuale di modifiche ai pod

Kubernetes prevede limiti interni che influiscono sulla frequenza di creazione o eliminazione di pod (abbandono 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 aspettarti una frequenza media di 20 pod creati al secondo e 20 pod eliminati al secondo.

Per i cluster più grandi di 500 nodi, puoi aspettarti una frequenza media di 100 pod creati al secondo e 100 pod eliminati al secondo.

Tieni in considerazione il limite di frequenza di creazione ed eliminazione dei pod quando pianifichi la scalabilità dei tuoi carichi di lavoro.

I pod condividono la stessa velocità effettiva di eliminazione con altri tipi di risorse (ad esempio EndpointSlices). Puoi ridurre la velocità effettiva di eliminazione quando definisci i pod come parte di un servizio.

Per consentire al gestore della scalabilità automatica del cluster di rimuovere in modo efficace i pod dai nodi sottoutilizzati, evita PodDisruptionBudgets troppo restrittivi e periodi di tolleranza di chiusura lunghi.

Anche le tolleranze con caratteri jolly sono sconsigliate, in quanto possono causare la pianificazione di carichi di lavoro su nodi che stanno per essere rimossi.

Numero di smartwatch aperti

I nodi creano un watch per ogni Secret e ConfigMaps che configuri per i pod. La quantità combinata di smartwatch creati da tutti i nodi può generare un carico sostanziale sul piano di controllo del cluster.

Avere più di 200.000 smartwatch per cluster potrebbe influire sul tempo di inizializzazione del cluster. Questo problema può causare il riavvio frequente del piano di controllo.

Definire nodi più grandi per ridurre la probabilità e la gravità dei problemi causati da un numero elevato di smartwatch. Una maggiore densità dei pod (meno nodi di grandi dimensioni) potrebbe ridurre il numero di smartwatch e mitigare la gravità del problema.

Per scoprire di più, consulta il confronto di serie di macchine.

Numero di secret per cluster se è abilitata la crittografia dei secret a livello di applicazione Un cluster deve decriptare tutti i secret durante l'avvio, quando è abilitata la crittografia dei secret a livello di applicazione. Se archivi più di 30.000 secret, il cluster potrebbe diventare instabile durante l'avvio o gli upgrade, causando interruzioni dei carichi di lavoro.

Archivia meno di 30.000 secret quando si utilizza la crittografia dei secret a livello di applicazione.

Per saperne di più, consulta l'articolo sulla crittografia dei secret a livello di applicazione.

Larghezza di banda del log per nodo

È previsto un limite alla quantità massima di log inviati da ciascun nodo all'API Cloud Logging. Il limite predefinito varia tra 100 Kbps e 500 Kbps, a seconda del carico. Puoi aumentare il limite a 10 Mbps eseguendo il deployment di una configurazione di agente Logging a velocità effettiva elevata. Superare questo limite può causare l'eliminazione delle voci di log.

Configura il tuo logging in modo che rimanga entro i limiti predefiniti o configura un agente Logging a velocità effettiva elevata.

Per saperne di più, consulta Aumento della velocità effettiva dell'agente Logging.

Limiti di Backup per GKE

Puoi utilizzare Backup per GKE per eseguire il backup e il ripristino dei carichi di lavoro GKE.

Backup per GKE è soggetto a limiti che devi tenere a mente al momento di definire i piani di backup.

Esamina i limiti di Backup per GKE.

Se il carico di lavoro può superare questi limiti, consigliamo di creare più piani di backup per partizionare il backup e rimanere entro i limiti.

Limiti di Config Connector

Puoi utilizzare Config Connector per gestire le risorse Google Cloud tramite Kubernetes. Config Connector prevede due modalità di funzionamento:

  • Modalità cluster, in cui è presente una singola istanza di Config Connector per cluster GKE.

    In questa modalità, una singola istanza di Config Connector carica tutte le risorse.

  • Modalità Spazio dei nomi, in cui ogni spazio dei nomi all'interno di un cluster ha un'istanza Config Connector separata.

    In questa modalità, puoi eseguire il partizionamento delle risorse gestite tramite gli spazi dei nomi. Questa configurazione riduce la quantità di risorse necessarie a una singola istanza di Config Connector, diminuendo l'utilizzo di CPU e memoria.

Ogni modalità ha caratteristiche e limitazioni di scalabilità diverse.

Ogni istanza di Config Connector ha una richiesta di CPU di 0,1 e un limite di memoria di 512 MB. Di conseguenza, non garantisce scalabilità su una grande quantità di risorse gestite. Ti consigliamo di non avere più di 25.000 risorse Google Cloud per singola istanza di Config Connector. Questa limitazione è solo a scopo di riferimento perché la quantità di memoria utilizzata dipende dal tipo di risorsa e da casi d'uso specifici.

Se gestisci un numero maggiore di risorse gestite, consigliamo di utilizzare la modalità spazio dei nomi per limitare il numero di risorse gestite da ogni istanza di Config Connector.

Ti consigliamo di utilizzare fino a 500 spazi dei nomi con Config Connector in modalità spazio dei nomi. Ogni istanza di Config Connector apre molte connessioni watch a kube-apiserver. Un numero elevato di queste istanze può sovraccaricare il piano di controllo del cluster GKE, soprattutto durante gli upgrade del piano di controllo, quando le connessioni dell'orologio devono essere reinizializzate.
Il numero di 500 spazi dei nomi potrebbe essere ulteriormente limitato nei nuovi cluster GKE, perché la CPU e la memoria disponibili per il piano di controllo del cluster si basano inizialmente sul numero di nodi nel cluster. Il cluster ha bisogno di tempo per regolare la CPU e la memoria disponibile in base all'utilizzo.

Consigliamo di utilizzare più cluster GKE per gestire il numero di risorse che non è stato possibile dividere per rientrare nei limiti specificati sopra.

Per ulteriori dettagli, consulta le linee guida sulla scalabilità di Config Controller.

Che cosa succede dopo?