Configurazione del ridimensionamento automatico per i tuoi pool di nodi di lavoro
Aggiorna la mappa di configurazione del cluster autoscaler per abilitare il ridimensionamento automatico dei nodi di lavoro nei tuoi pool di nodi di lavoro in base ai valori minimi e massimi da te impostati.
Dopo aver modificato la configmap per abilitare l'autoscaling su un pool di worker, l'autoscaler del cluster ridimensiona il cluster in risposta alle richieste del carico di lavoro. Ciò significa che non è possibile ridimensionare o riequilibrare i pool di lavoratori. 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. In seguito, se vuoi rimuovere il cluster autoscaler, devi prima disabilitare ogni pool di nodi di lavoro nella mappa di configurazione.
A partire dalla versione 1.2.4 l'opzione maxEmptyBulkDelete non è più supportata. Rimuovere questa opzione dalla mappa di configurazione eseguendo il comando kubectl edit configmap iks-ca-configmap -n kube-system e cancellando
l'opzione. In sostituzione, è possibile utilizzare l'opzione maxScaleDownParallelism, aggiunta nella versione 1.2.4. Per ulteriori informazioni, vedere il riferimento a configmap.
Prima di iniziare
- Installa il componente aggiuntivo cluster autoscaler.
- Accedi al tuo cluster Red Hat OpenShift.
-
Modifica il file YAML della mappa di configurazione del cluster autoscaler.
oc edit cm iks-ca-configmap -n kube-system -o yamlOutput di esempio
apiVersion: v1 data: workerPoolsConfig.json: | [ {"name": "<worker_pool>","minSize": 1,"maxSize": 2,"enabled":false} ] kind: ConfigMap -
Modifica la mappa di configurazione con i parametri per definire il modo in cui il cluster autoscaler ridimensiona il tuo pool di nodi di lavoro del cluster. Nota: a meno che non disabiliti tutti gli ALB (application load balancer) pubblici in ciascuna zona del tuo cluster standard, devi modificare la
minSizeimpostandola su2per ogni zona in modo che i pod ALB possano essere diffusi per l'alta disponibilità."name": "default": Sostituisci ""default"" con il nome o l'ID del pool di worker che desideri ridimensionare. Per visualizzare l'elenco dei pool di worker, eseguire il comandoibmcloud oc worker-pool ls --cluster CLUSTER_NAME_OR_ID``. Per gestire più di un pool di nodi di lavoro, copia la riga JSON in una riga separata da virgole, come nel seguente esempio.
[ {"name": "default","minSize": 1,"maxSize": 2,"enabled":false}, {"name": "Pool2","minSize": 2,"maxSize": 5,"enabled":true} ] ``` Il cluster autoscaler può ridimensionare solo i pool di nodi di lavoro che hanno l'etichetta `ibm-cloud.kubernetes.io/worker-pool-id`. Per verificare se il tuo pool di worker dispone dell'etichetta richiesta, esegui il comando `ibmcloud oc worker-pool get --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID | grep Labels`. Se il tuo pool di worker non dispone dell'etichetta richiesta, aggiungi un nuovo pool di worker e utilizzalo con l'autoscaler del cluster. {: note} - `"minSize": 1`: Specificare il numero minimo di nodi worker per zona. L'impostazione di una `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`) su `4` per 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. Per ulteriori informazioni, consultare la [documentazione di Kubernetes](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#when-does-cluster-autoscaler-change-the-size-of-a-cluster){: external}. - `"maxSize": 2`: Specificare il numero massimo di nodi di lavoro per zona fino al quale l'autoscaler del cluster può espandere il pool di nodi di lavoro. Il valore deve essere uguale o maggiore del valore che hai impostato per `minSize`. - `"enabled": false`: Impostare il valore su `true` affinché l'autoscaler del cluster gestisca il ridimensionamento del pool di worker. Imposta il valore su `false` per fare in modo che il cluster autoscaler non ridimensioni il pool di nodi di lavoro. In seguito, se vuoi [rimuovere il cluster autoscaler](/docs/openshift?topic=openshift-cluster-scaling-install-addon&interface=ui#autoscaler-remove-console), devi prima disabilitare ogni pool di nodi di lavoro nella mappa di configurazione. -
Salva il file di configurazione.
-
Ottieni il pod del cluster autoscaler.
oc get pods -n kube-system -
Esamina la sezione
Eventsdel pod del cluster autoscaler e controlla l'eventoConfigUpdatedper verificare che la mappa di configurazione sia stata aggiornata correttamente. Il messaggio relativo all'evento per il tuo ConfigMap ha il seguente formato:minSize:maxSize:PoolName:<SUCCESS|FAILED>:error message.oc describe pod -n kube-system <cluster_autoscaler_pod>Output di esempio
Name: ibm-iks-cluster-autoscaler-857c4d9d54-gwvc6 Namespace: kube-system ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ConfigUpdated 3m ibm-iks-cluster-autoscaler-857c4d9d54-gwvc6 {"1:3:default":"SUCCESS:"}
Se si abilita un pool di worker per l'autoscaling e successivamente si aggiunge una zona a tale pool, è necessario riavviare il pod dell'autoscaler del cluster affinché rilevi questa modifica: oc delete pod -n kube-system <cluster_autoscaler_pod>.
Personalizzazione dei valori di configurazione dell'autoscaler del cluster
Personalizza le impostazioni del cluster autoscaler come la quantità di tempo che deve attendere prima di ampliare o ridurre i nodi di lavoro.
-
Abilita il componente aggiuntivo.
Quando si modifica un parametro ConfigMap diverso dal pool di lavoratori
minSize,maxSize, o se si abilita o disabilita un pool di lavoratori, i pod del cluster autoscaler vengono riavviati.
-
Controlla i parametri cluster autoscaler ConfigMap.
-
Scarica il componente aggiuntivo cluster autoscaler ConfigMap ed esamina i parametri.
oc get cm iks-ca-configmap -n kube-system -o yaml > configmap.yaml -
Aprire il file
configmap.yamle aggiornare le impostazioni che si desidera modificare. -
Riapplicare la configmap del componente aggiuntivo del cluster autoscaler.
oc apply -f configmap.yaml -
Verifica che i pod siano riavviati correttamente.
oc get pods -n kube-system | grep autoscaler
Riferimento configmap del cluster autoscaler
balancingIgnoreLabel- La chiave di etichetta nodo da ignorare durante il bilanciamento della zona. Oltre alle etichette del nodo fisso, l'autoscaler può ignorare ulteriori 5 etichette del nodo durante il bilanciamento della zona. Ad esempio,
balancingIgnoreLabel1:label1,balancingIgnoreLabel2: custom-label2. coresTotal- Il numero minimo e massimo di core nel cluster. Cluster autoscaler non ridimensiona il cluster oltre questi numeri. Il valore predefinito è
0:320000. enforceNodeGroupMinSize- Impostare questo valore su
trueper ridimensionare il pool di nodi di lavoro alla dimensione minima configurata, se necessario. Il valore predefinito èfalse. expander- Come l'autoscaler del cluster determina quale pool di worker scalare in presenza di più pool di worker. Il valore predefinito è
random. random: seleziona in modo casuale tramost-podseleast-waste.most-pods: seleziona il pool di nodi di lavoro in grado di pianificare la maggior parte dei pod durante l'ampliamento. Scegli questo metodo se utilizzinodeSelectorper assicurarti che i pod vengano posizionati su specifici nodi di lavoro.least-waste: seleziona il pool di nodi di lavoro che ha meno CPU inutilizzata dopo l'ampliamento. Se due pool di nodi di lavoro utilizzano la stessa quantità di risorse CPU dopo l'ampliamento, viene selezionato il pool di nodi di lavoro con meno memoria inutilizzata.expendablePodsPriorityCutoff- I pod con priorità sotto il limite sono sacrificabili. Possono essere rimossi senza considerazione durante il ridimensionamento e non causano il ridimensionamento. I pod
PodPriorityimpostati su null non sono sacrificabili. Il valore predefinito è-10. ignoreDaemonSetsUtilization- Ignora i pod dell'autoscaler DaemonSet quando calcola l'utilizzo delle risorse per lo scale-down. Il valore predefinito è
false. imagePullPolicy- Quando scaricare l'immagine " Docker ". Il valore predefinito è
Always. Always: estrae l'immagine ogni volta che il pod viene avviato.IfNotPresent: Estrae l'immagine solo se non è già presente localmente. \n -Neverassume che l'immagine esista localmente e non la estrae mai.kubeClientBurst- Burst consentito per il client Kubernetes. Il valore predefinito è
300. kubeClientQPS- Il valore QPS per il client Kubernetes. Quante query vengono accettate una volta esaurito il burst. Il valore predefinito è
5.0. livenessProbeFailureThreshold- Il numero di volte in cui l'
kubelete riprova un test di integrità dopo l'avvio del pod e il fallimento del primo test di integrità. Una volta raggiunta la soglia di errore, il contenitore viene riavviato e il pod viene contrassegnato comeUnreadyper un probe di disponibilità, se applicabile. Il valore predefinito è3. livenessProbePeriodSeconds- L'intervallo, espresso in secondi, con cui l'
kubelete esegue un test di attività. Il valore predefinito è600. livenessProbeTimeoutSeconds- Il tempo, espresso in secondi, trascorso il quale scade il timeout della sonda di integrità. Il valore predefinito è
10. logLevel- Il livello di log per l'autoscaler. I livelli di registrazione sono
info,debug,warning,error. Il valore predefinito èinfo. maxBulkSoftTaintCount- Il numero massimo di nodi di lavoro che possono essere contrassegnati o declassati contemporaneamente tramite l'
PreferNoSchedule. Per disabilitare questa funzione, imposta il valore su0. Il valore predefinito è0. maxBulkSoftTaintTime- Il tempo massimo durante il quale i nodi di lavoro possono essere contemporaneamente contrassegnati o rimossi dal contrassegno con "
PreferNoSchedule". Il valore predefinito è10m. maxDrainParallelism- Numero massimo di nodi che devono ancora essere svuotati e che possono essere svuotati ed eliminati in parallelo. Il valore predefinito è
1. maxEmptyBulkDelete- Supportato solo nelle versioni precedenti a 1.2.4 Numero massimo di nodi vuoti che possono essere eliminati contemporaneamente dall'autoscaler. Il valore predefinito è
10. maxFailingTime- Il tempo massimo, espresso in minuti, durante il quale il pod dell'autoscaler del cluster rimane in esecuzione senza che venga completata alcuna azione, prima che il pod venga riavviato automaticamente. Il valore predefinito è
15m. maxGracefulTerminationSec- Il numero massimo di secondi che il programma di scalabilità automatica attende per la fine del pod quando esegue il ridimensionamento del nodo. Il valore predefinito è
600. maxInactivity- Il tempo massimo, espresso in minuti, durante il quale il pod dell'autoscaler del cluster rimane in esecuzione senza alcuna attività registrata prima che venga riavviato automaticamente. Il valore predefinito è
10m. maxNodeGroupBinpackingDuration- Tempo massimo in secondi trascorso nella simulazione del bin packing per ogni worker-pool. Il valore predefinito è
10s. maxNodeProvisionTime- Il tempo massimo, espresso in minuti, che un nodo di lavoro può impiegare per avviare il provisioning prima che l'autoscaler del cluster annulli la richiesta di scale-up. Il valore predefinito è
120m. maxNodeSkipevalTimeTrackerEnabled- Versione 1.35 e successive: Abilita metriche aggiuntive per analizzare il comportamento di Cluster Autoscaler quando i nodi vengono saltati durante la valutazione. Il valore predefinito è
false. - Se abilitato, il Cluster Autoscaler espone la metrica
cluster_autoscaler_skipped_scale_events_countall'interno del pod CA per monitorare gli eventi di scale-down saltati. maxNodesPerScaleUp- Numero massimo di nodi che possono essere aggiunti in un singolo scale up. Questo è inteso esclusivamente per ottimizzare la latenza dell'algoritmo di scaler automatico e non deve essere utilizzato come limite di frequenza per il ridimensionamento
incrementale. Il valore predefinito è
1000. maxPodEvictionTime- Tempo massimo in cui il programma di scalabilità automatica tenta di eliminare un pod prima dell'arresto. Il valore predefinito è
2m. maxRetryGap- Il tempo massimo, espresso in secondi, per effettuare un nuovo tentativo dopo un errore di connessione all'API del servizio. Utilizza questo parametro e il parametro
retryAttemptsper regolare la finestra dei nuovi tentativi per il cluster autoscaler. Il valore predefinito è60. parallelDrain- Impostare su
trueper consentire il drenaggio parallelo dei nodi. Il valore predefinito èfalse. - Deprecato L'impostazione
parallelDrain(mappata su--parallel-drain) è supportata solo nelle versioni di Cluster Autoscaler 1.26- 1.31. Per le versioni 1.32 e successive, utilizzare invece--max-drain-parallelisme--max-scale-down-parallelism. maxScaleDownParallelism- Numero massimo di nodi, sia vuoti che da svuotare, che possono essere eliminati in parallelo. Il valore predefinito è
10. maxTotalUnreadyPercentage- La percentuale massima di nodi non pronti nel cluster. Una volta superato questo valore, il programma di scalabilità automatico arresta le operazioni. Il valore predefinito è
45. memoryTotal- Quantità minima e massima di memoria in gigabyte per il cluster. Cluster autoscaler non ridimensiona il cluster oltre questi numeri. Il valore predefinito è
0:6400000. minReplicaCount- Il numero minimo di repliche che un controllore di replica o replicaSet deve consentire di eliminare durante la riduzione in scala. Il valore predefinito è
0. newPodScaleUpDelay- I pod più recenti di questo valore in secondi non vengono considerati per il ridimensionamento incrementale. Può essere aumentato per i singoli pod tramite l'annotazione
cluster-autoscaler.kubernetes.io/pod-scale-up-delay. Il valore predefinito è0s. nodeDeleteDelayAfterTaint- Il tempo di attesa, in secondi, prima di eliminare un nodo dopo averlo corrotto. Il valore predefinito è
5s. nodeDeletionBatcherInterval- Il tempo in minuti per cui l'autoscaler può raccogliere i nodi per eliminarli in batch. Il valore predefinito è
0m. nodeRemovalLatencyTrackingEnabled- Versione 1.35 e successive: Abilita le metriche dell'istogramma relative alla latenza di scalata dei nodi. Queste metriche forniscono visibilità sul tempo necessario a Cluster Autoscaler per rimuovere i nodi o annullare la
rimozione quando i nodi sono nuovamente necessari. Il valore predefinito è
false. - Quando è abilitato, il Cluster Autoscaler espone la metrica dell'istogramma di
cluster_autoscaler_node_removal_latency_seconds_bucketprometheus dal pod CA per monitorare il comportamento di scale-down. okTotalUnreadyCount- Numero di nodi non pronti consentiti, indipendentemente dal valore
maxTotalUnreadyPercentage. Il valore predefinito è3. OSReservedCPUMili- La quantità di CPU riservata in MiliCPU. Il valore predefinito è
30. OSReservedMemoryGi- La quantità di memoria riservata in GiB. Il valore predefinito è
0.3. parallelDrain- Impostare su
trueper consentire il drenaggio parallelo dei nodi. Il valore predefinito èfalse. prometheusScrape- Imposta su
trueper inviare le metriche Prometheus. Per arrestare l'invio di metriche, impostare sufalse. resourcesLimitsCPU- La quantità massima di CPU del nodo di lavoro che il pod “
ibm-iks-cluster-autoscaler” può consumare. Il valore predefinito è600m. resourcesLimitsMemory- La quantità massima di memoria dei nodi di lavoro che il pod “
ibm-iks-cluster-autoscaler” può occupare. Il valore predefinito è600Mi. resourcesRequestsCPU- La quantità minima di CPU del nodo di lavoro con cui viene avviato il pod “
ibm-iks-cluster-autoscaler”. Il valore predefinito è200m. resourcesRequestsMemory- La quantità minima di memoria del nodo di lavoro con cui viene avviato il pod “
ibm-iks-cluster-autoscaler”. Il valore predefinito è200Mi. retryAttempts- Il numero massimo di tentativi consentiti dopo un errore di connessione all'API del servizio. Utilizzare questo parametro insieme al parametro “
maxRetryGap” per regolare l’intervallo di riprova per l’autoscaler del cluster. | Il valore predefinito è64. scaleDownCandidatesPoolMinCount- Il numero minimo di nodi considerati come ulteriori candidati non vuoti per il ridimensionamento decrementale quando alcuni candidati delle iterazioni precedenti non sono più validi. Il valore predefinito è
50. scaleDownCandidatesPoolRatio- Il rapporto dei nodi considerati come ulteriori candidati non vuoti per il ridimensionamento decrementale quando alcuni candidati dell'interazione precedente non sono più validi. Il valore predefinito è
0.1. scaleDownDelayAfterAdd- L'intervallo di tempo dopo il quale viene ridimensionata la valutazione di ridimensionamento decrementale. Il valore predefinito è
10m.
scaleDownDelayAfterDelete | L'intervallo di tempo dopo l'eliminazione del nodo in cui riprende la valutazione della riduzione della scala. Il valore predefinito è lo stesso di scan-interval che è 1m.
scaleDownDelayAfterFailure- La quantità di tempo in minuti che il programma di scalabilità automatica deve attendere dopo un errore. Il valore predefinito è
3m. scaleDownEnabled- Quando è impostato su
false, l'autoscaler non esegue la riduzione. Il valore predefinito ètrue. scaleDownGPUUtilizationThreshold- La somma delle richieste di GPU di tutti i pod in esecuzione sul nodo divisa per le risorse allocabili del nodo. Quando le richieste di risorse sono inferiori a questa soglia, un nodo può essere considerato per il ridimensionamento. Il calcolo
dell'utilizzo considera solo le risorse della GPU. L'utilizzo della CPU e della memoria viene ignorato. Il valore predefinito è
0.5. scaleDownNonEmptyCandidatesCount- Il numero massimo di nodi non vuoti considerati in un'iterazione come candidati alla riduzione con scarico. | Il valore predefinito è
30. scaleDownUnneededTime- Il tempo, espresso in minuti, durante il quale un nodo di lavoro deve risultare inattivo prima di poter essere ridimensionato. Il valore predefinito è
10m. scaleDownUnreadyEnabled- Quando è impostato su
truei nodi non pronti sono pianificati per il ridimensionamento decrementale. Il valore predefinito ètrue. scaleDownUnreadyTime- La quantità di tempo in minuti che autoscaler deve attendere prima che un nodo non pronto venga considerato per il ridimensionamento decrementale. Il valore predefinito è
20m. scaleDownUtilizationThreshold- La soglia di utilizzo del nodo di lavoro. Se il livello di utilizzo del nodo di lavoro è inferiore alla soglia, si ritiene che il nodo di lavoro sia stato ridimensionato. L'utilizzo del nodo worker viene calcolato come somma delle risorse
di CPU e memoria richieste da tutti i pod in esecuzione sul nodo worker, divisa per la capacità delle risorse del nodo worker. | Il valore predefinito è
0.5. scanInterval- Imposta la frequenza in minuti con cui il cluster autoscaler esegue la scansione dell'utilizzo del carico di lavoro che attiva l'ampliamento o la riduzione. Il valore predefinito è
1m. skipNodesWithLocalStorage- Se impostato su
true, i nodi di lavoro che dispongono di pod che stanno salvando i dati nell'archiviazione locale non vengono ridotti. Il valore predefinito ètrue. skipNodesWithSystemPods- Se impostato su
true, i nodi di lavoro che dispongono di podkube-systemnon vengono ridotti. Non impostare il valore sufalseperché la riduzione dei podkube-systempotrebbe comportare risultati imprevisti. Il valore predefinito ètrue. unremovableNodeRecheckTimeout- Il timeout in minuti prima che l'autoscaler ricontrolli un nodo che non è stato possibile rimuovere in un tentativo precedente. Il valore predefinito è
5m. workerPoolsConfig.json- I pool di worker che si desidera autoscalare, compreso il numero minimo e massimo di nodi worker per zona nel formato
{"name": "<pool_name>","minSize": 1,"maxSize": 2,"enabled":false}. POOL_NAME: Il nome o l'ID del pool di worker che si desidera abilitare o disabilitare per il ridimensionamento automatico. Per visualizzare l'elenco dei pool di worker disponibili, eseguire il comandoibmcloud oc worker-pool ls --cluster CLUSTER_NAME_OR_ID``.maxSize: <number_of_workers>: Il numero massimo di nodi di lavoro per zona fino al quale l'autoscaler del cluster può aumentare la scalabilità. Il valore deve essere uguale o superiore a quello impostato per la dimensione dell'minSize: <number_of_workers>.min=<number_of_workers>: Il numero minimo di nodi di lavoro per zona fino al quale l'autoscaler del cluster può ridimensionare il cluster. Se si desidera che i pod ALB siano distribuiti per l'alta disponibilità, è necessario impostare il valore ad almeno 2. Se hai disabilitato tutte le ALB pubbliche in ciascuna zona del tuo cluster standard, puoi impostare il valore su0. Tieni presente che l'impostazione di una dimensioneminnon attiva automaticamente un ampliamento. La dimensione "min" rappresenta una soglia che impedisce all'autoscaler del cluster di ridimensionare il numero di nodi di lavoro al di sotto di questo valore minimo per zona. Se il tuo cluster non ha ancora questo numero di nodi di lavoro per ogni zona, il cluster autoscaler non esegue alcun ampliamento finché non hai richieste di risorse del carico di lavoro che richiedono ulteriori risorse.enabled=: Quandotrue, il cluster autoscaler può scalare il pool di lavoratori. Quandofalse, il cluster autoscaler non scalerà il pool di lavoratori. In seguito, se desideri rimuovere l'autoscaler del cluster, devi prima disabilitare ciascun pool di worker in ConfigMap. Se si abilita un pool di worker per l'autoscaling e successivamente si aggiunge una zona a tale pool, è necessario riavviare il pod dell'autoscaler del cluster affinché rilevi questa modifica:oc delete pod -n kube-system <cluster_autoscaler_pod>.- Per impostazione predefinita, il pool di nodi di lavoro
defaultnon è abilitato, con un valoremaxdi2e un valoremindi1.