Pianifica cluster GKE di grandi dimensioni


In questa pagina vengono descritte le best practice che puoi seguire quando pianificare e progettare cluster di grandi dimensioni.

Perché pianificare cluster GKE di grandi dimensioni

Ogni sistema informatico, compreso Kubernetes, ha dei limiti architettonici. Il superamento dei limiti potrebbe influire sulle prestazioni del cluster o negli stessi casi o causare tempi di inattività. Segui le best practice ed esegui le azioni consigliate per garantire che i tuoi 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ù semplice più economico e consente un migliore utilizzo delle risorse rispetto in più cluster. Tuttavia, in alcuni casi è necessario valutare la suddivisione dei in più cluster:

  • Consulta i casi d'uso multi-cluster per saperne di più sui requisiti generali e di 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 uno dei Quote di GKE. Ridurre qualsiasi rischio a il raggiungimento dei limiti GKE, riduce il rischio di tempi di inattività o problemi di affidabilità.

Se decidi di suddividere il cluster, utilizza Gestione della flotta per semplificare la gestione di un parco risorse multi-cluster.

Limiti e best practice

Assicurati che la tua architettura supporti GKE su larga scala di Google Cloud, rivedi i limiti seguenti e le relative best practice. Superato questi limiti possono causare il degrado delle prestazioni del cluster o problemi di affidabilità.

Queste best practice si applicano a qualsiasi cluster Kubernetes predefinito senza estensioni installato. Estendere i cluster Kubernetes con webhook definizioni di risorse personalizzate (CRD) ma può limitare la tua capacità di scalare il cluster.

La tabella seguente estende le Quote e limiti di GKE. Dovresti anche acquisire familiarità con il modello open source Limiti di Kubernetes per 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 Il valore massimo del database etcd è di 6 GB. Se gestisci un modello di progettazione un cluster con decine di migliaia di risorse, le tue 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 in stato non integro. Questo fa sì che il controllo dei cluster in modo che non risponda.

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 750 MB di istanze di pod e 750 MB di secret, ma non puoi creare 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 sotto la dimensione totale di tutti gli oggetti di ogni tipo archiviati in etcd 800 MB. Ciò è particolarmente applicabile ai cluster che utilizzano molti Secret, ConfigMap 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 utilizzando 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 utilizza smartwatch per monitorare eventuali modifiche al Servizio. Più grande è un cluster, più e i dati correlati al cambiamento 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 utilizzando 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 piano dati 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 degradazione 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 problema di 256 pod per nodo. Questo valore presuppone una media di due o meno di 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

Esiste un limite alla quantità massima di log inviati da ciascun nodo l'API Cloud Logging. Il limite predefinito varia tra 100 Kbps e 500 Kbps in base al 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.

  • 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 che una singola istanza di Config Connector deve gestire, di 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 dai 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 orologio 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 è necessario reinizializzare le connessioni dello smartwatch.
Il numero di 500 spazi dei nomi potrebbe essere ulteriormente limitato nei nuovi cluster GKE, poiché la CPU e la memoria disponibili per il piano di controllo del cluster si basano inizialmente per il numero di nodi nel cluster. Il cluster ha bisogno di tempo per regolare la CPU e la memoria disponibili in base all'utilizzo.

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

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

Passaggi successivi