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:
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 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 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:
|
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. 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. |