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

  1. Modifica il file YAML della mappa di configurazione del cluster autoscaler.

    oc edit cm iks-ca-configmap -n kube-system -o yaml
    

    Output di esempio

    apiVersion: v1
    data:
      workerPoolsConfig.json: |
        [
         {"name": "<worker_pool>","minSize": 1,"maxSize": 2,"enabled":false}
        ]
    kind: ConfigMap
    
  2. 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 minSize impostandola su 2 per 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 comando ibmcloud 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.
    
    
  3. Salva il file di configurazione.

  4. Ottieni il pod del cluster autoscaler.

    oc get pods -n kube-system
    
  5. Esamina la sezione Events del pod del cluster autoscaler e controlla l'evento ConfigUpdated per 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.

  1. Controlla i parametri cluster autoscaler ConfigMap.

  2. Scarica il componente aggiuntivo cluster autoscaler ConfigMap ed esamina i parametri.

    oc get cm iks-ca-configmap -n kube-system -o yaml > configmap.yaml
    
  3. Aprire il file configmap.yaml e aggiornare le impostazioni che si desidera modificare.

  4. Riapplicare la configmap del componente aggiuntivo del cluster autoscaler.

    oc apply -f configmap.yaml
    
  5. 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 true per 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 tra most-pods e least-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 utilizzi nodeSelector per 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 PodPriority impostati 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 - Never assume 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' kubelet e 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 come Unready per un probe di disponibilità, se applicabile. Il valore predefinito è 3.
livenessProbePeriodSeconds
L'intervallo, espresso in secondi, con cui l' kubelet e 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 su 0. 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_count all'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 retryAttempts per regolare la finestra dei nuovi tentativi per il cluster autoscaler. Il valore predefinito è 60.
parallelDrain
Impostare su true per 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-parallelism e --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_bucket prometheus 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 true per consentire il drenaggio parallelo dei nodi. Il valore predefinito è false.
prometheusScrape
Imposta su true per inviare le metriche Prometheus. Per arrestare l'invio di metriche, impostare su false.
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 true i 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 pod kube-system non vengono ridotti. Non impostare il valore su false perché la riduzione dei pod kube-system potrebbe 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 comando ibmcloud 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 su 0. Tieni presente che l'impostazione di una dimensione min non 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=: Quando true, il cluster autoscaler può scalare il pool di lavoratori. Quando false, 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 default non è abilitato, con un valore max di 2 e un valore min di 1.