ACK extiende la programación de Kubernetes con políticas para trabajos, conscientes de topología, conscientes de QoS y de desprogramación.
Antes de empezar
-
Seleccione una política de programación según su rol y escenario de negocio:
Los ingenieros de O&M se enfocan en el costo del clúster y en maximizar la utilización de recursos, al tiempo que garantizan la alta disponibilidad del clúster, equilibran las cargas de los nodos y evitan puntos únicos de fallo (SPOF).
Los desarrolladores de aplicaciones necesitan un despliegue y gestión sencillos, así como recursos adecuados (como CPU, GPU y memoria) para asegurar el rendimiento de sus aplicaciones.
-
Para utilizar eficazmente las políticas de programación de ACK, familiarícese con el Programador de Kubernetes, las Etiquetas de nodo](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#built-in-node-labels), la Evicción por presión de nodo](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/) y las Restricciones de distribución de topología de pods](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#pod-topology-spread-constraints).
El programador de ACK utiliza la misma política predeterminada que el programador de Kubernetes de código abierto, la cual consta de los complementos Filter](https://kubernetes.io/docs/concepts/scheduling-eviction/scheduling-framework/#filter) y Score](https://kubernetes.io/docs/concepts/scheduling-eviction/scheduling-framework/#scoring).
Políticas de programación nativas de Kubernetes
Las políticas de programación nativas de Kubernetes se dividen en dos categorías: programación de nodos y programación entre pods.
Políticas de programación de nodos: asignan pods a nodos que cumplen con características específicas y condiciones de recursos.
Políticas de programación entre pods: controlan la distribución de pods para optimizar el despliegue y garantizar la alta disponibilidad de las aplicaciones.
|
Política |
Descripción |
Escenario |
|
Etiquete los nodos con pares clave-valor y utilice nodeSelector para programar pods en los nodos coincidentes. Por ejemplo, schedule pods to specific nodes o schedule pods to a specific node pool. |
Método básico de selección de nodos que no admite funciones de programación más complejas, como reglas de programación flexible. |
|
|
Ofrece mayor flexibilidad y granularidad que nodeSelector. Por ejemplo, incluye la regla estricta |
Programa pods en nodos con características específicas, como regiones, tipos de dispositivo o hardware. Las reglas de anti-afinidad distribuyen los pods entre distintos nodos. |
|
|
Un taint consta de una clave, un valor y un efecto (efectos comunes: |
|
|
|
Las etiquetas de los pods determinan la programación de pod a nodo. Admite la regla de afinidad |
|
Políticas de programación de ACK
ACK amplía la programación de Kubernetes para cubrir requisitos como el escalado ordenado con reducción inversa y la programación consciente de la carga basada en el uso real de recursos del nodo.
Configurar la programación de recursos basada en prioridad
Rol objetivo: Ingenieros de O&M del clúster.
Descripción: En clústeres con tipos de instancia mixtos (como instancias ECS e instancias de contenedor elástico) y métodos de facturación variados (suscripción, pay-as-you-go y preemptible instances), configure la programación de recursos basada en prioridad para definir el orden de selección de nodos durante la programación de pods e invertir dicho orden durante la reducción de escala.
|
Política |
Descripción |
Escenario |
Referencia |
|
Programación de recursos basada en prioridad personalizada |
Especifique un valor personalizado de La reducción de escala invierte este orden: primero las instancias de contenedor elástico, luego las instancias ECS pay-as-you-go y por último las instancias ECS de suscripción. |
|
Programación de trabajos
Rol objetivo: Ingenieros de O&M del clúster.
Descripción: El programador predeterminado no es adecuado para la programación de trabajos por lotes. ACK admite gang scheduling y capacity scheduling para trabajos por lotes.
|
Política |
Descripción |
Escenario |
Referencia |
|
Gang Scheduling |
Todos los pods relacionados se programan conjuntamente o ninguno en absoluto, lo que evita que procesos anómalos bloqueen al grupo. |
|
|
|
Capacity Scheduling |
Reserva recursos para namespaces o grupos de usuarios específicos, y mejora la utilización mediante el uso compartido de recursos cuando los recursos del clúster son limitados. |
En clústeres multiinquilino, los distintos ciclos de vida de los recursos y patrones de uso provocan una baja utilización. El uso compartido y la recuperación de recursos mejoran la utilización general. |
Programación consciente de topología
Rol objetivo: Ingenieros de O&M del clúster.
Descripción: Las cargas de trabajo de aprendizaje automático y big data requieren una comunicación intensiva entre pods, pero el programador predeterminado distribuye los pods uniformemente en el clúster, lo que prolonga los tiempos de finalización de los trabajos. Los mecanismos nativos de afinidad no pueden reintentar la asignación en múltiples dominios de topología.
|
Descripción |
Escenario |
Referencia |
|
El programador utiliza etiquetas de gang scheduling para garantizar que todas las solicitudes de recursos de los pods se cumplan simultáneamente. La programación consciente de topología itera a través de dominios de topología para encontrar uno que satisfaga todos los requisitos de los pods. Asocie node pools con deployment sets para programar pods en instancias ECS dentro del mismo conjunto de despliegue de baja latencia y mejorar el rendimiento del trabajo. |
En trabajos de aprendizaje automático o big data, los pods necesitan comunicarse frecuentemente. El programador itera a través de dominios de topología para encontrar uno que satisfaga todos los requisitos de los pods, reduciendo así el tiempo de finalización del trabajo. |
Programación consciente de carga
Rol objetivo: Ingenieros de O&M del clúster y desarrolladores de aplicaciones.
Descripción: El programador nativo asigna pods basándose en la asignación de recursos, no en el uso real. Dado que las cargas de los nodos cambian dinámicamente según el tráfico y las cargas de trabajo, el programador nativo no puede detectar las cargas de recursos en tiempo real.
|
Descripción |
Escenario |
Referencia |
|
El programador de ACK supervisa el historial de carga de los nodos y estima el uso de recursos de los nuevos pods para programarlos en nodos con menor carga, evitando fallos por sobrecarga. |
Aplicaciones sensibles a la carga, la latencia de acceso o la QoS de recursos. |
Use load-aware hotspot descheduling para evitar cargas desequilibradas en los nodos.
Programación consciente de QoS
Rol objetivo: Ingenieros de O&M del clúster y desarrolladores de aplicaciones.
Descripción: Las clases de QoS de Kubernetes (Guaranteed, Burstable, BestEffort) determinan la prioridad de evicción de pods cuando los recursos del nodo son insuficientes. ACK añade programación consciente de SLO para mejorar el rendimiento de aplicaciones sensibles a la latencia, garantizando al mismo tiempo el acceso a recursos para trabajos de menor prioridad.
|
Política |
Descripción |
Escenario |
Referencia |
|
CPU Burst |
El sistema operativo puede limitar el uso de CPU del contenedor dentro de un ciclo (limitación de CPU). CPU Burst permite que los contenedores inactivos acumulen segmentos de tiempo de CPU y superen el límite de CPU durante picos de demanda, mejorando el rendimiento y reduciendo la latencia. |
|
|
|
Programación de CPU consciente de topología |
Fija pods sensibles a la CPU a núcleos específicos para evitar la degradación del rendimiento causada por cambios frecuentes de contexto y acceso a memoria cross-NUMA. |
|
|
|
Programación de GPU consciente de topología |
Cuando varios pods intensivos en GPU se ejecutan simultáneamente, pueden competir por recursos de GPU y alternar entre GPUs o nodos NUMA, degradando el rendimiento. La programación de GPU consciente de topología asigna cargas de trabajo a GPUs específicas, reduciendo el acceso a memoria cross-NUMA y mejorando el rendimiento. |
|
|
|
Sobreasignación dinámica de recursos |
Recupera recursos asignados pero no utilizados por los pods y los programa para trabajos de baja prioridad, permitiendo la sobreasignación. Utilice conjuntamente las siguientes políticas de QoS de nodo único para evitar que las aplicaciones se afecten mutuamente:
|
Mejora la utilización de recursos del clúster mediante la coubicación. Los escenarios típicos incluyen entrenamiento e inference de modelos de ML, procesamiento y análisis por lotes de big data, servicios en línea y copias de seguridad sin conexión. |
|
|
Modificar dinámicamente los parámetros de recursos de un pod |
En Kubernetes 1.27 o anterior, modificar parámetros del contenedor requiere eliminar y recrear el pod. ACK le permite modificar límites de CPU, memoria e IOPS de disco sin reiniciar el pod. |
Ajustes temporales de recursos de CPU o memoria. |
Desprogramación
Rol objetivo: Ingenieros de O&M del clúster y desarrolladores de aplicaciones.
Descripción: A medida que cambian las condiciones del clúster, los pods en ejecución pueden necesitar migración a nodos más adecuados.
|
Política |
Descripción |
Escenario |
Referencia |
|
Desprogramación |
Reprograma pods ubicados incorrectamente hacia nodos óptimos cuando se forman puntos críticos debido a un uso desigual de recursos o cambios en atributos de nodos, garantizando la alta disponibilidad y eficiencia de la carga de trabajo. |
|
|
|
Trabajo conjunto con desprogramación de puntos críticos consciente de carga |
Combina la programación consciente de carga y la desprogramación de puntos críticos para supervisar las cargas de los nodos y reequilibrar automáticamente aquellos que superan el umbral de carga. |
Facturación
La programación de ACK genera cargos por gestión de clústeres y recursos en la nube según el billing rules. Cargos adicionales por componentes de programación:
El programador predeterminado de ACK (kube-scheduler) es gratuito para instalar y usar.
La programación y desprogramación de recursos de ACK se basan en ack-koordinator. ack-koordinator es gratuito para instalar y usar, pero puede generar cargos adicionales en escenarios específicos. Consulte ack-koordinator (FKA ack-slo-manager).
Preguntas frecuentes
Para problemas relacionados con la programación, consulte Scheduling FAQ.
Referencias
Para obtener una introducción y notas de versión sobre kube-scheduler y ack-koordinator, consulte Container Service for Kubernetes:kube-scheduler y ack-koordinator (FKA ack-slo-manager).
Para personalizar el comportamiento de kube-scheduler, consulte Customize scheduler parameters.
Para conocer las mejores prácticas de programación, como la arquitectura de coubicación, consulte Best practices for resource scheduling.
Habilite cost insights para consultar el uso de recursos, la asignación de costos y las recomendaciones de ahorro para clústeres de ACK.
Para programación de GPU y aislamiento de memoria, consulte GPU sharing.
Para programación de nodos virtuales, consulte Schedule a pod to a virtual node.