Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo explica como configurar pools de nós para o provisionamento automático de nós (NAP) no AKS (Serviço de Kubernetes do Azure), incluindo seletores de SKU, limites de recursos e pesos de prioridade. Ele também fornece exemplos para ajudá-lo a começar.
O AKS Automatic inclui o NAP por padrão. Para clusters do AKS Standard, você deve habilitar o NAP antes de configurar seus pools de nós.
Como o NAP seleciona VMs para pools de nós
O NAP usa os requisitos de SKU da VM (máquina virtual) para decidir as melhores VMs para cargas de trabalho pendentes. Você pode configurar:
- Famílias de SKU e tipos de instância específicos.
- Limites e prioridades de recursos.
- Instâncias spot ou sob demanda.
- Arquitetura, GPU e outros requisitos de recursos.
O recurso NodePool define restrições nos nós que o NAP cria e nos pods que rodam nesses nós. Quando você habilita o NAP com a configuração do pool de nós padrão definida comoAuto, ele cria recursos padrãoNodePool. Você pode modificar esses pools de nós ou criar pools de nós extras para atender aos requisitos de carga de trabalho.
Como o NAP avalia e seleciona pools de nós
Ao configurar NodePools para o NAP, tenha em mente os seguintes comportamentos:
- O NAP requer pelo menos um
NodePoolpara funcionar. - O NAP avalia cada
NodePoolconfigurado. - O NAP ignora
NodePoolscom taints não tolerados por um pod. - O NAP aplica os taints de inicialização a nós provisionados, mas não requer tolerância de pod.
- O NAP funciona melhor com pools mutuamente exclusivos
NodePools, cujos requisitos não se sobrepõem, de modo que cada pod se encaixe em apenas um pool. Quando váriasNodePoolscorrespondem, o NAP usa a que tem o maior peso.
Examinar a configuração do pool de nós padrão
A configuração do Karpenter NodePool padrão denominado default criado pelo NAP é a seguinte:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: default
spec:
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
template:
spec:
nodeClassRef:
group: karpenter.azure.com
kind: AKSNodeClass
name: default
expireAfter: Never
# 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
O NAP também cria um pool de nós system-surge que fornece capacidade Linux AMD64 sob demanda para complementos críticos do sistema. Quando um pod pendente tolera a CriticalAddonsOnly=true:NoSchedule mancha e corresponde aos requisitos do pool, o NAP pode provisionar um nó a partir desse pool. Os nós criados pelo pool têm o kubernetes.azure.com/mode: system rótulo.
Gerenciar os pools de nós padrão
Ao criar um novo cluster do AKS com NAP habilitado usando a CLI do Azure, inclua o sinalizador --node-provisioning-default-pools para controlar se o AKS cria o NodePools padrão do NAP. Você também pode usar essa flag com az aks update quando habilitar o NAP em um cluster existente.
O --node-provisioning-default-pools sinalizador aceita os seguintes valores:
-
Auto(padrão): cria dois padrõesNodePoolspara uso imediato. -
None: não cria nenhumNodePools. Você deve definir o seu próprio.
Aviso
Alterando de Auto para None: se você alterar a configuração de Auto para None em um cluster existente, os padrões NodePools não são excluídos automaticamente. Antes de excluí-los, defina a capacidade de substituição adequada para complementos críticos do sistema. Você deve excluir o padrão NodePools manualmente se não precisar mais deles.
Opções de configuração do pool de nós
As seções a seguir descrevem várias opções de configuração no NodePools no NAP, incluindo rótulos conhecidos e seletores de SKU, limites de pool de nós e pesos do pool de nós.
Rótulos conhecidos e seletores de SKU
Kubernetes define rótulos bastante conhecidos que Azure implementa. Você pode definir esses rótulos na spec.requirements seção da NodePool API. O NAP também dá suporte a rótulos específicos de Azure para agendamento mais avançado.
A tabela a seguir lista os rótulos que você pode usar na spec.requirements seção de sua NodePool API para definir as características da VM para seus nós:
| Selector | Description | Example |
|---|---|---|
karpenter.sh/capacity-type |
Tipo de alocação de VM (Spot/Sob demanda) | À Vista |
karpenter.azure.com/sku-family |
Família de SKU de VM | D, F, L, etc. |
karpenter.azure.com/sku-series |
Série de SKU de VM | Dpls_v6 |
karpenter.azure.com/sku-name |
Nome de SKU explícito | Standard_A1_v2 |
karpenter.azure.com/sku-version |
Versão do SKU (sem "v"; pode se usar 1) | 1, 2 |
karpenter.azure.com/sku-cpu |
Número de CPUs na VM | 16 |
karpenter.azure.com/sku-memory |
Memória na VM em MiB | 131072 |
karpenter.azure.com/sku-gpu-name |
Nome da GPU | A100 |
karpenter.azure.com/sku-gpu-manufacturer |
Fabricante de GPU | nvidia |
karpenter.azure.com/sku-gpu-count |
Contagem de GPU por VM | 2 |
karpenter.azure.com/sku-networking-accelerated |
Se a VM possui rede acelerada | [verdadeiro, falso] |
karpenter.azure.com/sku-storage-premium-capable |
Se a VM dá suporte ao armazenamento de E/S Premium | [verdadeiro, falso] |
karpenter.azure.com/sku-storage-ephemeralos-maxsize |
Limite de tamanho para o disco do sistema operacional efêmero (SO) em GB | 92 |
kubernetes.azure.com/sku-cpu |
Número de CPUs na VM | 16 |
kubernetes.azure.com/sku-memory |
Memória na VM em MiB | 131072 |
kubernetes.azure.com/cluster |
Nome do cluster do AKS | my-cluster |
kubernetes.azure.com/mode |
Modo do pool de nós | [sistema, usuário] |
kubernetes.azure.com/priority |
Prioridade | [ponto, regular] |
kubernetes.azure.com/os-sku |
SKU do sistema operativo | [Ubuntu, AzureLinux] |
kubernetes.azure.com/fips_enabled |
Se o FIPS está habilitado | verdadeiro |
topology.kubernetes.io/zone |
Zonas de disponibilidade | [uksouth-1,uksouth-2,uksouth-3] |
kubernetes.io/os |
Sistema Operacional | linux |
kubernetes.io/arch |
Arquitetura da CPU (AMD64 ou ARM64) | [amd64, arm64] |
Os valores do seletor de memória nesta tabela são os valores em MiB informados em nós criados pelo NAP. Antes de adicionar um seletor, inspecione os rótulos em seus nós para confirmar o valor usado pelo cluster.
Exemplos da família de SKUs
O karpenter.azure.com/sku-family seletor permite que você direcione famílias de VM específicas.
| Família | Description |
|---|---|
| Série D | VMs de uso geral com taxa de CPU para memória equilibrada |
| Série F | Máquinas virtuais otimizadas para computação com alta proporção de CPU para memória |
| Série E | VMs com otimização de memória para aplicativos com uso intensivo de memória |
| Série L | VMs com otimização de armazenamento com alta taxa de transferência de disco |
| Série N | VMs habilitadas para GPU para cargas de trabalho com uso intensivo de computação |
Configuração de exemplo usando a família SKU:
requirements:
- key: karpenter.azure.com/sku-family
operator: In
values:
- D
- F
Exemplo de SKU de GPU
Para provisionar nós de GPU da NVIDIA com NAP, crie um NodePool que selecione tamanhos de VM habilitados para GPU. O exemplo a seguir permite que o NAP selecione SKUs de GPU NVIDIA da série N:
requirements:
- key: karpenter.azure.com/sku-family
operator: In
values:
- N
- key: karpenter.azure.com/sku-gpu-manufacturer
operator: In
values:
- nvidia
Se você quiser que o AKS instale e gerencie o driver de GPU da NVIDIA, o plug-in de dispositivo, o exportador de métricas do Data Center GPU Manager (DCGM) e os sinais de integridade da GPU em nós de GPU provisionados pelo NAP, configure a GPU gerenciada na referência AKSNodeClass. Para obter mais informações, consulte Criar um pool de nós de GPU gerenciado pelo AKS.
Exemplos de nome de SKU
O karpenter.azure.com/sku-name seletor permite que você especifique o tipo exato de instância de VM.
requirements:
- key: karpenter.azure.com/sku-name
operator: In
values:
- Standard_D4s_v3
- Standard_F8s_v2
Exemplos de versão do SKU
O karpenter.azure.com/sku-version seletor tem como destino gerações específicas de SKUs de VM.
requirements:
- key: karpenter.azure.com/sku-version
operator: In
values:
- "3" # v3 generation
- "5" # v5 generation
Exemplo de zona de disponibilidade
O topology.kubernetes.io/zone seletor permite que você especifique as zonas de disponibilidade para seus nós.
requirements:
- key: topology.kubernetes.io/zone
operator: In
values:
- eastus-1
- eastus-2
Observação
Para listar tamanhos de VM que dão suporte a zonas de disponibilidade em uma região, use o az vm list-skus comando com os --location <region> --zone --output table parâmetros. Confirme se o tamanho da VM selecionada dá suporte às zonas no NodePool requisito.
Exemplo de arquitetura
O kubernetes.io/arch seletor permite que você especifique a arquitetura da CPU para seus nós. O NAP suporta tanto os nós amd64 quanto os nós arm64.
requirements:
- key: kubernetes.io/arch
operator: In
values:
- amd64
- arm64
Exemplo do sistema operacional
O kubernetes.io/os seletor permite que você especifique o sistema operacional para seus nós.
requirements:
- key: kubernetes.io/os
operator: In
values:
- linux
Exemplo de tipo de capacidade
O karpenter.sh/capacity-type seletor permite especificar se as instâncias spot ou sob demanda devem ser usadas.
Observação
O NAP prioriza as instâncias Spot quando Spot e On-demand são especificados.
requirements:
- key: karpenter.sh/capacity-type
operator: In
values:
- spot
- on-demand
Limites do pool de nós
Por padrão, o NAP tenta agendar suas cargas de trabalho dentro da cota de Azure disponível. Para um pool de nós dinâmicos, você pode especificar limites de recursos agregados em todos os nós provisionados por esse pool. No exemplo a seguir, cpu: "1000" limita o pool a 1.000 núcleos de vCPU e memory: 1000Gi limita-o a 1.000 gibibytes de memória:
spec:
# Resource limits constrain the total size of the node pool.
# Limits prevent Node Auto Provisioning from creating new instances once the limit is exceeded.
limits:
cpu: "1000"
memory: 1000Gi
Pesos do pool de nós
Quando há vários pools de nós definidos, você pode definir uma preferência de onde uma carga de trabalho deve ser agendada, definindo o peso relativo nas definições dos pools de nós. O campo weight aceita um número inteiro de 1 a 100, e valores mais altos atribuem maior prioridade a um pool de nós. Se você omitir weight, seu valor será efetivamente 0. Por exemplo:
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
Pools de nós estáticos
Os pools de nós estáticos mantêm o número fixo de nós provisionados pelo NAP especificado no campo replicas, independentemente da demanda por pods. Para alterar a contagem de nós, dimensione explicitamente o NodePool, por exemplo, usando kubectl scale com nodepool static-node-pool --replicas=7. O valor opcional limits.nodes restringe o dimensionamento explícito e a capacidade temporária criada durante a substituição do nó. Para pools de nós estáticos, nodes é o único campo com suporte em limits; você não pode definir limites de CPU ou memória.
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: static-node-pool
spec:
replicas: 5
template:
spec:
requirements:
- key: karpenter.azure.com/sku-name
operator: In
values:
- Standard_D4s_v3
- Standard_F8s_v2
- key: topology.kubernetes.io/zone
operator: In
values:
- eastus-1
- eastus-2
- eastus-3
limits:
nodes: 10
Observação
Para pools de nós estáticos, é possível definir apenas nodes no campo limits. Você não pode definir limites de recursos ou weight, e a consolidação de interrupções não se aplica. Depois de criar um NodePool, você não poderá alterná-lo entre modos estáticos e dinâmicos adicionando ou removendo o replicas campo.
Próximas etapas
Para obter mais informações sobre o provisionamento automático de nós no AKS, consulte os seguintes artigos: