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
- Instale el complemento del programa de escalado automático de clústeres.
- Acceda al clúster de Red Hat OpenShift.
-
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 yamlSalida de ejemplo
apiVersion: v1 data: workerPoolsConfig.json: | [ {"name": "<worker_pool>","minSize": 1,"maxSize": 2,"enabled":false} ] kind: ConfigMap -
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
minSizepor2por 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, ejecuteibmcloud 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. -
Guarde el archivo de configuración.
-
Obtenga el pod del programa de escalado automático de clústeres.
oc get pods -n kube-system -
Revise la sección
Eventsdel pod del programa de escalado automático de clústeres para ver si hay un sucesoConfigUpdatedpara 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.
-
Cuando se modifica un parámetro de configmap distinto de
minSizeomaxSizede 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.
-
Revise los parámetros del mapa de configuración del programa de escalado automático del clúster.
-
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 -
Abra el archivo
configmap.yamly actualice los valores que desea cambiar. -
Vuelva a aplicar el configmap del programa de escalado automático de clústeres.
oc apply -f configmap.yaml -
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
truepara escalar la agrupación de nodos trabajadores al tamaño mínimo configurado si es necesario. El valor predeterminado esfalse. 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 entremost-podsyleast-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 utilizarnodeSelectorpara 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
PodPriorityestablece 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
kubeletuna 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 es3. livenessProbePeriodSeconds- El intervalo, en segundos, en el que el realiza
kubeletuna comprobación de actividad. El valor predeterminado es600. 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 esinfo. maxBulkSoftTaintCount- El número máximo de nodos de trabajo que pueden marcarse o desmarcarse con
PreferNoScheduleal mismo tiempo. Para inhabilitar esta característica, establezca este valor en0. El valor predeterminado es0. maxBulkSoftTaintTime- El tiempo máximo durante el cual los nodos de trabajo pueden estar marcados o desmarcados al
PreferNoSchedulemismo tiempo. El valor predeterminado es10m. 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_countdentro 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
retryAttemptspara ajustar la ventana de reintentos para el programa de escalado automático de clústeres. El valor predeterminado es60. parallelDrain- Establézcalo en
truepara permitir el drenaje paralelo de nodos. El valor predeterminado esfalse. - 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-parallelismy--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 es0s. 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_bucketprometheus 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 es3. 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
truepara permitir el drenaje paralelo de nodos. El valor predeterminado esfalse. prometheusScrape- Establézcalo en
truepara enviar métricas de Prometheus. Para detener el envío de métricas, establézcalo enfalse. resourcesLimitsCPU- La cantidad máxima de CPU del nodo de trabajo que puede consumir el pod
ibm-iks-cluster-autoscaler. El valor predeterminado es600m. resourcesLimitsMemory- La cantidad máxima de memoria del nodo de trabajo que puede consumir el pod
ibm-iks-cluster-autoscaler. El valor predeterminado es600Mi. 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 es200m. 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 es200Mi. 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
maxRetryGapparámetro para ajustar el intervalo de reintentos del escalador automático del clúster. | El valor por defecto es64. 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 estrue. 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 estrue. 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 estrue. skipNodesWithSystemPods- Si tiene el valor
true, los nodos trabajadores que tienen podskube-systemno se escalan. No establezca el valor enfalseporque el escalado hacia abajo de podskube-systempuede dar lugar a resultados inesperados. El valor predeterminado estrue. 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, ejecuteibmcloud 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 deminSize: <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 en0. Tenga en cuenta que el hecho de establecer un tamañominno activa automáticamente un aumento. El tamañomines 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=: Cuandotrue, el cluster autoscaler puede escalar su pool de trabajadores. Cuandofalse, 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 valormaxde2y un valorminde1.