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 AKSNodeClass recursos para configurar configurações específicas do Azure para o provisionamento automático de nós (NAP) no AKS (Serviço de Kubernetes do Azure) usando o Karpenter.
AKSNodeClass permite personalizar vários aspectos dos nós que o Karpenter provisiona, como a imagem de máquina virtual (VM), o tamanho do disco do sistema operacional (OS), o número máximo de pods por nó e as configurações de kubelet.
Importante
A partir de 30 de novembro de 2025, o AKS (Serviço de Kubernetes do Azure) não dá mais suporte ou fornece atualizações de segurança para o Azure Linux 2.0. A imagem do nó do Azure no Linux 2.0 está congelada na versão 202512.06.0. A partir de 31 de março de 2026, as imagens de nó serão removidas e não será possível escalar os grupos de nós. Migre para uma versão do Azure Linux com suporte atualizando os pools de nós para uma versão do Kubernetes com suporte ou migrando para o osSku AzureLinux3. Para obter mais informações, consulte [Desativação] Pools de nós do Azure Linux 2.0 no AKS.
Visão geral dos recursos do AKSNodeClass
AKSNodeClass os recursos permitem que você defina configurações específicas do Azure para NAP. Cada NodePool recurso deve fazer referência a um AKSNodeClass usando spec.template.spec.nodeClassRef. Você pode ter múltiplos NodePools que apontam para o mesmo AKSNodeClass, o que permite compartilhar configurações comuns do Azure entre diferentes pools de nós.
Configuração da família de imagens
O campo imageFamily dita a imagem padrão da VM e a lógica de bootstrap para nós fornecidos através do AKSNodeClass. Se você não especificar uma família de imagens, o padrão será Ubuntu2204. Há suporte para GPUs com ambas as famílias de imagens em tamanhos de VM compatíveis.
Famílias de imagens com suporte
-
Ubuntu: O Ubuntu 22.04 LTS (Suporte de Longo Prazo) é a distribuição padrão do Linux para nós do AKS. -
AzureLinux: o Linux do Azure é a distribuição alternativa do Linux da Microsoft para cargas de trabalho do AKS. Para obter mais informações, consulte a documentação do Azure Linux
Configuração da família de imagens de exemplo
O exemplo a seguir configura o AKSNodeClass para usar a família de imagens AzureLinux.
spec:
imageFamily: AzureLinux
Configuração de sub-rede de rede virtual (VNet)
O vnetSubnetID campo especifica qual sub-rede VNet do Azure deve ser usada para provisionar interfaces de rede de nós. Esse campo é opcional. Se você não especificar uma sub-rede, o NAP usará a sub-rede padrão configurada durante a instalação do Karpenter. Para obter mais informações, consulte as configurações de sub-rede para NAP.
Configuração de sub-rede de exemplo
A ID da sub-rede deve estar no formato completo do ARM (Azure Resource Manager), conforme mostrado no exemplo a seguir:
spec:
vnetSubnetID: "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/virtualNetworks/{vnet-name}/subnets/{subnet-name}"
Configuração de tamanho do disco do sistema operacional
O campo osDiskSizeGB especifica o tamanho do disco do sistema operacional em gigabytes. O valor padrão é 128 GB e o valor mínimo é 30 GB.
Considere tamanhos maiores de disco do sistema operacional para cargas de trabalho que:
- Armazene dados significativos localmente.
- Exigir espaço extra para imagens de contêiner.
- Tem requisitos elevados de entrada/saída (E/S) de disco.
Configuração de tamanho de disco do sistema operacional de exemplo
spec:
osDiskSizeGB: 256 # 256 GB OS disk
Configuração de disco do sistema operacional efêmero
O NAP usa automaticamente discos do sistema operacional efêmero quando disponíveis e adequados para o tamanho do disco solicitado. Os discos de sistema operacional efêmero fornecem melhor desempenho e menor custo em comparação aos discos gerenciados.
Critérios de seleção de disco efêmero
O sistema escolhe automaticamente discos Efêmeros nos seguintes cenários:
- O tipo de instância de VM dá suporte a discos de SO efêmeros.
- A capacidade do disco efêmero é maior ou igual à solicitada
osDiskSizeGB. - A VM tem capacidade de armazenamento efêmera suficiente.
Se essas condições não forem atendidas, o sistema retornará ao uso de discos gerenciados.
Tipos de disco efêmero e priorização
As VMs do Azure podem ter diferentes tipos de armazenamento efêmero. O sistema usa a seguinte ordem de prioridade:
- Discos NVMe (maior desempenho)
- Discos de cache (desempenho equilibrado)
- Discos de recurso (desempenho básico)
Exemplo de configuração de disco efêmero
Você pode usar os requisitos do pool de nós para garantir que os nós tenham capacidade suficiente de disco efêmero, conforme mostrado no exemplo a seguir:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: ephemeral-disk-pool
spec:
template:
spec:
requirements:
- key: karpenter.azure.com/sku-storage-ephemeralos-maxsize
operator: Gt
values: ["128"] # Require ephemeral disk larger than 128 GB
nodeClassRef:
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
name: my-node-class
---
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
name: my-node-class
spec:
osDiskSizeGB: 128 # This will use ephemeral disk if available and large enough
Essa configuração garante que somente tipos de instância de VM com discos efêmeros maiores que 128 GB sejam selecionados, garantindo o uso de discos efêmeros para o tamanho do disco do sistema operacional especificado.
Configuração de número máximo de pods
O campo maxPods especifica o número máximo de pods que podem ser agendados em um nó. Essa configuração afeta a densidade do cluster e a configuração de rede.
O valor mínimo é maxPods 10 e o valor máximo é 250.
Comportamento padrão para maxPods
O comportamento maxPods padrão depende da configuração do plug-in de rede. A tabela a seguir resume os valores padrão:
| Configuração do plug-in de rede | Padrão maxPods por nó |
|---|---|
| CNI do Azure com rede padrão (v1 ou NodeSubnet) | 30 |
| CNI do Azure com rede de sobreposição | 250 |
| Nenhum (nenhum plug-in de rede) | 250 |
| Outras configurações | 110 (padrão do Kubernetes) |
Configuração máxima de pods de exemplo
spec:
maxPods: 50 # Allow up to 50 pods per node
Configuração do Kubelet
A seção kubelet permite que você configure vários parâmetros kubelet que afetam o comportamento dos nós. Esses parâmetros são argumentos kubelet típicos, portanto, o provedor do Azure simplesmente os passa para o kubelet no nó.
Importante
Defina as configurações de kubelet com cuidado e teste as alterações em ambientes de não produção primeiro.
Gerenciamento de CPU
As seguintes configurações controlam o comportamento de gerenciamento de CPU para o kubelet:
spec:
kubelet:
cpuManagerPolicy: "static" # or "none"
cpuCFSQuota: true
cpuCFSQuotaPeriod: "100ms"
-
cpuManagerPolicy: controla como o kubelet aloca recursos de CPU. Defina para"static"a fixação de CPU em cargas de trabalho sensíveis à latência. -
cpuCFSQuota: habilita a imposição de cotas do Agendador Completamente Justo (CFS) da CPU para contêineres que especificam limites de CPU. -
cpuCFSQuotaPeriod: define o período de cota do CFS da CPU.
Coleta de lixo de imagens
As seguintes configurações controlam o comportamento de coleta de lixo de imagem para o kubelet:
spec:
kubelet:
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
Essas configurações controlam quando o kubelet executa a GC de imagens de contêiner:
-
imageGCHighThresholdPercent: percentual de uso de disco que aciona a coleta de lixo de imagens. -
imageGCLowThresholdPercent: percentual de uso do disco de destino após a coleta de lixo.
Gerenciamento de topologia
A configuração a seguir controla a política do gerenciador de topologia para o kubelet:
spec:
kubelet:
topologyManagerPolicy: "best-effort" # none, restricted, best-effort, single-numa-node
O gerenciador de topologia ajuda a coordenar a alocação de recursos para cargas de trabalho sensíveis à latência entre recursos de CPU e do dispositivo (como GPU).
Configuração do sistema
As seguintes configurações permitem que você configure parâmetros adicionais do sistema para o kubelet:
spec:
kubelet:
allowedUnsafeSysctls:
- "kernel.msg*"
- "net.ipv4.route.min_pmtu"
containerLogMaxSize: "50Mi"
containerLogMaxFiles: 5
podPidsLimit: 4096
-
allowedUnsafeSysctls: lista de sysctls não seguros permitidos que os pods podem usar. -
containerLogMaxSize: tamanho máximo dos arquivos de log de contêiner antes da rotação. -
containerLogMaxFiles: número máximo de arquivos de log de contêiner a serem retidos. -
podPidsLimit: número máximo de processos permitidos em qualquer pod.
Configuração de tags de recurso do Azure
Você pode especificar marcas de recurso do Azure que se aplicam a todas as instâncias de VM criadas usando um recurso específico AKSNodeClass . As marcas são úteis para acompanhamento de custos, organização de recursos e requisitos de conformidade.
Limitações de marca
- As marcas de recurso do Azure têm um limite de 50 marcas por recurso.
- Os nomes de marca não diferenciam maiúsculas de minúsculas e os valores de marca diferenciam maiúsculas de minúsculas.
- O Azure reserva alguns nomes de marca que não podem ser usados. Para obter mais informações, consulte Diretrizes e limites de tag.
Configuração de etiquetas de exemplo
spec:
tags:
Environment: "production"
Team: "platform"
Application: "web-service"
CostCenter: "engineering"
Exemplo de configuração abrangente AKSNodeClass
O exemplo a seguir demonstra uma configuração abrangente AKSNodeClass que inclui todas as configurações discutidas neste artigo:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: default
spec:
template:
spec:
nodeClassRef:
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
name: comprehensive-example
---
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
name: comprehensive-example
spec:
# Image family configuration
# Default: Ubuntu
# Valid values: Ubuntu, AzureLinux
imageFamily: Ubuntu
# FIPS compliant mode - allows support for FIPS-compliant node images
# Default: Disabled
# Valid values: FIPS, Disabled
fipsMode: Disabled
# Virtual network subnet configuration (optional)
# If not specified, uses the default --vnet-subnet-id from Karpenter installation
vnetSubnetID: "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/my-rg/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/my-subnet"
# OS disk size configuration
# Default: 128 GB
# Minimum: 30 GB
osDiskSizeGB: 128
# Maximum pods per node configuration
# Default behavior depends on network plugin:
# - Azure CNI with standard networking: 30 pods
# - Azure CNI with overlay networking: 250 pods
# - Other configurations: 110 pods
# Range: 10-250
maxPods: 30
# Azure resource tags (optional)
# Applied to all VM instances created with this AKSNodeClass
tags:
Environment: "production"
Team: "platform-team"
Application: "web-service"
CostCenter: "engineering"
# Kubelet configuration (optional)
# All fields are optional with sensible defaults
kubelet:
# CPU management policy
# Default: "none"
# Valid values: none, static
cpuManagerPolicy: "static"
# CPU CFS quota enforcement
# Default: true
cpuCFSQuota: true
# CPU CFS quota period
# Default: "100ms"
cpuCFSQuotaPeriod: "100ms"
# Image garbage collection thresholds
# imageGCHighThresholdPercent must be greater than imageGCLowThresholdPercent
# Range: 0-100
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
# Topology manager policy
# Default: "none"
# Valid values: none, restricted, best-effort, single-numa-node
topologyManagerPolicy: "best-effort"
# Allowed unsafe sysctls (optional)
# Comma-separated list of unsafe sysctls or patterns
allowedUnsafeSysctls:
- "kernel.msg*"
- "net.ipv4.route.min_pmtu"
# Container log configuration
# containerLogMaxSize default: "50Mi"
containerLogMaxSize: "50Mi"
# containerLogMaxFiles default: 5, minimum: 2
containerLogMaxFiles: 5
# Pod process limits
# Default: -1 (unlimited)
podPidsLimit: 4096
Próximas etapas
Para obter mais informações sobre o provisionamento automático de nós no AKS, consulte os seguintes artigos: