Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo, aprenderá a empaquetar los nodos en contenedores para mejorar el uso de nodos para los clústeres de Azure Kubernetes Service (AKS) mediante el complemento de programación en árbol, NodeResourcesFit. El programador predeterminado de AKS opera en un NodeResourcesFit:LeastAllocated modo, que da prioridad a los nodos con menor utilización al programar pods. Los perfiles de programador configurables en AKS permiten cambiar este comportamiento predeterminado y ajustar la configuración para priorizar los nodos con un mayor uso. En esta documentación se abordan tres perfiles de planificador personalizados diferentes, destacando la mejor práctica recomendada para mejorar la utilización mientras se reducen los puntos activos del nodo.
El empaquetado de nodos es una estrategia de programación que maximiza la utilización de recursos al aumentar la densidad de pods en los nodos, en lugar de distribuir los pods entre un conjunto de nodos o escalar automáticamente los nodos de forma prematura. El empaquetado de contenedores ayuda a minimizar los recursos desperdiciados y puede reducir el costo operativo de mantener los nodos inactivos o infrautilizados. Mejorar el uso de nodos es fundamental, ya que los datos muestran que la CPU y la memoria suelen ser recursos por encima de los solicitados. Además, a medida que crece la adopción de GPU, el uso eficaz de los aceleradores se vuelve igualmente crítico debido a su escasez y costo relativos.
Limitaciones
- AKS actualmente no administra la implementación de programadores de terceros ni de complementos de programación externos.
- AKS no admite complementos de programación integrados destinados al
aks-systemplanificador. Esta restricción se aplica para ayudar a evitar cambios inesperados en los complementos de AKS habilitados en el clúster. Además, no se puede definir unprofileelemento denominadoaks-system.
Prerrequisitos
- La versión
2.76.0de la CLI de Azure o posterior. Ejecuteaz --versionpara buscar la versión y ejecuteaz upgradepara actualizar la versión. Si necesita instalar o actualizar, consulte Install Azure CLI. - Versión
1.33de Kubernetes o posterior que se ejecuta en el clúster de AKS. - La
aks-previewextensión de la CLI de Azure versión18.0.0b27o posterior. - Registre la bandera de característica
UserDefinedSchedulerConfigurationPreviewen su suscripción de Azure.
Habilitación de la configuración del perfil del programador en un clúster de AKS
Puede habilitar la configuración del perfil de programación en un clúster de AKS nuevo o existente.
Cree un clúster AKS con la configuración del perfil del programador habilitada utilizando el
az aks createcomando con el--enable-upstream-kubescheduler-user-configurationindicador .# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<aks-cluster-name> # Create an AKS cluster with schedule profile configuration enabled az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-upstream-kubescheduler-user-configuration \ --generate-ssh-keysUna vez completado el proceso de creación, conéctese al clúster mediante el
az aks get-credentialscomando .az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Comprobación de la instalación del controlador del programador
Después de que haya habilitado la característica en el clúster de AKS, verifique que la definición de recurso personalizada (CRD) del controlador del programador se haya instalado correctamente mediante el comando
kubectl get.kubectl get crd schedulerconfigurations.aks.azure.comNota:
Este comando no se realizará correctamente si la característica no se ha habilitado correctamente en la sección anterior.
Configuración del empaquetamiento de nodos con el plugin RequestedtoCapacity
De los tres perfiles, RequestedToCapacityRatio proporciona el control de usuario más granular para asignar nodos a un uso explícito. Por ejemplo, este perfil de programación se ha configurado para favorecer los nodos dentro de un rango de utilización del 50-85 %, evitar nodos vacíos y priorizar en último lugar los nodos casi completos al 90 % de uso o más, dejando un margen de maniobra. Dado este nivel de detalle, RequestedtoCapacity es la estrategia de puntuación recomendada para el empaquetado de nodos en contenedores en AKS para los clústeres de producción.
Esta configuración hace que el uso de la CPU sea el factor dominante en la selección de nodos, agrupando nodos, a la vez que evita la sobresaturación de las aplicaciones intensivas en CPU. Por último, debe deshabilitar el PodTopologySpread complemento, ya que puede invalidar la puntuación ponderada de NodeResourcesFit si se deja habilitada de forma predeterminada.
-
NodeResourcesFitcontrola cómo el programador evalúa si un nodo tiene suficientes recursos para ejecutar un pod. -
scoringStrategy: RequestedToCapacityRatiopuntúa los nodos en función de la relación de los recursos solicitados con respecto a la capacidad total del nodo después de colocar hipotéticamente el pod. -
Resources, especifica queCPUyMemoryson los recursos principales que se están considerando para la puntuación. Con un peso de8, los nodos con uso de CPU tienen una puntuación 8 veces superior a la memoria durante el ciclo de planificación del pod. Esto aumenta la probabilidad de que se seleccionen nodos con un uso elevado. -
shape:asigna el uso del nodo a la puntuación del programador. Cada punto representa un porcentaje de uso y su puntuación correspondiente, con una puntuación lineal entre puntos.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-RtC
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
disabled:
- name: PodTopologySpread
pluginConfig:
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: RequestedToCapacityRatio
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
requestedToCapacityRatio:
shape:
- utilization: 0
score: 0
- utilization: 30
score: 9
- utilization: 50
score: 10
- utilization: 85
score: 10
- utilization: 90
score: 5
- utilization: 100
score: 0
Configuración del empaquetado de nodos en contenedores con el complemento MostAllocated
La configuración del programador con MostAllocated prioriza exclusivamente los nodos en función del uso de recursos. Cuanto mayor sea el uso de los recursos, más alto se puntúa un nodo, evitando los nodos no usados o el escalado hasta que sea necesario. De forma aislada, esta configuración corre el riesgo de saturar los nodos más allá de los límites deseables, lo que provoca limitaciones o cuellos de botella adicionales.
Esta configuración hace que el uso de la CPU sea el factor dominante en la selección del nodo. Para garantizar un comportamiento coherente, debe deshabilitar el PodTopologySpread complemento, ya que puede invalidar la puntuación ponderada de NodeResourcesFit si se deja habilitada de forma predeterminada.
-
NodeResourcesFitcontrola cómo el programador evalúa si un nodo tiene suficientes recursos para ejecutar un pod. -
scoringStrategy: MostAllocatedpuntuaciones basadas en las solicitudes de pod.MostAllocatedindica al programador que prefiera nodos con un uso elevado de recursos. Esta estrategia promueve la colocación densa de pods y ayuda a lograr un mejor uso de nodos. -
Resources, especifica queCPUyMemoryson los recursos principales que se están considerando para la puntuación. Con un peso de8, los nodos con uso de CPU tienen una puntuación 8 veces superior a la memoria durante el ciclo de planificación del pod. Esto aumenta la probabilidad de que se seleccionen nodos con un uso elevado.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-mA
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
disabled:
- name: PodTopologySpread
pluginConfig:
# NodeResourcesFit configuration
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: MostAllocated
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
Configuración del empaquetado de contenedores de nodos con MostAllocated y NodeResourcesBalancedAllocation Plugins
Esta configuración busca agregar algunos límites de protección a la estrategia MostAllocated sencilla y eficaz mediante la puntuación de nodos en función del uso equilibrado de los recursos de destino.
NodeResourcesBalancedAllocation fomenta la colocación de pods en los nodos con un uso proporcional definido por el usuario, incrementando la eficiencia general, a la vez que evita cuellos de botella causados por la presión asimétrica de recursos. Por ejemplo, los nodos enlazados a la CPU con mucha memoria no utilizada se puntuarían más abajo en favor de los nodos con un mejor equilibrio de uso de CPU y memoria.
-
NodeResourcesBalancedAllocationpuntúa los nodos en función de cómo se equilibra el uso de recursos entre varios recursos. En lugar de maximizar el uso de un único recurso, este complemento prefiere nodos en los que el consumo de recursos es proporcional. -
Resourcesespecifica qué recursos se consideran durante la evaluación del equilibrio. Con la CPU y la memoria ponderadas igualmente, los nodos se puntúan más alto cuando ambos recursos se consumen en niveles similares.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-mA-BalancedAllocation
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
- name: NodeResourcesBalancedAllocation
disabled:
- name: PodTopologySpread
pluginConfig:
# NodeResourcesFit configuration
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: MostAllocated
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
- name: NodeResourcesBalancedAllocation
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesBalancedAllocationArgs
resources:
- name: cpu
weight: 1
- name: memory
weight: 1
Asignación de un perfil de programador a un clúster de AKS completo
Cree un archivo denominado
cpu-bin-packing-scheduler.yaml, con el CRD denominadoupstreamAplique el manifiesto de configuración de programación mediante el comando
kubectl apply.kubectl apply -f cpu-bin-packing-scheduler.yamlPara aplicar este mecanismo de programación a cargas de trabajo específicas, actualice las implementaciones de pod con lo siguiente
schedulerName.... ... spec: schedulerName: binpacking-scheduler ... ...
Pasos siguientes
Para más información sobre el programador de AKS, otras configuraciones y procedimientos recomendados, consulte los siguientes recursos: