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 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
NodePoolpara funcionar. - NAP evalúa cada configuración
NodePool. - NAP omite
NodePoolscon 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
NodePoolsmutuamente excluyentes. Cuando hay variasNodePoolscoincidencias, 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ándaresNodePoolspara su uso inmediato. -
None: No crea ningúnNodePools. 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: