Configuración del escalado automático para las agrupaciones de trabajadores

Actualice el mapa de configuración del programa de escalado automático de clústeres para habilitar el escalado automático de nodos trabajadores en las agrupaciones de nodos trabajadores en función de los valores mínimos y máximos que ha establecido.

Una vez que hayas editado el configmap para habilitar el autoescalado en un grupo de trabajadores, el autoescalador del clúster escalará tu clúster en respuesta a las solicitudes de tu carga de trabajo. Esto significa que no puedes redimensionar o reequilibrar tus grupos de trabajadores. La exploración y el escalado se realizan a intervalos regulares a lo largo del tiempo, y, en función del número de nodos trabajadores, pueden tardar más tiempo en completarse, como por ejemplo 30 minutos. Más adelante, si desea eliminar el programa de escalado automático de clústeres, primero deberá inhabilitar cada agrupación de nodos trabajadores en el mapa de configuración.

A partir de la versión 1.2.4, la opción maxEmptyBulkDelete deja de estar disponible. Elimine esta opción de su configmap ejecutando el comando kubectl edit configmap iks-ca-configmap -n kube-system y borrando la opción. En su lugar, puede utilizar la opción maxScaleDownParallelism que se añadió en la versión 1.2.4. Para más información, consulte la referencia configmap.

Antes de empezar

  1. Edite el archivo YAML del mapa de configuración del programa de escalado automático de clústeres.

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

    Salida de ejemplo

    apiVersion: v1
    data:
      workerPoolsConfig.json: |
        [
         {"name": "<worker_pool>","minSize": 1,"maxSize": 2,"enabled":false}
        ]
    kind: ConfigMap
    
  2. Edite el mapa de configuración con los parámetros para definir cómo debe escalar la agrupación de nodos trabajadores el programa de escalado automático de clústeres. Nota: A menos que inhabilite todos los equilibradores de carga de aplicación (ALB) públicos en cada zona del clúster estándar, debe cambiar el valor minSize por 2 por zona para que los pods de ALB se puedan propagar para alta disponibilidad.

    • "name": "default": Sustituya "default" por el nombre o ID de la agrupación de trabajadores que desee escalar. Para listar las agrupaciones de trabajadores, ejecute ibmcloud oc worker-pool ls --cluster CLUSTER_NAME_OR_ID. Para gestionar más de una agrupación de nodos trabajadores, copie la línea JSON en una línea separada por comas, como se indica a continuación.
        [
        {"name": "default","minSize": 1,"maxSize": 2,"enabled":false},
        {"name": "Pool2","minSize": 2,"maxSize": 5,"enabled":true}
        ]
        ```
        El programa de escalado automático de clústeres solo puede escalar las agrupaciones de nodos trabajadores que tienen la etiqueta `ibm-cloud.kubernetes.io/worker-pool-id`. Para comprobar si la agrupación de trabajadores tiene la etiqueta necesaria, ejecute `ibmcloud oc worker-pool get --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID | grep Labels`. Si tu grupo de trabajadores no tiene la etiqueta requerida, añade un nuevo grupo de trabajadores y utiliza este grupo con el escalador automático del clúster.
        {: note}
    
    - `"minSize": 1`: Especifique el número mínimo de nodos trabajadores por zona. El hecho de establecer `minSize` no activa automáticamente un aumento. El es `minSize` un umbral que impide que el escalador automático del clúster reduzca el número de nodos de trabajo por zona por debajo de un valor determinado. Si el clúster aún no tiene dicho número por zona, el programa de escalado automático del clúster no lo aumenta hasta que tenga solicitudes de recursos de carga de trabajo que necesiten más recursos. Por ejemplo, si tiene una agrupación de nodos trabajadores con un nodo trabajador por tres zonas (tres nodos trabajadores en total) y establece el valor de `minSize` en `4` por zona, el programa de escalado automático del clúster no suministra inmediatamente tres nodos trabajadores adicionales por zona (12 nodos trabajadores en total). El aumento lo activan las solicitudes de recursos. Si crea una carga de trabajo que solicita los recursos de 15 nodos trabajadores, el programa de escalado automático del clúster aumenta la agrupación de nodos trabajadores para satisfacer esta solicitud. Ahora, esto significa `minSize` que el escalador automático del clúster no reduce el número de nodos de trabajo a menos de cuatro por zona, incluso si se elimina la carga de trabajo que requiere ese número. Para obtener más información, consulta la [documentación de 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`: especifica el número máximo de nodos trabajadores por zona a los que el escalador automático puede subir la agrupación de trabajadores. El valor debe ser igual o mayor que el valor que establezca para `minSize`.
    - `"enabled": false`: establezca el valor a `true` para que el escalador automático gestione el escalado de la agrupación de trabajadores. Establezca el valor en `false` para detener el escalado de la agrupación de nodos trabajadores por parte del programa de escalado automático de clústeres. Más adelante, si desea [eliminar el programa de escalado automático de clústeres](/docs/openshift?topic=openshift-cluster-scaling-install-addon&interface=ui#autoscaler-remove-console), primero deberá inhabilitar cada agrupación de nodos trabajadores en el mapa de configuración.
    
    
  3. Guarde el archivo de configuración.

  4. Obtenga el pod del programa de escalado automático de clústeres.

    oc get pods -n kube-system
    
  5. Revise la sección Events del pod del programa de escalado automático de clústeres para ver si hay un suceso ConfigUpdated para verificar que el mapa de configuración se ha actualizado correctamente. El mensaje de suceso para el mapa de configuración tiene el formato siguiente: minSize:maxSize:PoolName:<SUCCESS|FAILED>:error message.

    oc describe pod -n kube-system <cluster_autoscaler_pod>
    

    Salida de ejemplo

        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:"}
    

Si habilita una agrupación de trabajadores para el escalado automático y después añade una zona a esta agrupación de trabajadores, reinicie el pod del programa de escalado automático del clúster para que incluya este cambio: oc delete pod -n kube-system <cluster_autoscaler_pod>.

Personalización de los valores de configuración del programa de escalado automático de clústeres

Personalice los valores del programa de escalado automático de clústeres, como por ejemplo el intervalo de tiempo que espera antes de aumentar o reducir el número de nodos trabajadores.

  • Acceda al clúster de Red Hat OpenShift.

  • Habilitar el complemento.

    Cuando se modifica un parámetro de configmap distinto de minSize o maxSize de la agrupación de nodos trabajadores, o si se habilita o inhabilita una agrupación de nodos trabajadores, los pods del programa de escalado automático de clústeres se reinician.

  1. Revise los parámetros del mapa de configuración del programa de escalado automático del clúster.

  2. Descargue el configmap del complemento del programa de escalado automático de clústeres y revise los parámetros.

    oc get cm iks-ca-configmap -n kube-system -o yaml > configmap.yaml
    
  3. Abra el archivo configmap.yaml y actualice los valores que desea cambiar.

  4. Vuelva a aplicar el configmap del programa de escalado automático de clústeres.

    oc apply -f configmap.yaml
    
  5. Verifique que los pods se hayan reiniciado correctamente.

    oc get pods -n kube-system | grep autoscaler
    

Referencia de mapa de configuración del programa de escalado automático de clústeres

balancingIgnoreLabel
La clave de etiqueta de nodo que se debe ignorar durante el equilibrado de zonas. Aparte de las etiquetas de nodo fijas, el programa de escalado automático puede ignorar 5 etiquetas de nodo adicionales durante el equilibrado de zonas. Por ejemplo, balancingIgnoreLabel1:label1, balancingIgnoreLabel2: custom-label2.
coresTotal
El número mínimo y máximo de núcleos en el clúster. El programa de escalado automático de clústeres no escala el clúster más allá de estos números. El valor predeterminado es 0:320000.
enforceNodeGroupMinSize
Establezca este valor en true para escalar la agrupación de nodos trabajadores al tamaño mínimo configurado si es necesario. El valor predeterminado es false.
expander
Cómo determina el escalador automático de clústeres qué grupo de trabajadores debe escalar si hay varios grupos de trabajadores. El valor predeterminado es random.
random: Selecciona aleatoriamente entre most-pods y least-waste.
most-pods: Selecciona la agrupación de nodos trabajadores que puede planificar la mayor cantidad de pods cuando se escala hacia arriba. Utilice este método si va a utilizar nodeSelector para asegurarse de que los pods van a parar a nodos trabajadores específicos.
least-waste: Selecciona la agrupación de nodos trabajadores que tiene menos CPU no utilizada después de aumentar el número de nodos. Si dos agrupaciones de nodos trabajadores utilizan la misma cantidad de recursos de CPU después de aumentar el número de nodos, se selecciona la agrupación de nodos trabajadores con menos memoria no utilizada.
expendablePodsPriorityCutoff
Los pods con prioridad bajo el límite de corte son prescindibles. Se pueden eliminar sin tener en cuenta durante la reducción de escala y no causan aumento de escala. Los pods que PodPriority establece en null no se pueden utilizar. El valor predeterminado es -10.
ignoreDaemonSetsUtilization
Ignora los pods del autoescalador DaemonSet al calcular la utilización de recursos para la reducción de escala. El valor predeterminado es false.
imagePullPolicy
Cuándo descargar la imagen Docker. El valor predeterminado es Always.
Always: Extrae la imagen cada vez que se inicia el pod.
IfNotPresent: Extrae la imagen sólo si la imagen no está ya presente localmente. \n - Never: Asume que la imagen existe localmente y nunca la extrae.
kubeClientBurst
Ráfaga permitida para el cliente Kubernetes. El valor predeterminado es 300.
kubeClientQPS
El valor QPS para el cliente Kubernetes. Cuántas consultas se aceptan una vez que se ha agotado la separación. El valor predeterminado es 5.0.
livenessProbeFailureThreshold
El número de veces que se vuelve a intentar kubelet una prueba de actividad después de que el pod se haya iniciado y haya fallado la primera prueba de actividad. Una vez alcanzado el umbral de errores, el contenedor se reinicia y el pod se marca como No preparado (Unready) para un sondeo de preparación, si procede. El valor predeterminado es 3.
livenessProbePeriodSeconds
El intervalo, en segundos, en el que el realiza kubelet una comprobación de actividad. El valor predeterminado es 600.
livenessProbeTimeoutSeconds
El tiempo, en segundos, tras el cual caduca la comprobación de actividad. El valor predeterminado es 10.
logLevel
El nivel de registro para el programa de escalado automático. Los niveles de registro son info, debug, warning, error. El valor por defecto es info.
maxBulkSoftTaintCount
El número máximo de nodos de trabajo que pueden marcarse o desmarcarse con PreferNoSchedule al mismo tiempo. Para inhabilitar esta característica, establezca este valor en 0. El valor predeterminado es 0.
maxBulkSoftTaintTime
El tiempo máximo durante el cual los nodos de trabajo pueden estar marcados o desmarcados al PreferNoSchedule mismo tiempo. El valor predeterminado es 10m.
maxDrainParallelism
Número máximo de nodos que todavía deben drenarse y que se pueden drenar y suprimir en paralelo. El valor predeterminado es 1.
maxEmptyBulkDelete
Sólo se admite en versiones anteriores a 1.2.4 El número máximo de nodos vacíos que puede eliminar el autoescalador al mismo tiempo. El valor predeterminado es 10.
maxFailingTime
El tiempo máximo, en minutos, que el pod del escalador automático del clúster puede permanecer en ejecución sin que se haya completado ninguna acción antes de que el pod se reinicie automáticamente. El valor predeterminado es 15m.
maxGracefulTerminationSec
El número máximo de segundos que el programa de escalado automático espera a que finalice el pod cuando escala hacia abajo un nodo. El valor predeterminado es 600.
maxInactivity
El tiempo máximo, en minutos, que el pod del escalador automático del clúster permanece en ejecución sin que se registre ninguna actividad antes de que se reinicie automáticamente. El valor predeterminado es 10m.
maxNodeGroupBinpackingDuration
Tiempo máximo en segundos empleado en la simulación de bin packing para cada pool de trabajadores. El valor predeterminado es 10s.
maxNodeProvisionTime
El tiempo máximo, expresado en minutos, que puede tardar un nodo de trabajo en iniciar el aprovisionamiento antes de que el escalador automático del clúster cancele la solicitud de ampliación. El valor predeterminado es 120m.
maxNodeSkipevalTimeTrackerEnabled
Versión 1.35 y posteriores: Habilita métricas adicionales para analizar el comportamiento de reducción de escala de Cluster Autoscaler cuando se omiten nodos durante la evaluación. El valor predeterminado es false.
Cuando está activado, el Cluster Autoscaler expone la métrica cluster_autoscaler_skipped_scale_events_count dentro del pod de CA para supervisar los eventos de reducción de escala omitidos.
maxNodesPerScaleUp
Número máximo de nodos que pueden añadirse en una sola ampliación. Esto está pensado estrictamente para optimizar la latencia del algoritmo de escalado automático y no se debe utilizar como límite de velocidad para el escalado. El valor predeterminado es 1000.
maxPodEvictionTime
Tiempo máximo que el programa de escalado automático intenta desalojar un pod antes de detenerse. El valor predeterminado es 2m.
maxRetryGap
El tiempo máximo, en segundos, para volver a intentarlo tras un fallo en la conexión con la API del servicio. Utilice este parámetro y el parámetro retryAttempts para ajustar la ventana de reintentos para el programa de escalado automático de clústeres. El valor predeterminado es 60.
parallelDrain
Establézcalo en true para permitir el drenaje paralelo de nodos. El valor predeterminado es false.
Obsoleto La configuración parallelDrain (se asigna a --parallel-drain) sólo se admite en las versiones de Cluster Autoscaler 1.26- 1.31. Para las versiones 1.32 y posteriores, utilice en su lugar --max-drain-parallelism y --max-scale-down-parallelism.
maxScaleDownParallelism
Número máximo de nodos, tanto vacíos como que necesitan ser vaciados, que pueden ser eliminados en paralelo. El valor predeterminado es 10.
maxTotalUnreadyPercentage
El porcentaje máximo de nodos no preparados en el clúster. Una vez superado este valor, el programa de escalado automático detiene las operaciones. El valor predeterminado es 45.
memoryTotal
Cantidad mínima y máxima de memoria en gigabytes para el clúster. El programa de escalado automático de clústeres no escala el clúster más allá de estos números. El valor predeterminado es 0:6400000.
minReplicaCount
El número mínimo de réplicas que un replicaSet o controlador de replicación debe permitir que se eliminen durante la reducción de escala. El valor predeterminado es 0.
newPodScaleUpDelay
Los pods más recientes que este valor en segundos no se tienen en cuenta para el escalado. Se puede aumentar para pods individuales a través de la anotación cluster-autoscaler.kubernetes.io/pod-scale-up-delay. El valor predeterminado es 0s.
nodeDeleteDelayAfterTaint
Tiempo en segundos que se debe esperar antes de suprimir un nodo después de contaminarlo. El valor predeterminado es 5s.
nodeDeletionBatcherInterval
El tiempo en minutos que el programa de escalado automático puede recopilar nodos para suprimirlos por lotes. El valor predeterminado es 0m.
nodeRemovalLatencyTrackingEnabled
Versión 1.35 y posteriores: Activa las métricas de histograma relacionadas con la latencia de reducción de escala de los nodos. Estas métricas proporcionan visibilidad sobre el tiempo que tarda Cluster Autoscaler en eliminar nodos o cancelar la eliminación cuando los nodos vuelven a ser necesarios. El valor predeterminado es false.
Cuando está activado, el Cluster Autoscaler expone la métrica cluster_autoscaler_node_removal_latency_seconds_bucket prometheus histogram del pod CA para monitorizar el comportamiento de reducción de escala.
okTotalUnreadyCount
Número de nodos no preparados permitidos, independientemente del valor de maxTotalUnreadyPercentage. El valor predeterminado es 3.
OSReservedCPUMili
La cantidad de CPU reservada en MiliCPU. El valor predeterminado es 30.
OSReservedMemoryGi
La cantidad de memoria reservada en GiB. El valor predeterminado es 0.3.
parallelDrain
Establézcalo en true para permitir el drenaje paralelo de nodos. El valor predeterminado es false.
prometheusScrape
Establézcalo en true para enviar métricas de Prometheus. Para detener el envío de métricas, establézcalo en false.
resourcesLimitsCPU
La cantidad máxima de CPU del nodo de trabajo que puede consumir el pod ibm-iks-cluster-autoscaler. El valor predeterminado es 600m.
resourcesLimitsMemory
La cantidad máxima de memoria del nodo de trabajo que puede consumir el pod ibm-iks-cluster-autoscaler. El valor predeterminado es 600Mi.
resourcesRequestsCPU
La cantidad mínima de CPU del nodo de trabajo con la que se inicia el pod ibm-iks-cluster-autoscaler. El valor predeterminado es 200m.
resourcesRequestsMemory
La cantidad mínima de memoria del nodo de trabajo con la que se inicia el pod ibm-iks-cluster-autoscaler. El valor predeterminado es 200Mi.
retryAttempts
Número máximo de intentos de reintento tras un fallo en la conexión con la API del servicio. Utilice este parámetro y el maxRetryGap parámetro para ajustar el intervalo de reintentos del escalador automático del clúster. | El valor por defecto es 64.
scaleDownCandidatesPoolMinCount
El número mínimo de nodos que se consideran candidatos adicionales no vacíos para la reducción cuando algunos candidatos de iteraciones anteriores ya no son válidos. El valor predeterminado es 50.
scaleDownCandidatesPoolRatio
La proporción de nodos que se consideran como candidatos adicionales no vacíos para la reducción cuando algunos candidatos de la iteración anterior ya no son válidos. El valor predeterminado es 0.1.
scaleDownDelayAfterAdd
El tiempo que transcurre tras la ampliación hasta que se reanuda la evaluación de la reducción. El valor predeterminado es 10m.

scaleDownDelayAfterDelete | El tiempo que transcurre tras la eliminación de un nodo hasta que se reanuda la evaluación de la reducción de escala. El valor por defecto es el mismo que el, scan-interval que es 1m.

scaleDownDelayAfterFailure
La cantidad de tiempo en minutos que el programa de escalado automático debe esperar después de una anomalía. El valor predeterminado es 3m.
scaleDownEnabled
Cuando se establece en false, el programa de escalado automático no realiza la reducción. El valor predeterminado es true.
scaleDownGPUUtilizationThreshold
La suma de las solicitudes de GPU de todos los pods que se ejecutan en el nodo dividida por los recursos asignables del nodo. Cuando las solicitudes de recursos son inferiores a este umbral, se puede considerar la reducción de escala de un nodo. El cálculo de la utilización sólo tiene en cuenta los recursos de la GPU. La utilización de la CPU y la memoria se ignoran. El valor predeterminado es 0.5.
scaleDownNonEmptyCandidatesCount
El número máximo de nodos no vacíos considerados en una iteración como candidatos para la reducción de escala con drenaje. | El valor por defecto es 30.
scaleDownUnneededTime
El tiempo, expresado en minutos, que un nodo de trabajo debe permanecer inactivo antes de que se pueda reducir su capacidad. El valor predeterminado es 10m.
scaleDownUnreadyEnabled
Cuando se establece en true, los nodos no preparados se planifican para la reducción. El valor predeterminado es true.
scaleDownUnreadyTime
La cantidad de tiempo en minutos que el programa de escalado automático debe esperar antes de que se considere un nodo no preparado para la reducción. El valor predeterminado es 20m.
scaleDownUtilizationThreshold
El umbral de utilización del nodo de trabajo. Si la utilización del nodo de trabajo es inferior al umbral, se considera que el nodo de trabajo se ha reducido. La utilización del nodo de trabajo se calcula como la suma de los recursos de CPU y memoria solicitados por todos los pods que se ejecutan en el nodo de trabajo, dividida por la capacidad de recursos del nodo de trabajo. | El valor por defecto es 0.5.
scanInterval
Establezca la frecuencia en minutos con la que el programa de escalado automático de clústeres explora el uso de la carga de trabajo que activa el escalado hacia arriba o hacia abajo. El valor predeterminado es 1m.
skipNodesWithLocalStorage
Si tiene el valor true, los nodos trabajadores que tienen pods que guardan datos en el almacenamiento local no se escalan hacia abajo. El valor predeterminado es true.
skipNodesWithSystemPods
Si tiene el valor true, los nodos trabajadores que tienen pods kube-system no se escalan. No establezca el valor en false porque el escalado hacia abajo de pods kube-system puede dar lugar a resultados inesperados. El valor predeterminado es true.
unremovableNodeRecheckTimeout
El tiempo de espera en minutos antes de que el programa de escalado automático vuelva a comprobar un nodo que no se ha podido eliminar en un intento anterior. El valor predeterminado es 5m.
workerPoolsConfig.json
Los pools de trabajadores que desea autoescalar, incluyendo su número mínimo y máximo de nodos trabajadores por zona en el formato {"name": "<pool_name>","minSize": 1,"maxSize": 2,"enabled":false}.
POOL_NAME: nombre o ID de la agrupación de trabajadores que se desea habilitar o inhabilitar para el escalado automático. Para listar agrupaciones de trabajadores disponibles, ejecute ibmcloud oc worker-pool ls --cluster CLUSTER_NAME_OR_ID.
maxSize: <number_of_workers>: El número máximo de nodos de trabajo por zona hasta el que puede ampliar el escalador automático del clúster. El valor debe ser mayor o igual que el valor que ha establecido para el tamaño de minSize: <number_of_workers>.
min=<number_of_workers>: El número mínimo de nodos de trabajo por zona hasta el que el escalador automático del clúster puede reducir el tamaño. Si necesita que sus pods ALB estén repartidos para una alta disponibilidad, debe establecer el valor en al menos 2. Si ha desactivado todos los ALB públicos en cada zona de su clúster estándar, puede establecer el valor en 0. Tenga en cuenta que el hecho de establecer un tamaño min no activa automáticamente un aumento. El tamaño min es un umbral para que el escalador automático del clúster no reduzca el número de nodos de trabajo por zona por debajo de este mínimo. Si el clúster no tiene todavía este número de nodos trabajadores por zona, el programa de escalado automático del clúster no aumenta el número de nodos hasta que tenga solicitudes de recursos de carga de trabajo que requieran más recursos.
enabled=: Cuando true, el cluster autoscaler puede escalar su pool de trabajadores. Cuando false, el cluster autoscaler no escalará el pool de trabajadores. Más adelante, si desea eliminar el escalador automático del clúster, primero deberá desactivar cada grupo de trabajadores en el ConfigMap. Si habilita un grupo de trabajadores para el autoescalado y, posteriormente, añade una zona a dicho grupo, reinicie el pod del autoescalador del clúster para que detecte este cambio: oc delete pod -n kube-system <cluster_autoscaler_pod>.
De forma predeterminada, la agrupación de nodos trabajadores predeterminada (default) no está habilitada, con un valor max de 2 y un valor min de 1.