Compartir a través de


Configuración de grupos de nodos para el aprovisionamiento automático de nodos (NAP) en Azure Kubernetes Service (AKS)

En este artículo se explica cómo configurar grupos de nodos para el aprovisionamiento automático de nodos (NAP) en Azure Kubernetes Service (AKS), incluidos los selectores de SKU, los límites de recursos y los pesos de prioridad. También proporciona ejemplos para ayudarle a empezar.

Descripción general de los pools de nodos en NAP

NAP usa los requisitos de SKU de máquina virtual (VM) para decidir las mejores máquinas virtuales para cargas de trabajo pendientes. Puede configurar:

  • Familias de SKU y tipos de instancia específicos.
  • Límites y prioridades de recursos.
  • Instancias a petición o de acceso puntual.
  • Requisitos de arquitectura y funcionalidades.

El NodePool recurso establece restricciones para los nodos creados por NAP y para los pods que se ejecutan en esos nodos. Cuando se instala NAP por primera vez, se crea un valor predeterminado NodePool. Puede modificar este grupo de nodos o crear grupos de nodos adicionales para satisfacer los requisitos de carga de trabajo.

Comportamientos clave de NodePools en NAP

Al configurar NodePools para NAP, tenga en cuenta los siguientes comportamientos:

  • NAP requiere al menos una NodePool para funcionar.
  • NAP evalúa cada configuración NodePool.
  • NAP omite NodePools con intolerancias no admitidas por un pod.
  • NAP aplica intolerancias de inicio a los nodos aprovisionados, pero no requiere tolerancia de pods.
  • NAP funciona mejor con NodePools mutuamente excluyentes. Cuando hay varias NodePools coincidencias, usa la que tiene mayor peso.

Revisión de la configuración predeterminada del grupo de nodos

La configuración del Karpenter NodePool predeterminado denominado default creado por NAP es el siguiente:

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
spec:
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
    expireAfter: Never
  template:
    spec:
      nodeClassRef:
        name: default

      # Requirements that constrain the parameters of provisioned nodes.
      # These requirements are combined with pod.spec.affinity.nodeAffinity rules.
      # Operators { In, NotIn, Exists, DoesNotExist, Gt, and Lt } are supported.
      # https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators
      requirements:
      - key: kubernetes.io/arch
        operator: In
        values:
        - amd64
      - key: kubernetes.io/os
        operator: In
        values:
        - linux
      - key: karpenter.sh/capacity-type
        operator: In
        values:
        - on-demand
      - key: karpenter.azure.com/sku-family
        operator: In
        values:
        - D

También crea un system-surge grupo de nodos, que ayuda a escalar automáticamente los nodos del grupo de sistemas.

Control de la configuración del grupo de nodos predeterminado durante la creación del clúster

Al crear un nuevo clúster de AKS habilitado con NAP mediante la CLI de Azure, puede incluir la --node-provisioning-default-pools marca para controlar la configuración del NAP NodePoolpredeterminado.

La --node-provisioning-default-pools marca controla la configuración de NAP NodePool predeterminada y acepta los siguientes valores:

  • Auto (valor predeterminado): crea dos estándares NodePools para su uso inmediato.
  • None: No crea ningún NodePools. Debe definirlo usted mismo.

Advertencia

Cambiar de Auto a None: si cambia la configuración de Auto a None en un clúster existente, el valor predeterminado NodePools no se eliminará automáticamente. Debe eliminarlos manualmente si ya no los necesita.

Opciones de configuración del grupo de nodos

En las secciones siguientes se describen varias opciones de configuración para NodePools en NAP, incluidas las etiquetas conocidas y los selectores de SKU, los límites del grupo de nodos y los pesos del grupo de nodos.

Etiquetas conocidas y selectores de SKU

Kubernetes define etiquetas conocidas que Implementa Azure. Puede definir estas etiquetas en la spec.requirements sección de la NodePool API. NAP también admite etiquetas específicas de Azure para una programación más avanzada.

karpenter.azure.com Selectores de SKU

En la tabla siguiente se enumeran los karpenter.azure.com selectores de SKU que puede usar en la sección spec.requirements de su NodePool API para definir características de VM para sus nodos:

Selector Description Example
karpenter.azure.com/sku-family Familia de SKU de máquina virtual D, F, L, etc.
karpenter.azure.com/sku-name Nombre de SKU explícito Standard_A1_v2
karpenter.azure.com/sku-version Versión de SKU (sin "v", puede usar 1) 1, 2
karpenter.sh/capacity-type Tipo de asignación de máquina virtual (spot/ a petición) Zona
karpenter.azure.com/sku-cpu Número de CPU en la máquina virtual 16
karpenter.azure.com/sku-memory Memoria en la máquina virtual en MiB 131 072
kubernetes.azure.com/sku-cpu Número de CPU en la máquina virtual 16
kubernetes.azure.com/sku-memory Memoria en la máquina virtual en MiB 131 072
karpenter.azure.com/sku-gpu-name Nombre de GPU A100
karpenter.azure.com/sku-gpu-manufacturer Fabricante de GPU nvidia
karpenter.azure.com/sku-gpu-count Recuento de GPU por máquina virtual 2
karpenter.azure.com/sku-networking-accelerated Si la máquina virtual ha acelerado las redes [verdadero, falso]
karpenter.azure.com/sku-storage-premium-capable Si la máquina virtual admite almacenamiento de E/S Premium [verdadero, falso]
karpenter.azure.com/sku-storage-ephemeralos-maxsize Límite de tamaño para el disco del sistema operativo (SO) efímero en Gb 92

kubernetes.io Etiquetas conocidas

En la tabla siguiente se enumeran las kubernetes.io etiquetas conocidas que puede utilizar en la sección de su spec.requirements API para definir las características del nodo para sus nodos:

Etiqueta Description Example
topology.kubernetes.io/zone Zonas de disponibilidad [uksouth-1,uksouth-2,uksouth-3]
kubernetes.io/os Sistema operativo Linux
kubernetes.io/arch Arquitectura de CPU (AMD64 o ARM64) [amd64, arm64]

Ejemplos de familia de SKU

El karpenter.azure.com/sku-family selector permite establecer como destino familias de máquinas virtuales específicas.

Familia Description
Serie D Máquinas virtuales de uso general con una relación equilibrada de CPU a memoria
Serie F Máquinas virtuales optimizadas para cómputo con una alta proporción de CPU a memoria
Serie E Máquinas virtuales optimizadas para memoria para aplicaciones con uso intensivo de memoria
Serie L Máquinas virtuales optimizadas para almacenamiento con alto rendimiento de disco
Serie N Máquinas virtuales habilitadas para GPU para cargas de trabajo de proceso intensivo

Configuración de ejemplo mediante la familia de SKU:

requirements:
- key: karpenter.azure.com/sku-family
  operator: In
  values:
  - D
  - F

Ejemplos de nombres de SKU

El karpenter.azure.com/sku-name selector permite especificar el tipo exacto de instancia de máquina virtual.

requirements:
- key: karpenter.azure.com/sku-name
  operator: In
  values:
  - Standard_D4s_v3
  - Standard_F8s_v2

Ejemplos de versión de SKU

El karpenter.azure.com/sku-version selector tiene como destino generaciones específicas de SKU de máquina virtual.

requirements:
- key: karpenter.azure.com/sku-version
  operator: In
  values:
  - "3"  # v3 generation
  - "5"  # v5 generation

Ejemplo de zona de disponibilidad

El topology.kubernetes.io/zone selector permite especificar las zonas de disponibilidad para los nodos.

requirements:
- key: topology.kubernetes.io/zone
  operator: In
  values:
  - eastus-1
  - eastus-2

Nota:

Puede encontrar zonas disponibles para su región mediante el comando de la az account list-locations --output table CLI de Azure.

Ejemplo de arquitectura

El kubernetes.io/arch selector permite especificar la arquitectura de CPU para los nodos. NAP admite nodos amd64 y arm64 .

requirements:
- key: kubernetes.io/arch
  operator: In
  values:
  - amd64
  - arm64

Ejemplo del sistema operativo

El kubernetes.io/os selector permite especificar el sistema operativo para los nodos.

requirements:
- key: kubernetes.io/os
  operator: In
  values:
  - linux

Ejemplo de tipo de capacidad

El karpenter.sh/capacity-type selector permite especificar si se deben usar instancias de Spot o a petición.

Nota:

NAP da prioridad a las instancias de acceso puntual cuando se especifican las de acceso puntual y bajo demanda.

requirements:
- key: karpenter.sh/capacity-type
  operator: In
  values:
  - spot
  - on-demand

Límites del grupo de nodos

De forma predeterminada, NAP intenta programar las cargas de trabajo dentro de la cuota de Azure que tiene disponible. También puede especificar el límite superior de recursos que usa un grupo de nodos especificando límites dentro de la especificación del grupo de nodos. Por ejemplo:

spec:
  # Resource limits constrain the total size of the cluster.
  # Limits prevent Node Auto Provisioning from creating new instances once the limit is exceeded.
  limits:
    cpu: "1000"
    memory: 1000Gi

Pesos del grupo de nodos

Cuando haya definido varios grupos de nodos, puede establecer una preferencia de dónde se debe programar una carga de trabajo definiendo el peso relativo en las definiciones del grupo de nodos. Por ejemplo:

spec:
  # Priority given to the node pool when the scheduler considers which to select. 
  # Higher weights indicate higher priority when comparing node pools.
  # Specifying no weight is equivalent to specifying a weight of 0.
  weight: 10

Pasos siguientes

Para obtener más información sobre el aprovisionamiento automático de nodos en AKS, consulte los siguientes artículos: