Preparazione del tuo cluster per il ridimensionamento automatico
Cloud privato virtuale Infrastruttura classica
Con il componente aggiuntivo " cluster-autoscaler ", è possibile ridimensionare automaticamente i pool di worker nel proprio cluster Red Hat® OpenShift® on IBM Cloud® classic o VPC, per aumentare o diminuire il numero di
nodi worker nel pool in base alle esigenze di dimensionamento dei carichi di lavoro pianificati. L'add-on cluster-autoscaler si basa sul progetto Kubernetes Cluster-Autoscaler. Per un elenco delle versioni aggiuntive supportate per versione cluster, vedi Versioni aggiuntive del cluster supportate.
Non puoi abilitare il cluster autoscaler sui pool di nodi di lavoro che utilizzano le riserve.
Capire l'autoscaling
-
Il cluster autoscaler esegue periodicamente la scansione del cluster per regolare il numero di nodi di lavoro all'interno dei pool di nodi di lavoro che gestisce in risposta alle tue richieste di risorse del carico di lavoro e alle eventuali impostazioni personalizzate da te configurate, ad esempio gli intervalli di scansione.
-
Ogni minuto, il cluster autoscaler verifica le seguenti situazioni.
- Pod in sospeso da ampliare: un pod è considerato in sospeso quando esistono risorse di calcolo insufficienti per pianificare il pod su un nodo di lavoro. Quando il cluster autoscaler rileva pod in sospeso, amplia i nodi di lavoro in modo uniforme tra le zone per soddisfare le richieste di risorse del carico di lavoro.
- Nodi di lavoro sottoutilizzati da ridurre: per impostazione predefinita, i nodi di lavoro eseguiti con meno del 50% delle risorse di calcolo totali richieste per 10 minuti o più e che possono ripianificare i loro carichi di lavoro su altri nodi di lavoro sono considerati sottoutilizzati. Se il cluster autoscaler rileva nodi di lavoro sottoutilizzati, riduce i tuoi nodi di lavoro uno alla volta in modo che tu disponga solo delle risorse di calcolo di cui hai bisogno. Se lo desideri, puoi personalizzare la soglia di utilizzo della riduzione del 50% per 10 minuti.
-
La scansione e l'ampliamento e riduzione avvengono a intervalli regolari nel tempo e, a seconda del numero di nodi di lavoro, queste operazioni potrebbero richiedere più tempo, ad esempio 30 minuti.
-
L'autoscaler del cluster regola il numero dei nodi di lavoro tenendo conto delle richieste di risorse definite dall'utente per le proprie distribuzioni, non dell'utilizzo effettivo dei nodi di lavoro. Se i tuoi pod e le tue distribuzioni non richiedono quantità adeguate di risorse, devi regolare i relativi file di configurazione.
-
Il cluster autoscaler non può regolarli per te. Inoltre, tieni presente che i nodi di lavoro utilizzano alcune risorse di calcolo per le funzionalità di base del cluster, i componenti aggiuntivi predefiniti e personalizzati e le riserve di risorse.
-
In generale, il cluster autoscaler calcola il numero di nodi di lavoro di cui il tuo cluster ha bisogno per eseguire il proprio carico di lavoro. L'ampliamento o la riduzione del cluster dipendono da diversi fattori, compresi i seguenti.
- La dimensione minima e massima del nodo di lavoro per zona da te impostata.
- Le richieste di risorse per i pod in sospeso e alcuni metadati associati al carico di lavoro, quali l’anti-affinità, le etichette per collocare i pod solo su determinati “flavors” o i budget di interruzione dei pod.
- I pool di worker gestiti dall'autoscaler del cluster, potenzialmente distribuiti tra diverse zone in un cluster multizona.
-
Le versioni precedenti del cluster autoscaler si basavano solo sui nodi worker esistenti per la programmazione delle simulazioni. Ad esempio, se un pool di worker veniva ridotto a 0 nodi, l'autoscaler non disponeva di informazioni sulla capacità o sulle etichette di quel pool, il che significava che non poteva riportare il pool di worker alla dimensione precedente. Di conseguenza, la scala a zero non era supportata.
-
A partire dalla versione 2.0.0, l'autoscaler crea un nodo modello per ogni pool di lavoratori. Questo modello viene utilizzato per fornire un modello della CPU allocabile, della memoria, delle etichette e dei taint di un nuovo nodo nel pool.
-
Inoltre, nella versione 2.0.0, sono disponibili due nuove impostazioni opzionali nel
iks-ca-configmapnelkube-systemnamespace:OSReservedMemoryGieOSReservedCPUMili.- Questi valori rappresentano la quantità di CPU e memoria che il sistema operativo riserva su ciascun nodo di lavoro.
- L'utilizzo del kernel non può essere regolato utilizzando questi valori, poiché sono già definiti.
- L'autoscaler sottrae questi valori dalla capacità del nodo quando calcola le risorse allocabili per la pianificazione delle simulazioni.
- Per impostazione predefinita, l'autoscaler utilizza i valori consigliati riservati dal sistema operativo, ma gli utenti possono sovrascriverli per regolare la quantità di capacità che può essere pianificata.
Per ulteriori informazioni, consulta le Domande frequentiKubernetes su Cluster Autoscaler relative a Come funziona lo scale-up? e Come funziona lo scale-down?.
Quali sono le migliori pratiche per l'autoscaling?
- Ottieni il massimo dal cluster autoscaler utilizzando le seguenti strategie per il tuo nodo di lavoro e strategie di distribuzione del carico di lavoro. Per ulteriori informazioni, consultare il sito Kubernetes Domande frequenti su Cluster Autoscaler.
- Prova il cluster autoscaler con alcuni carichi di lavoro di test per farti un'idea di come ridimensionare e ridurre il lavoro, potresti voler configurare e qualsiasi altro aspetto che potresti desiderare, come i nodi di lavoro overprovisioning o le applicazioni di limitazione.
- Quindi ripulisci l'ambiente di test ed effettua una pianificazione in modo da includere i valori personalizzati e le impostazioni aggiuntive con una nuova installazione del cluster autoscaler.
Posso modificare il funzionamento delle operazioni di aumento e riduzione della scala?
Sì, è possibile personalizzare le impostazioni o utilizzare altre risorse di Kubernetes per modificare il funzionamento del ridimensionamento verso l'alto e verso il basso.
-
Per lo scale up, è possibile personalizzare i valori dell'autoscaler del cluster ConfigMap come
scanInterval,expander,skipNodes, omaxNodeProvisionTime. Rivedi le modalità di esecuzione di un provisioning in eccesso dei nodi di lavoro in modo da poter ampliare i nodi di lavoro prima che un pool di nodi di lavori esaurisca le risorse. Puoi anche configurare PDB (pod disruption budget) Kubernetes e limiti di priorità dei pod per influire sul funzionamento dell'ampliamento dei lavori. -
Per la riduzione, personalizzare i valori dell'autoscaler del cluster ConfigMap come
scaleDownUnneededTime,scaleDownDelayAfterAdd,scaleDownDelayAfterDelete, oscaleDownUtilizationThreshold.
Posso aumentare la dimensione minima per zona in modo da innescare un aumento della capacità del mio cluster fino a tale dimensione?
No, l'impostazione di una dimensione minima (minSize) non attiva automaticamente un ampliamento, La " minSize " è una soglia che impedisce all'autoscaler del cluster di ridimensionare il numero di nodi di
lavoro al di sotto di un determinato valore per zona.
- Se il tuo cluster non ha ancora tale numero per ogni zona, il cluster autoscaler non esegue alcun ampliamento finché non hai richieste di risorse del carico di lavoro che richiedono ulteriori risorse. Ad esempio, se hai un pool di nodi di
lavoro con un singolo nodo di lavoro per ogni tre zone (tre nodi di lavoro in totale) e imposti la dimensione minima (
minSize) su4per ogni zona, il cluster autoscaler non esegue immediatamente il provisioning di tre nodi di lavoro aggiuntivi per ogni zona (12 nodi di lavoro in totale). L'ampliamento viene invece attivato dalle richieste di risorse. - Se crei un carico di lavoro che richiede le risorse di 15 nodi di lavoro, il cluster autoscaler amplia il pool di nodi di lavoro per soddisfare questa richiesta. Ora, l'opzione "
minSize" fa sì che l'autoscaler del cluster non riduca il numero di nodi di lavoro a meno di quattro per zona, anche se si rimuove il carico di lavoro che richiede tale numero.
In che modo questo comportamento differisce dai pool di worker che non sono gestiti dall'autoscaler del cluster?
Quando crei un pool di nodi di lavoro, specifichi il numero di nodi di lavoro per zona inclusi nel pool. Il pool di nodi di lavoro mantiene quel numero di nodi di lavoro finché non lo ridimensioni o ribilanci. Il pool di nodi di lavoro non aggiunge o rimuove automaticamente i nodi di lavoro. Se hai più pod di quanti possano essere pianificati, i pod rimangono in sospeso fino a quando non ridimensioni il pool di nodi di lavoro. Quando abiliti il cluster autoscaler per un pool di nodi di lavoro, i nodi di lavoro vengono ampliati o ridotti in risposta alle tue impostazioni delle specifiche del pod e alle tue richieste di risorse. Non hai bisogno di ridimensionare o ribilanciare manualmente il pool di nodi di lavoro.
Come funziona l'autoscaling delle GPU?
L'autoscaling dei nodi worker GPU è supportato solo con l'autoscaler cluster versione 1.2.4 e successive e solo con i flavor dei nodi worker NVIDIA GPU. Lo scale up si verifica quando un pod passa in stato di attesa a causa della scarsità
di risorse della GPU. L'autoscaler scala quindi il cluster aggiungendo altri nodi. La riduzione avviene quando l'utilizzo scende al di sotto del valore configurato scaleDownGPUUtilizationThreshold. In questo caso, il nodo viene
considerato per essere ridimensionato.
Posso ridimensionare automaticamente più pool di nodi di lavoro alla volta?
Sì, dopo aver installato l'autoscaler del cluster, è possibile scegliere quali pool di worker all'interno del cluster sottoporre ad autoscaling nella pagina " ConfigMap ". È possibile eseguire un solo autoscaler per cluster. Creare e abilitare il ridimensionamento automatico sui pool di worker diversi da quello predefinito, poiché il pool di worker predefinito contiene componenti di sistema che potrebbero impedire il ridimensionamento automatico verso il basso.
Come posso accertarmi che il cluster autoscaler risponda alle risorse di cui ha bisogno la mia applicazione?
L'autoscaler del cluster ridimensiona il cluster in risposta alle richieste di risorse del carico di lavoro. Pertanto, specifica le richieste di risorse per tutte le tue distribuzioni, poiché sono proprio queste richieste che il sistema di scalabilità automatica del cluster utilizza per calcolare il numero di nodi di lavoro necessari per l'esecuzione del carico di lavoro. Tieni presente che il ridimensionamento automatico si basa sull'utilizzo del calcolo richiesto dalle tue configurazioni del carico di lavoro e non prende in considerazione altri fattori come i costi della macchina.
Posso ridimensionare un pool di nodi di lavoro fino a zero (0) nodi?
Sì. A partire dalla versione dell'add-on Cluster 2.0.0 Autoscaler, è possibile ridimensionare specifici pool di worker fino a zero nodi.
- Perché è utile?
- Il ridimensionamento a zero consente di risparmiare sui costi quando non sono in esecuzione carichi di lavoro. L'autoscaler ripristina automaticamente i nodi quando necessario.
- Come funziona?
- Quando non ci sono pod da eseguire, l'autoscaler può ridurre il pool di worker a 0 nodi. Se i nuovi pod necessitano di risorse, l'autoscaler ridimensiona automaticamente il pool.
- Cosa devi fare?
-
- Controlla la versione del tuo componente aggiuntivo e assicurati di utilizzare v2.0.0 o versioni successive.
-
- Imposta
minSize = 0per il pool di lavoratori nella configurazione dell'autoscaler. Se hai abilitato gli ALB pubblici, impostaminSize = 2per zona per garantire l'alta disponibilità.
- Imposta
- Qual è il requisito di quorum del cluster?
- Si noti che l'intero cluster non può essere ridotto a zero. Un numero minimo di nodi deve rimanere attivo per mantenere il cluster in buono stato e mantenere etcd il quorum. Se questo quorum è soddisfatto, è possibile ridurre a zero gli altri pool di lavoratori.
Posso ottimizzare le mie distribuzioni per il ridimensionamento automatico?
Sì, puoi aggiungere varie funzioni Kubernetes alla tua distribuzione per adattare il modo in cui il cluster autoscaler considera le tue richieste di risorsa per il ridimensionamento.
- Crea il tuo pool di nodi di lavoro per consentire solo le distribuzioni o i pod con la tolleranza corrispondente da distribuire al tuo pool di nodi di lavoro.
- Aggiungi un'etichetta al tuo pool di nodi di lavoro diverso dal pool di nodi di lavoro predefinito. Questa etichetta viene utilizzata nella tua configurazione di distribuzione
per specificare
nodeAffinityonodeSelectorche limita i carichi di lavoro che possono essere distribuiti sui nodi di lavoro nel pool di nodi di lavoro etichettato. - Utilizza i limiti di interruzione dei pod per evitare riprogrammazioni o eliminazioni improvvise dei tuoi pod.
- Se utilizzi la priorità dei pod, puoi modificare la soglia di priorità per stabilire quali tipi di priorità attivino il potenziamento. Per impostazione predefinita, il limite di priorità è zero (
0).
Posso utilizzare taint e tolleranze con i pool di nodi di lavoro ridimensionati automaticamente?
Sì, ma assicurati di applicare i taint a livello di pool di worker, in modo che tutti i nodi worker esistenti e futuri ricevano lo stesso taint. A questo punto, è necessario includere una tolleranza corrispondente nella configurazione dei carichi di lavoro, in modo che questi ultimi vengano pianificati nel pool di worker con scalabilità automatica che presenta il taint corrispondente. Tieni presente che, se distribuisci un carico di lavoro non tollerato dal pool di worker contrassegnati, i nodi worker non vengono presi in considerazione per lo scale-up e potrebbero essere richiesti ulteriori nodi worker anche se il cluster dispone di capacità sufficiente. Tuttavia, il gruppo di lavoratori compromessi viene comunque identificato come sottoutilizzato se la percentuale di risorse utilizzate è inferiore alla soglia (per impostazione predefinita, il 50%) e, pertanto, viene preso in considerazione per una riduzione della scala.
Preparazione dei cluster per l'autoscaling
Prima di installare il componente aggiuntivo di autoscaling per cluster di IBM Cloud, è possibile configurare il cluster per prepararlo all'autoscaling.
Il componente aggiuntivo del cluster autoscaler non è supportato per i nodi di lavoro baremetal.
-
Prima di iniziare, Installa la CLI e i plug-in richiesti.
- CLI IBM Cloud (
ibmcloud) - Plugin IBM Cloud Kubernetes Service (
ibmcloud oc) - Plugin IBM Cloud Container Registry (
ibmcloud cr) - Kubernetes (
kubectl)
- CLI IBM Cloud (
-
Conferma che le tue credenziali di IBM Cloud Identity and Access Management siano memorizzate nel cluster. Il cluster autoscaler utilizza questo segreto per autenticare le credenziali. Se il segreto manca, crealo reimpostando le credenziali.
oc get secrets -n kube-system | grep storage-secret-store -
Pianifica di ridimensionare automaticamente un pool di nodi di lavoro diverso da quello di
default, perché il pool di nodi di lavorodefaultha dei componenti di sistema che possono impedire la riduzione automatica. Inserisci un'etichetta per il pool di worker in modo da poter impostare l'affinità dei nodi per i carichi di lavoro che desideri distribuire nel pool di worker in cui è abilitato il ridimensionamento automatico. Ad esempio, la tua etichetta potrebbe essereapp: nginx. Scegli tra le seguenti opzioni:- Crea un pool di nodi di lavoro VPC o classico diverso da quello di
defaultcon l'etichetta che vuoi utilizzare con i carichi di lavoro da eseguire sul pool di nodi di lavoro ridimensionato automaticamente. - Aggiungi l'etichetta a un pool di nodi di lavoro esistente diverso da quello di
default.
- Crea un pool di nodi di lavoro VPC o classico diverso da quello di
-
Conferma che il tuo pool di nodi di lavoro abbia le etichette necessarie per il ridimensionamento automatico. Nell'output, vengono visualizzate l'etichetta
ibm-cloud.kubernetes.io/worker-pool-idrichiesta e l'etichetta precedentemente creata per l'affinità del nodo. Se non vedi queste etichette, aggiungi un pool di nodi di lavoro, quindi aggiungi la tua etichetta per l'affinità del nodo.ibmcloud oc worker-pool get --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID | grep LabelsEsempio di output di un pool di worker con l'etichetta.
Labels: ibm-cloud.kubernetes.io/worker-pool-id=a1aa111111b22b22cc3c3cc444444d44-4d555e5 -
Applica un taint ai pool di nodi di lavoro che vuoi ridimensionare automaticamente in modo che il pool di nodi di lavoro non accetti i carichi di lavoro, ad eccezione di quelli che desideri eseguire nel pool di nodi di lavoro ridimensionato automaticamente. Per ulteriori informazioni sui "taints" e sulle "tolerations", consulta il documento " Documentazione di Community Kubernetes". Come esempio, è possibile impostare un taint di
use=autoscale:NoExecute. In questo esempio, il taintNoExecuteevita i pod che non hanno la tolleranza corrispondente a questo taint.
Passi successivi
Dopo aver preparato il cluster, installare il componente aggiuntivo del cluster autoscaler.