Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo explica como configurar recursos AKSNodeClass para definir definições específicas de Azure para o auto-provisionamento de nós (NAP) em Azure Kubernetes Service (AKS) usando Karpenter.
AKSNodeClass permite-lhe personalizar vários aspetos dos nós que o Karpenter provisiona, como a imagem da máquina virtual (VM), tamanho do disco do sistema operativo (SO), número máximo de pods por nó e configurações do kubelet.
Importante
A partir de 30 de novembro de 2025, Azure Kubernetes Service (AKS) já não suporta nem fornece atualizações de segurança para Azure Linux 2.0. A imagem do nó Azure Linux 2.0 está congelada no 202512.06.0 lançamento. A partir de 31 de outubro de 2026, as imagens dos nós serão removidas e não poderá escalar os seus pools de nós. Migre para uma versão Azure Linux suportada atualizando os seus pools de nós para uma versão Kubernetes suportada ou migrando para osSku AzureLinux3. Para mais informações, consulte a issue de reforma do GitHub e o anúncio de retirada das atualizações do Azure. Para se manter informado sobre anúncios e atualizações, siga as Notas de Lançamento do AKS.
Visão geral dos recursos do AKSNodeClass
Os recursos AKSNodeClass permitem configurar definições específicas do Azure para NAP. Cada NodePool recurso deve fazer referência a um AKSNodeClass utilizando spec.template.spec.nodeClassRef. Podes ter múltiplos NodePools que apontam para o mesmo AKSNodeClass, permitindo partilhar configurações comuns do Azure entre diferentes pools de nós.
Importante
Alterar uma definição num AKSNodeClass existente não reconfigura os nós em execução no próprio local. O NAP marca os nós provisionados da configuração anterior como em deriva e substitui-os, sujeito aos controlos de interrupção nos recursos de NodePool referência. O tags campo é a única exceção, porque as alterações às etiquetas aplicam-se aos recursos existentes do Azure sem substituir o nó. Para saber mais, consulte Drift e orçamentos de disrupção. Antes de modificares o AKSNodeClass que as cargas de trabalho de produção utilizam, revê esta orientação.
Configuração da família de imagens
O campo imageFamily define a imagem predefinida da VM e a lógica de inicialização para os nós aprovisionados através de AKSNodeClass. Se não especificares uma família de imagens, é usada a versão padrão do sistema operativo de acordo com a versão do Kubernetes. As GPUs são suportadas com ambas as famílias de imagens em tamanhos de VM compatíveis. Para mais informações sobre a versão padrão do sistema operativo conforme a versão do Kubernetes, consulte a documentação da versão do AKS OS.
Famílias de imagens suportadas
-
Ubuntu: Ubuntu é a distribuição Linux padrão para nós AKS.- As versões predefinidas do sistema operativo mudam consoante a tua versão do Kubernetes. Ubuntu 22.04 é o padrão para as versões Kubernetes 1.25 a 1.33. O Ubuntu 24.04 é o padrão para as versões Kubernetes 1.34 e posteriores.
-
AzureLinux: Azure Linux é a distribuição alternativa Linux da Microsoft para cargas de trabalho AKS. Para mais informações, consulte a documentação do Azure Linux.
Exemplo de configuração da família de imagens
O exemplo a seguir configura o AKSNodeClass para usar a AzureLinux família de imagens:
spec:
imageFamily: AzureLinux
Configuração de imagem de nós compatível com FIPS
Também pode ativar imagens de nós compatíveis com os Padrões Federais de Processamento de Informação (FIPS). Para mais informações sobre o FIPS no AKS, consulte a documentação do FIPS.
O fipsMode campo está definido por defeito como Desativado, podendo ser definido com as seguintes opções:
- FIPS - selecionar imagens de nós compatíveis com FIPS
- Desativado - não usar imagens de nós compatíveis com FIPS
O exemplo seguinte configura a 'AKSNodeClass' para selecionar imagens de nós compatíveis com FIPS, definindo fipsMode para FIPS:
spec:
fipsMode: FIPS
Streaming de artefactos
O Artifact Streaming permite transmitir imagens de contentores do Azure Container Registry (ACR) para Azure Kubernetes Service (AKS). O AKS transfere apenas as camadas necessárias para o arranque inicial do pod, reduzindo o tempo necessário para implementar as cargas de trabalho.
Pré-requisitos
- O Artefact Streaming exige que tenhas um ACR de nível Premium integrado no teu cluster AKS.
- O Artifact Streaming tem de ser ativado no ACR.
Consulte a documentação do Artefact Streaming para instruções sobre como ativar o Artefact Streaming no ACR.
Ativar o streaming de artefactos em clusters NAP
Os clusters com Node Auto Provisioning (NAP) ativado podem ativar o streaming de artefactos utilizando o campo spec.artifactStreaming.enabled do AKSNodeClass CRD. Defina este campo como true para ativar a transmissão de artefactos para quaisquer nós, novos ou existentes, geridos pelo NAP associados a este CRD AKSNodeClass.
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
name: my-node-class
spec:
# Enables artifact streaming; To use this feature container images must also enable artifact streaming on ACR
# Valid values: true, false; defaults to false if not specified
artifactStreaming:
enabled:
true
Note
Para usar o streaming de artefactos em nós geridos por AKS NAP, deve também ativar o streaming de artefactos no Azure Container Registry (ACR). Se não definires esta opção no ACR, o valor predefinido do campo é falso.
Configuração de sub-rede de rede virtual (VNet)
O campo vnetSubnetID especifica qual sub-rede VNet da Azure deve ser utilizada para implementar interfaces de rede dos nós. Este campo é opcional. Se você não especificar uma sub-rede, a NAP usará a sub-rede padrão configurada durante a instalação do Karpenter. Para obter mais informações, consulte Configurações de sub-rede para NAP.
Exemplo de configuração de sub-rede
O ID da sub-rede deve estar no formato completo do Azure Resource Manager (ARM), como mostrado no seguinte exemplo:
spec:
vnetSubnetID: "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/virtualNetworks/{vnet-name}/subnets/{subnet-name}"
Configuração do tamanho do disco do SO
O osDiskSizeGB campo especifica o tamanho do disco do SO 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.
- Requer espaço extra para imagens de contêiner.
- Ter altos requisitos de E/S de disco.
Exemplo de configuração do tamanho do disco do SO
spec:
osDiskSizeGB: 256 # 256 GB OS disk
Configuração efêmera do disco do sistema operacional
A NAP usa automaticamente discos Ephemeral OS quando disponíveis e adequados para o tamanho de disco solicitado. Os discos de SO efêmeros oferecem melhor desempenho e menor custo em comparação com os 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 suporta discos de SO efémero.
- A capacidade do disco efêmero é maior ou igual ao solicitado
osDiskSizeGB. - A VM tem capacidade de armazenamento efêmera suficiente.
Se essas condições não forem atendidas, o sistema voltará a usar discos gerenciados.
Tipos de disco efêmeros e priorização
As VMs do Azure podem ter diferentes tipos de armazenamento efémero. O sistema utiliza a seguinte ordem de prioridade:
- Discos NVMe (melhor desempenho)
- Discos de cache (desempenho equilibrado)
- Discos de recursos (desempenho básico)
Exemplo de configuração de disco efêmero
Você pode usar os requisitos da dotação de nós para garantir que os nós tenham capacidade de disco efémero suficiente, 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:
group: karpenter.azure.com
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 apenas os tipos de instância de VM com discos efêmeros maiores que 128 GB sejam selecionados, garantindo o uso de disco efêmero para o tamanho de disco do sistema operacional especificado.
Configuração máxima de pods
O maxPods campo especifica o número máximo de pods que podem ser alocados em um nó. Essa configuração afeta a densidade do cluster e a configuração da rede.
O valor mínimo para maxPods é 10 e o valor máximo é 250.
Comportamento padrão para maxPods
O comportamento padrão para maxPods depende da configuração do plug-in de rede. A tabela a seguir resume os valores padrão.
| Configuração de plug-in de rede | Padrão maxPods por nó |
|---|---|
| Azure CNI com rede padrão (v1 ou NodeSubnet) | 30 |
| Azure CNI com rede sobreposta | 250 |
| Nenhum (sem plug-in de rede) | 250 |
| Outras configurações | 110 (padrão padrão do Kubernetes) |
Exemplo de configuração de pods máximos
spec:
maxPods: 50 # Allow up to 50 pods per node
Configuração LocalDNS
O LocalDNS implementa um proxy DNS ao nível do nó que resolve consultas DNS mais próximas das cargas de trabalho, reduzindo a latência das consultas e melhorando a resiliência durante perturbações transitórias do DNS. Para mais informações, consulte a documentação do LocalDNS. Por defeito, o LocalDNS está definido como Desabilitado e pode ser configurado com as seguintes opções:
-
Disabled(por defeito) - Desativa a funcionalidade LocalDNS. As consultas DNS não são resolvidas localmente no nó. -
Preferred- O AKS gere a ativação do LocalDNS com base na versão do Kubernetes do pool de nós. A configuração é sempre validada e incluída, mas o LocalDNS não é habilitado, a menos que a versão correta do Kubernetes seja usada. -
Required- O LocalDNS é imposto ao pool de nós se todos os pré-requisitos forem satisfeitos. Se os requisitos não forem atendidos, a implantação falhará.
Exemplo de configuração LocalDNS
Pode personalizar configurações do LocalDNS como vnetDNSOverrides e kubeDNSOverrides. Para mais detalhes sobre os plugins suportados, consulte Personalizar LocalDNS.
spec:
localDNS:
mode: Required
vnetDNSOverrides:
- zone: "."
cacheDuration: "3600s"
forwardDestination: VnetDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: PreferUDP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
- zone: "cluster.local"
cacheDuration: "3600s"
forwardDestination: ClusterCoreDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: ForceTCP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
kubeDNSOverrides:
- zone: "."
cacheDuration: "3600s"
forwardDestination: ClusterCoreDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: PreferUDP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
- zone: "cluster.local"
cacheDuration: "3600s"
forwardDestination: ClusterCoreDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: ForceTCP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
Atualize a configuração do LocalDNS numa AKSNodeClass existente
A localDNS definição participa na deteção de deriva, tal como outras AKSNodeClass definições. Quando mudas spec.localDNS num nó AKSNodeClass que os nós existentes já referenciam, o NAP aplica a alteração através do mecanismo padrão de Drift. O NAP não recria a imagem de nós existentes.
O seguinte comportamento aplica-se quando altera o modo LocalDNS ou substituições, como mudar mode de Disabled para Required:
-
Novos nós: Cada nó que o NAP disponibiliza após atualizar o
AKSNodeClassutiliza a nova configuração do LocalDNS. -
nós existentes: O NAP marca os objetos existentes
NodeClaimcomo desviados porque a sua configuração registada já não corresponde àAKSNodeClassconfiguração. O NAP lança um nó de substituição que usa a nova configuração LocalDNS, depois isola, drena e remove o nó com drift. - Sem reimagem: Ativar o LocalDNS num pool de nós gerido por AKS reimageia todos os nós do pool. O NAP substitui o nó em vez disso. De qualquer forma, os pods nos nós afetados são expulsos e reprogramados, por isso planeia para o mesmo impacto na carga de trabalho.
Importante
Definir mode para Preferred ou Disabled também altera a configuração resolvida AKSNodeClass e provoca drift nos nós existentes. Qualquer alteração dentro da secção localDNS, incluindo os valores vnetDNSOverrides e kubeDNSOverrides, causa a substituição de nós.
Quando a substituição começa
A avaliação e substituição do drift começa assim que aplica a versão atualizada AKSNodeClass. A substituição segue o ciclo de vida padrão da interrupção NAP, por isso a taxa e o momento dependem dos controlos de interrupção que configura nos NodePool recursos que referenciam o AKSNodeClass.
Como a NAP coordena a substituição
A deriva causada por uma alteração do LocalDNS respeita os controlos padrão de interrupção NAP descritos na tabela seguinte:
| Controlo | Efeito na substituição induzida por LocalDNS |
|---|---|
Orçamentos de indisponibilidade (spec.disruption.budgets) |
O limite de taxa determina quantos nós o NAP substitui ao mesmo tempo. Se não definires orçamentos, o NAP utiliza por predefinição um orçamento de nodes: 10%, por isso perturba no máximo 10 por cento dos nós do pool de nós simultaneamente. |
Orçamento schedule e duration |
Limita a substituição a uma janela de manutenção. Coloca nodes: "0" fora da moldura para bloquear a substituição. |
| Pod disruption budgets (PDBs) | Aplicar durante a drenagem do nó. O NAP espera em vez de expulsar pods que violem um PDB. |
karpenter.sh/do-not-disrupt Anotação |
Exclui pods e nós anotados de perturbações voluntárias, incluindo drift. |
terminationGracePeriod |
Tempo de drenagem das maiúsculas. Esta configuração contorna os PDBs e a anotação karpenter.sh/do-not-disrupt quando o intervalo expira. |
A substituição não é totalmente serial nem totalmente paralela. O NAP prevê capacidade de substituição antes de remover um nó com drift, mas pode substituir múltiplos nós que referenciam o mesmo AKSNodeClass em simultâneo, até ao limite que os seus orçamentos de interrupção definirem.
Warning
Se não definir orçamentos de disrupção nos seus pools de nós nem orçamentos de disrupção de pods para as suas cargas de trabalho, mudar localDNS num AKSNodeClass com muita atividade pode perturbar até 10 por cento dos seus nós de uma só vez sem proteção ao nível da aplicação, o que pode causar tempo de inatividade na carga de trabalho. Defina PDBs para cargas de trabalho críticas e defina um orçamento conservador para interrupções antes de mudar localDNS num cluster de produção.
Reduza o risco de indisponibilidade ao ativar o LocalDNS
Confirme que os seus servidores DNS personalizados respondem às consultas por UDP e TCP, na porta 53, a partir da sub-rede do nó. Para mais informações, consulte Validar DNS personalizado antes de ativar o LocalDNS.
Defina orçamentos de interrupção de pods para cada carga de trabalho crítica.
Defina um orçamento de interrupção conservador nos recursos afetados
NodePoolantes de alterar oAKSNodeClass, como mostrado no seguinte exemplo:apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: default spec: disruption: budgets: - nodes: "1" # Replace one node at a timeAplique a
localDNSalteração primeiro a um ambiente de não produçãoAKSNodeClass. Alternativamente, cria umAKSNodeClassque tenha o LocalDNS ativado e migra cargas de trabalho para umNodePoolque o referencia.Acompanhe o progresso da substituição listando as declarações de nó. A substituição está concluída quando nenhuma claim de nó reporta a condição de estado
Drifted.# List node claims and watch replacements appear as drifted nodes are removed kubectl get nodeclaims # Inspect the status conditions on a specific node claim kubectl describe nodeclaim <nodeclaim-name>Confirme que o LocalDNS está ativo nos nós de substituição. Para mais informações, consulte Verificar operação LocalDNS.
Configuração do Kubelet
A seção kubelet permite configurar vários parâmetros kubelet que afetam o comportamento do nó. Estes parâmetros são argumentos típicos do kubelet, por isso o fornecedor da Azure simplesmente os transmite para o kubelet no nó.
Importante
Configure as configurações do kubelet com cuidado e teste primeiro quaisquer alterações em ambientes que não sejam de produção.
Gerenciamento de CPU
As seguintes configurações controlam o comportamento de gerenciamento da CPU para o kubelet:
spec:
kubelet:
cpuManagerPolicy: "static" # or "none"
cpuCFSQuota: true
cpuCFSQuotaPeriod: "100ms"
-
cpuManagerPolicy: Controla como o kubelet aloca recursos da CPU. Definido como"static"para fixação de CPU em cargas de trabalho sensíveis à latência. -
cpuCFSQuota: Permite a imposição de cota CFS (CPU Completely Fair Scheduler) para contêineres que especificam limites de CPU. -
cpuCFSQuotaPeriod: Define o período de cota CFS da CPU.
Coleta de lixo de imagens
As configurações a seguir controlam o comportamento de recolha de lixo de imagem para o kubelet:
spec:
kubelet:
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
Essas configurações controlam quando o kubelet executa a coleta de lixo de imagens de contêiner:
-
imageGCHighThresholdPercent: Porcentagem de uso do disco que aciona a recolha de lixo de imagens. -
imageGCLowThresholdPercent: Porcentagem 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 dispositivo (como GPU).
Configuração do sistema
As seguintes configurações permitem que você configure parâmetros extras 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 permitidos e não seguros que os pods podem usar. -
containerLogMaxSize: Tamanho máximo dos arquivos de log do contêiner antes da rotação. -
containerLogMaxFiles: Número máximo de arquivos de log de contêiner a serem mantidos. -
podPidsLimit: Número máximo de processos permitidos em qualquer pod.
Definições de configuração do sistema operacional personalizado do Linux
A seção LinuxOSConfig permite configurar vários parâmetros kubelet que afetam o comportamento do nó. Estes parâmetros são argumentos típicos do sistema operativo personalizado, por isso o NAP simplesmente os transmite para o kubelet no nó.
Para mais informações sobre definições de configuração personalizadas do sistema operativo Linux, valores predefinidos e considerações, consulte a referência de parâmetros de configuração personalizados do nó.
Importante
Configure cuidadosamente as definições do sistema operativo Linux e teste primeiro quaisquer alterações em ambientes não produtivos.
Definições de limites de controlo de ficheiros Linux
Use as seguintes definições para definir as definições do sistema de ficheiros.
spec:
linuxOSConfig:
# Sysctl Settings
sysctls:
# File System Settings
fsFileMax: 2000000 # Range: 8192-12000500 Default: Max of available range
fsInotifyMaxUserWatches: 1000000 # Range: 781250-2097152 Default: 1048576
fsAioMaxNr: 1000000 # Range: 65536-6553500 Default: 65536
fsNrOpen: 1000000 # Range: 8192-20000500 Default: 1048576
Configurações de socket Linux e sintonia de rede
Use as seguintes definições para definir o TCP e a definição de rede.
spec:
linuxOSConfig:
# Network Settings
netCoreSomaxconn: 65535 # Range: 4096-3240000 Default: 16384
netCoreNetdevMaxBacklog: 5000 # Range: 1000-3240000 Default: 1000
netCoreRmemMax: 134217728 # Range: 212992-134217728 Default: 1048576
netCoreOptmemMax: 102400 # Range: 20480-4194304 Default: 131072
netCoreWmemMax: 134217728 # Range: 212992-134217728 Default: 212992
netCoreRmemDefault: 212992 # Range: 212992-134217728
netCoreWmemDefault: 212992 # Range: 212992-134217728
netIPv4IPLocalPortRange: "1024 65535" # Format: "first last", first: 1024-60999, last: 32768-65535
# Neighbor Table GC Thresholds
netIPv4NeighDefaultGcThresh1: 1024 # Range: 128-80000 Default: 4096
netIPv4NeighDefaultGcThresh2: 2048 # Range: 512-80000 Default: 8192
netIPv4NeighDefaultGcThresh3: 4096 # Range: 1024-80000 Default: 16384
# Note: thresh1 <= thresh2 <= thresh3
# Connection Tracking
netNetfilterNfConntrackBuckets: 131072 # Range: 65536-524288 Default: dynamically calculated
netNetfilterNfConntrackMax: 262144 # Range: 131072-2097152 Default: dynamically calculated
Definições de limite de trabalhador Linux
Use as seguintes definições para definir a definição do kernel.
spec:
linuxOSConfig:
# Kernel Settings
kernelThreadsMax: 100000 # Range: 20-513785 Default: Dynamically calculated
Definições de memória virtual no Linux
Use as seguintes opções para ajustar o funcionamento do subsistema de memória virtual Linux do kernel Linux e a escrita de dados sujos no disco.
spec:
linuxOSConfig:
# Memory Management
vmMaxMapCount: 262144 # Range: 65530-262144 Default: Max of available range
vmVfsCachePressure: 100 # Range: 0-100 Default: 100
vmSwappiness: 60 # Range: 0-100 Default: 60
# Swap File Configuration
swapFileSize: "2Gi" # Default: (not set) | Pattern: quantity with units Note: Requires kubelet.failSwapOn: false
# Transparent Huge Pages
transparentHugePageEnabled: "madvise" # Values: [always, madvise, never] Default: always
transparentHugePageDefrag: "defer+madvise" # Values: [always, defer, defer+madvise, madvise, never] Default: madvise
Configurações da GPU
Use o campo seguinte para permitir a instalação personalizada de drivers de GPU, como no NVIDIA GPU Operator.
spec:
gpu:
mode:
# acceptable values: [driver, none] default(or if not specified): driver
# none skips gpu driver installation, driver has NAP manage the GPU driver installation
none
Configurações de segurança
Encriptação no anfitrião
O campo seguinte especifica se a encriptação ao nível do host está ativada para nós provisionados. Quando defines este campo para true, o NAP inclui apenas opções de instância que suportam encriptação no host.
spec:
security:
encryptionatHost:
# acceptable values: [true, false] default(or if not specified): false
false
Para mais informações sobre encriptação baseada em host, consulte Documentação de Encriptação no Host.
Chaves geridas à medida e conjuntos de encriptação de disco
O NAP suporta clusters que utilizam chaves geridas pelo cliente e conjuntos de encriptação de disco. Ative estas opções ao nível do cluster. Eles não têm AKSNodeClass campos que precises de configurar. Certifique-se de que a identidade do seu cluster tem o controlo de acesso baseado em funções (RBAC) adequado:
- A identidade do cluster tem acesso ao
ReaderConjunto de Encriptação de Discos. - O recurso do conjunto de encriptação de disco tem
Key Vault Crypto Service Encryption Useracesso ao Azure Key Vault.
Para obter informações sobre chaves geridas pelo cliente e conjuntos de encriptação de disco ativados durante a criação do cluster, consulte a documentação sobre Chaves Geridas pelo Cliente.
Ativar o lançamento confiável em clusters NAP
Clusters com o Node Auto Provisioning (NAP) ativado podem permitir o arranque fidedigno utilizando o campo spec.security.trustedLaunch do CRD AKSNodeClass. Defina os campos secureBoot e vTPM para true para ativar o trusted launch para quaisquer nós novos ou existentes geridos pela NAP associados a este CRD AKSNodeClass.
spec:
security:
# Enables trusted lunch
# Valid values: true, false; defaults to false if not specified
trustedLaunch:
secureBoot: true
vTPM: true
Configuração de etiquetas de recursos do Azure
Pode especificar Azure etiquetas de recurso que se aplicam a todas as instâncias de VM criadas usando um determinado recurso AKSNodeClass. As tags são úteis para controle de custos, organização de recursos e requisitos de conformidade.
Limitações das etiquetas
- As etiquetas de recurso do Azure têm um limite de 50 etiquetas por recurso.
- Os nomes das tags são insensíveis a maiúsculas e minúsculas, mas os valores das tags são sensíveis a maiúsculas e minúsculas.
- O Azure reserva alguns nomes de etiquetas que não podem ser usados. Para obter mais informações, consulte Orientação e limites de etiquetas.
Exemplo de configuração de tags
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:
group: karpenter.azure.com
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, AzureContainerLinux
imageFamily: Ubuntu
# FIPS compliant mode - allows support for FIPS-compliant node images
# Default: Disabled
# Valid values: FIPS, Disabled
fipsMode: Disabled
# Artifact Streaming- allows use of artifact streaming feature; To use this feature container images must also enable artifact streaming on ACR
# Valid values: true, false; defaults to false if not specified
artifactStreaming:
enabled: true
# LocalDNS mode - allows use of LocalDNS feature
# Default: Disabled
# Valid values: Preferred, Required, Disabled
# vnetDNSOverrides and kubeDNSOverrides are both required, even when mode is Disabled
# Each list must include the "." and "cluster.local" zones, and each zone must set all nine fields
localDNS:
mode: Disabled
# vnetDNSOverrides apply to DNS traffic from pods with dnsPolicy:default and from kubelet
vnetDNSOverrides:
- zone: "."
cacheDuration: "3600s"
forwardDestination: VnetDNS # the "." zone can't forward to ClusterCoreDNS in vnetDNSOverrides
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: PreferUDP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
- zone: "cluster.local"
cacheDuration: "3600s"
forwardDestination: ClusterCoreDNS # cluster.local can't forward to VnetDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: ForceTCP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
# kubeDNSOverrides apply to DNS traffic from pods with dnsPolicy:ClusterFirst
kubeDNSOverrides:
- zone: "."
cacheDuration: "3600s"
forwardDestination: ClusterCoreDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: PreferUDP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
- zone: "cluster.local"
cacheDuration: "3600s"
forwardDestination: ClusterCoreDNS
forwardPolicy: Sequential
maxConcurrent: 1000
protocol: ForceTCP
queryLogging: Error
serveStale: Immediate
serveStaleDuration: "3600s"
# 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
# GPU driver installation (optional)
# Default: driver - NAP manages gpu driver installation
# none skips gpu driver installation
# Valid values: driver, none
gpu:
mode:
driver
# 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
security:
# Enables trusted lunch
# Valid values: true, false; default(or if not specified): false
trustedLaunch:
secureBoot: true
vTPM: true
# Encryption at host
encryptionatHost:
# acceptable values: [true, false] default(or if not specified): false
false
Próximos passos
Para obter mais informações sobre o provisionamento automático de nós no AKS, consulte os seguintes artigos: