Preparación del clúster para el escalado automático
[Nube privada virtual] {: tag-vpc} Infraestructura clásica
Con el complemento cluster-autoscaler, puede escalar las agrupaciones de nodos trabajadores de un clúster de Red Hat® OpenShift® on IBM Cloud® o de un clúster de VPC automáticamente a fin de aumentar o reducir el número de nodos trabajadores
de la agrupación en función de los requisitos de las cargas de trabajo planificadas. El complemento cluster-autoscaler se basa en el proyecto Cluster-Autoscaler de Kubernetes. Para obtener una lista de las versiones de complemento soportadas por versión de clúster, consulte Versiones de complemento de clúster soportadas.
No puede habilitar el programa de escalado automático de clústeres en agrupaciones de trabajadores que utilizan reservas.
Comprender la autoescalabilidad
-
El programa de escalado automático de clústeres explora periódicamente el clúster para ajustar el número de nodos trabajadores de las agrupaciones de nodos trabajadores que gestiona como respuesta a solicitudes de recursos de cargas de trabajo y a valores personalizados que configura el usuario, como por ejemplo intervalos de exploración.
-
Cada minuto, el programa de escalado automático de clústeres comprueba las situaciones siguientes.
- Pods pendientes de escalado hacia arriba: Se considera que un pod está pendiente cuando no existen suficientes recursos de cálculo para planificar el pod en un nodo trabajador. Cuando el programa de escalado automático de clústeres detecta que hay pods pendientes, aumenta el número de nodos trabajadores de forma equitativa en las zonas para satisfacer las solicitudes de recursos de las cargas de trabajo.
- Nodos trabajadores infrautilizados a reducir: De forma predeterminada, los nodos trabajadores que se ejecutan con menos del 50 % del total de recursos de cálculo solicitados durante 10 minutos o más y cuyas cargas de trabajo se pueden volver a planificar en otros nodos trabajadores se consideran infrautilizados. Si el programa de escalado automático de clústeres detecta nodos trabajadores infrautilizados, reduce el número de nodos trabajadores de uno en uno para que tenga solo los recursos de cálculo que necesita. Si lo desea, puede personalizar el umbral predeterminado de utilización de reducción del 50 % durante 10 minutos.
-
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.
-
El escalador automático de clústeres ajusta el número de nodos de trabajo teniendo en cuenta las solicitudes de recursos que definas para tus implementaciones, y no el uso real de los nodos de trabajo. Si sus pods y despliegues no solicitan cantidades adecuadas de recursos, debe ajustar sus archivos de configuración.
-
El programa de escalado automático de clústeres no los puede ajustar automáticamente. Además, hay que tener en cuenta que los nodos de trabajo utilizan algunos recursos de computación para la funcionalidad básica del clúster, los complementos predeterminados y personalizados, y las reservas de recursos.
-
En general, el programa de escalado automático de clústeres calcula el número de nodos trabajadores que necesita el clúster para ejecutar su carga de trabajo. El escalado del clúster depende de muchos factores, incluidos los siguientes.
- El tamaño de nodo trabajador mínimo y máximo por zona que se ha establecido.
- Tus solicitudes de recursos de pod pendientes y determinados metadatos que asocias a la carga de trabajo, como la anti-afinidad, las etiquetas para ubicar los pods únicamente en determinados tipos o los presupuestos de interrupción de los pods.
- Los grupos de trabajadores que gestiona el escalador automático del clúster, posiblemente en distintas zonas dentro de un clúster multizona.
-
Las versiones anteriores del autoescalador de clústeres se basaban únicamente en los nodos trabajadores existentes para programar las simulaciones. Por ejemplo, si un grupo de trabajadores se reducía a 0 nodos, el escalador automático no tenía información sobre la capacidad o las etiquetas de ese grupo, lo que significaba que no podía volver a ampliar el grupo de trabajadores. En consecuencia, no se admitía la escala a cero.
-
A partir de la versión 2.0.0, el autoescalador crea un nodo de plantilla para cada grupo de trabajadores. Esta plantilla se utiliza para proporcionar un modelo de la CPU, la memoria, las etiquetas y las marcas asignables de un nuevo nodo en el grupo.
-
Además, en la versión 2.0.0, hay dos nuevas configuraciones opcionales disponibles en el
iks-ca-configmapen elkube-systemespacio de nombres:OSReservedMemoryGiyOSReservedCPUMili.- Estos valores representan la cantidad de CPU y memoria que el sistema operativo reserva en cada nodo de trabajo.
- La utilización del núcleo no se puede ajustar utilizando estos valores, ya que están predefinidos.
- El autoescalador resta estos valores de la capacidad del nodo cuando calcula los recursos asignables para programar simulaciones.
- De forma predeterminada, el escalador automático utiliza los valores recomendados reservados por el sistema operativo, pero los usuarios pueden anularlos para ajustar la capacidad que se puede programar.
Para obtener más información, consulta las preguntas más frecuentes frecuentes sobre el Cluster Autoscaler de Kubernetes: ¿Cómo funciona el aumento de escala? y ¿Cómo funciona la reducción de escala?.
¿Cuáles son las mejores prácticas de autoescalado?
- Para aprovechar al máximo el programa de escalado automático de clústeres utilice las siguientes estrategias para los nodos trabajadores y los despliegues de cargas de trabajo. Para obtener más información, consulta el Kubernetes Preguntas más frecuentes Cluster Autoscaler.
- Pruebe el programa de escalado automático de clústeres con unas cuantas cargas de trabajo de prueba para obtener una buena idea de cómo funciona el escalado hacia arriba y el escalado hacia abajo, es posible que desee configurar y cualquier otro aspecto que desee, como por ejemplo sobreaprovisionamiento de nodos trabajadores o limitación de apps.
- A continuación, limpie el entorno de prueba y planifique incluir estos valores personalizados y parámetros adicionales en una instalación nueva del programa de escalado automático de clústeres.
¿Puedo cambiar el funcionamiento del escalado?
Sí, puedes personalizar la configuración o utilizar otros recursos de Kubernetes para influir en el funcionamiento del escalado ascendente y descendente.
-
Para la ampliación, puede personalizar los valores del autoescalador del clúster ConfigMap como
scanInterval,expander,skipNodesomaxNodeProvisionTime. Revise las formas de sobresuministrar a los nodos trabajadores para poder ampliar los nodos trabajadores antes de que una agrupación de nodos trabajadores se quede sin recursos. También puede configurar interrupciones de presupuesto de pod de Kubernetes y límites de prioridad de pods para influir en el funcionamiento del escalado hacia arriba. -
Para reducir la escala, personaliza los valores del escalador automático de clústeres ConfigMap, como
scaleDownUnneededTime,scaleDownDelayAfterAdd,scaleDownDelayAfterDelete, oscaleDownUtilizationThreshold.
¿Puedo aumentar el tamaño mínimo por zona para generar un aumento de mi clúster hasta ese tamaño?
No, 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
minSizeen4por 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
minSizeque 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.
¿En qué se diferencia este comportamiento de las agrupaciones de trabajadores que no gestiona el programa de escalado automático de clústeres?
Cuando crea una agrupación de nodos trabajadores, especifica el número de nodos trabajadores que tiene por zona. La agrupación de nodos trabajadores mantiene este número de nodos trabajadores hasta que el usuario redimensiona o vuelve a equilibrar. La agrupación de nodos trabajadores no añade ni elimina nodos trabajadores automáticamente. Si tiene más pods de los que se pueden planificar, los pods permanecen en estado pendiente hasta que el usuario redimensiona la agrupación de nodos trabajadores. Cuando se habilita el programa de escalado automático de clústeres para una agrupación de nodos trabajadores, se aumenta o se reduce el número de nodos trabajadores en respuesta a los valores de especificación de pod y a las solicitudes de recursos. No es necesario cambiar el tamaño de la agrupación de nodos trabajadores ni volver a equilibrar la agrupación de nodos trabajadores manualmente.
¿Cómo funciona el autoescalado de la GPU?
El autoescalado de nodos trabajadores de GPU sólo es compatible con la versión de autoescalado de clúster 1.2.4 y posteriores y sólo con versiones de nodos trabajadores de GPU NVIDIA. La ampliación se produce cuando un pod pasa al estado pendiente
debido a la escasez de recursos de la GPU. A continuación, el autoescalador amplía el clúster añadiendo más nodos. La reducción se produce cuando la utilización es inferior a la configurada en scaleDownGPUUtilizationThreshold.
Cuando esto ocurre, el nodo se considera para reducción de escala.
¿Puedo escalar automáticamente varias agrupaciones de nodos trabajadores a la vez?
Sí, después de instalar el programa de escalado automático de clústeres, puede elegir las agrupaciones de nodos trabajadores dentro del clúster que desea escalar automáticamente en el configmap. Sólo puede ejecutar un programa de escalado automático por clúster. Cree y habilite el escalado automático en agrupaciones de nodos trabajadores distintas de la agrupación de nodos trabajadores predeterminada, porque la agrupación de nodos trabajadores predeterminada tiene componentes del sistema que pueden impedir el escalado automático.
¿Cómo puedo asegurarme de que el programa de escalado automático de clústeres responde a los recursos que necesita mi app?
El escalador automático de clústeres ajusta el tamaño de tu clúster en función de las solicitudes de recursos de tu carga de trabajo. Por lo tanto, especifica las solicitudes de recursos para todas tus implementaciones, ya que el escalador automático del clúster utiliza dichas solicitudes para calcular cuántos nodos de trabajo se necesitan para ejecutar la carga de trabajo. Tenga en cuenta que el escalado automático se basa en el uso de cálculo que solicitan las configuraciones de la carga de trabajo y no tiene en cuenta otros factores, como los costes de la máquina.
¿Puedo reducir una agrupación de nodos trabajadores a cero (0) nodos?
¡Sí! A partir de la versión del complemento Cluster 2.0.0 Autoscaler, puede reducir grupos de trabajadores específicos a cero nodos.
- ¿Por qué es útil?
- La reducción a cero ayuda a ahorrar costes cuando no hay cargas de trabajo en ejecución. El autoscaler recupera automáticamente los nodos cuando es necesario.
- ¿Cómo funciona?
- Cuando no hay pods que ejecutar, el autoescalador puede reducir el grupo de trabajadores a 0 nodos. Si los nuevos pods necesitan recursos, el autoescalador vuelve a escalar automáticamente el grupo.
- ¿Qué tienes que hacer?
-
- Comprueba la versión de tu complemento y asegúrate de que estás utilizando v2.0.0 o una versión posterior.
-
- Establezca
minSize = 0para el grupo de trabajadores en la configuración de su autoscaler. Si tiene habilitados los ALB públicos, configúrelosminSize = 2por zona para alta disponibilidad.
- Establezca
- ¿Cuál es el requisito de quórum del clúster?
- Tenga en cuenta que el clúster completo no puede reducirse a cero. Debe permanecer activo un número mínimo de nodos para mantener el clúster en buen estado y mantener etcd el quórum. Si se alcanza este quórum, puede reducir otros grupos de trabajadores a cero.
¿Puedo optimizar mis despliegues para el escalado automático?
Sí, puede añadir varias características de Kubernetes al despliegue para ajustar la forma en que el programa de escalado automático de clústeres considera las solicitudes de recursos para el escalado.
- Marque la agrupación de nodos trabajadores para permitir que sólo se desplieguen en la agrupación de nodos trabajadores los despliegues o pods con la tolerancia coincidente.
- Añada una etiqueta a la agrupación de nodos trabajadores distinta de la agrupación de nodos trabajadores predeterminada. Esta etiqueta se utiliza en la configuración de despliegue
para especificar
nodeAffinityonodeSelectorque limita las cargas de trabajo que se pueden desplegar en los nodos trabajadores en la agrupación de nodos trabajadores etiquetada. - Utiliza los presupuestos de interrupción de pods para evitar reprogramaciones o eliminaciones repentinas de tus pods.
- Si utilizas la prioridad de pod, puedes editar el umbral de prioridad para cambiar qué tipos de prioridad activan el escalado ascendente. De forma predeterminada, el límite de corte de prioridad es cero (
0).
¿Puedo usar marcas y tolerancias con agrupaciones de nodos trabajadores escaladas automáticamente?
Sí, pero asegúrese de aplicar los resultados en el nivel de agrupación de nodos trabajadores para que todos los nodos trabajadores existentes y futuros tengan la misma marca. A continuación, debe incluir una tolerancia correspondiente en la configuración de su carga de trabajo, de modo que estas cargas de trabajo se programen en su grupo de trabajadores con escalado automático que tenga la marca correspondiente. Tenga en cuenta que si despliega una carga de trabajo que no tolera la agrupación de nodos trabajadores marcada, los nodos trabajadores no se tendrán en cuenta para el escalado hacia arriba y se podrían solicitar más nodos trabajadores, incluso si el clúster tiene suficiente capacidad. Sin embargo, la agrupación de nodos trabajadores marcada se sigue identificando como infrautilizada si se utilizan menos del umbral (de forma predeterminada, 50%) de sus recursos y, por lo tanto, se tienen en cuenta para el escalado hacia abajo.
Preparación de clusters para el autoescalado
Antes de instalar el complemento del programa de escalado automático de clústeres de IBM Cloud, puede configurar el clúster para prepararlo para el escalado automático.
El complemento de escalado automático de clústeres no recibe soporte para los nodos trabajadores nativos.
-
Antes de empezar, instale la CLI y los plugins necesarios.
- CLI de IBM Cloud (
ibmcloud) - Plugin IBM Cloud Kubernetes Service (
ibmcloud oc) - Plugin IBM Cloud Container Registry (
ibmcloud cr) - Kubernetes (
kubectl)
- CLI de IBM Cloud (
-
Confirme que las credenciales de IBM Cloud Identity and Access Management están almacenadas en el clúster. El programa de escalado automático de clústeres utiliza este secreto para autenticar las credenciales. Si falta el secreto, créelo restableciendo las credenciales.
oc get secrets -n kube-system | grep storage-secret-store -
Planifique el escalado automático de una agrupación de nodos trabajadores que no sea la agrupación de nodos trabajadores
default, porque la agrupación de nodos trabajadoresdefaulttiene componentes del sistema que pueden impedir el escalado automático. Incluye una etiqueta para el grupo de trabajadores, de modo que puedas establecer la afinidad de nodos para las cargas de trabajo que desees implementar en el grupo de trabajadores que tiene habilitado el autoescalado. Por ejemplo, la etiqueta podría serapp: nginx. Elija entre las siguientes opciones:- Cree una agrupación de nodos trabajadores de VPC o clásica distinta de la agrupación de nodos trabajadores
defaultcon la etiqueta que desea utilizar con las cargas de trabajo a ejecutar en la agrupación de nodos trabajadores escalada automáticamente. - Añada la etiqueta a una agrupación de nodos trabajadores existente distinta de la agrupación de nodos trabajadores
default.
- Cree una agrupación de nodos trabajadores de VPC o clásica distinta de la agrupación de nodos trabajadores
-
Confirme que la agrupación de nodos trabajadores tiene las etiquetas necesarias para el escalado automático. En la salida, verá la etiqueta
ibm-cloud.kubernetes.io/worker-pool-idnecesaria y la etiqueta que ha creado anteriormente para la afinidad de nodos. Si no ves estas etiquetas, añade un grupo de trabajadores y, a continuación, añade tu etiqueta para la afinidad de nodos.ibmcloud oc worker-pool get --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID | grep LabelsSalida de ejemplo de una agrupación de trabajadores con la etiqueta.
Labels: ibm-cloud.kubernetes.io/worker-pool-id=a1aa111111b22b22cc3c3cc444444d44-4d555e5 -
Aplique marcas en las agrupaciones de nodos trabajadores que desea escalar automáticamente de forma que agrupación de nodos trabajadores no acepte más cargas de trabajo que las que desee ejecutar en la agrupación de nodos trabajadores escalada automáticamente. Puedes obtener más información sobre taints y tolerations en la documentación de la comunidad sobre Kubernetes. Como ejemplo, puede establecer una marca de
use=autoscale:NoExecute. En este ejemplo, laNoExecutetaint expulsa los pods que no tienen la tolerancia correspondiente a dicha taint.
Próximos pasos
Tras preparar el clúster, instale el complemento de autoescalado del clúster.