Dela via


Konfigurera AKSNodeClass-resurser för automatisk nodetablering (NAP) i Azure Kubernetes Service (AKS)

Den här artikeln beskriver hur du konfigurerar AKSNodeClass resurser för att definiera Azure-specifika inställningar för automatisk nodetablering (NAP) i Azure Kubernetes Service (AKS) med Karpenter. AKSNodeClass gör att du kan anpassa olika aspekter av de noder som Karpenter etablerar, till exempel VM-avbildningen, operativsystemdiskstorleken (OS), maximalt antal poddar per nod och kubelet-konfigurationer.

Viktigt!

Från och med den 30 november 2025 har Azure Kubernetes Service (AKS) inte längre stöd för eller tillhandahåller säkerhetsuppdateringar för Azure Linux 2.0. Azure Linux 2.0-nodbilden är låst i 202512.06.0-versionen. Från och med den 31 mars 2026 tas nodbilder bort och du kan inte skala dina nodpooler. Migrera till en Azure Linux-version som stöds genom att uppgradera dina nodpooler till en Kubernetes-version som stöds eller migrera till osSku AzureLinux3. Mer information finns i [Pensionering] Azure Linux 2.0-nodpooler på AKS.

Översikt över AKSNodeClass-resurser

AKSNodeClass resurserna låter dig konfigurera Azure-specifika inställningar för NAP. Varje NodePool resurs måste hänvisa till en AKSNodeClass med spec.template.spec.nodeClassRef. Du kan ha flera NodePools som pekar på samma AKSNodeClass, så att du kan dela vanliga Azure-konfigurationer mellan olika nodpooler.

Konfiguration av avbildningsfamilj

Fältet imageFamily dikterar standard-VM-avbildning och bootstrapping-logik för noder som provisioneras via AKSNodeClass. Om du inte anger en avbildningsfamilj är Ubuntu2204standardvärdet . GPU:er stöds med båda avbildningsfamiljerna i kompatibla VM-storlekar.

Bildfamiljer som stöds

  • Ubuntu: Ubuntu 22.04 Long Term Support (LTS) är standarddistributionen av Linux för AKS-noder.
  • AzureLinux: Azure Linux är Microsofts alternativa Linux-distribution för AKS-arbetsbelastningar. Mer information finns i Azure Linux-dokumentationen

Exempel på konfiguration av bildfamilj

I följande exempel konfigureras AKSNodeClass att använda avbildningsfamiljen AzureLinux :

spec:
  imageFamily: AzureLinux

Konfiguration av virtuellt nätverk (VNet) undernät

Fältet vnetSubnetID anger vilket Azure VNet-undernät som ska användas för att etablera nodnätverksgränssnitt. Det här fältet är valfritt. Om du inte anger något undernät använder NAP det standardundernät som konfigurerades under Karpenter-installationen. Mer information finns i Undernätskonfigurationer för NAP.

Exempel på konfiguration av undernät

Undernäts-ID:t måste vara i fullständigt ARM-format (Azure Resource Manager), som du ser i följande exempel:

spec:
  vnetSubnetID: "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/virtualNetworks/{vnet-name}/subnets/{subnet-name}"

Konfiguration av os-diskstorlek

Fältet osDiskSizeGB anger storleken på OS-disken i gigabyte. Standardvärdet är 128 GB och minimivärdet är 30 GB.

Överväg större os-diskstorlekar för arbetsbelastningar som:

  • Lagra betydande data lokalt.
  • Kräv extra utrymme för containeravbildningar.
  • Har höga I/O-krav för diskar.

Exempel på konfiguration av os-diskstorlek

spec:
  osDiskSizeGB: 256  # 256 GB OS disk

Tillfälliga os-diskkonfigurationer

NAP använder automatiskt tillfälliga OS-diskar när de är tillgängliga och lämpliga för den begärda diskstorleken. Tillfälliga OS-diskar ger bättre prestanda och lägre kostnad jämfört med hanterade diskar.

Tillfälliga urvalsvillkor för diskar

Systemet väljer automatiskt tillfälliga diskar i följande scenarier:

  • Vm-instanstypen stöder tillfälliga OS-diskar.
  • Den tillfälliga diskkapaciteten är större än eller lika med den begärda osDiskSizeGB.
  • Den virtuella datorn har tillräckligt med tillfällig lagringskapacitet.

Om dessa villkor inte uppfylls återgår systemet till att använda hanterade diskar.

Tillfälliga disktyper och prioritering

Virtuella Azure-datorer kan ha olika typer av tillfällig lagring. Systemet använder följande prioritetsordning:

  • NVMe-diskar (högsta prestanda)
  • Cachediskar (balanserade prestanda)
  • Resursdiskar (grundläggande prestanda)

Exempel på tillfällig diskkonfiguration

Du kan använda nodpoolkrav för att säkerställa att noderna har tillräcklig tillfällig diskkapacitet, som du ser i följande exempel:

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

Den här konfigurationen säkerställer att endast vm-instanstyper med tillfälliga diskar som är större än 128 GB väljs, vilket garanterar tillfällig diskanvändning för den angivna os-diskstorleken.

Maximal poddkonfiguration

Fältet maxPods anger det maximala antalet poddar som kan schemaläggas på en nod. Den här inställningen påverkar både klusterdensitet och nätverkskonfiguration.

Minimivärdet för maxPods är 10 och det maximala värdet är 250.

Standardbeteende för maxPods

Standardbeteendet för maxPods beror på nätverkskonfigurationen för plugin-programmet. I följande tabell sammanfattas standardvärdena:

Konfiguration av plugin-program för nätverk Standard maxPods per nod
Azure CNI med standardnätverk (v1 eller NodeSubnet) 30
Azure CNI med överläggsnätverk 250
Ingen (inget plugin-program för nätverk) 250
Andra konfigurationer 110 (standardinställning för Kubernetes)

Exempel på maximal poddkonfiguration

spec:
  maxPods: 50  # Allow up to 50 pods per node

Kubelet-konfiguration

I kubelet avsnittet kan du konfigurera olika kubelet-parametrar som påverkar nodbeteendet. Dessa parametrar är typiska kubelet-argument, så Azure-providern skickar dem helt enkelt till kubeleten på noden.

Viktigt!

Konfigurera kubelet-inställningar noggrant och testa eventuella ändringar i icke-produktionsmiljöer först.

CPU-hantering

Följande inställningar styr cpu-hanteringsbeteendet för kubelet:

spec:
  kubelet:
    cpuManagerPolicy: "static"  # or "none"
    cpuCFSQuota: true
    cpuCFSQuotaPeriod: "100ms"
  • cpuManagerPolicy: Styr hur kubelet allokerar CPU-resurser. Ange till "static" för CPU-pinning i svarstidskänsliga arbetsbelastningar.
  • cpuCFSQuota: Aktiverar kvottillämpning av CPU Completely Fair Scheduler (CFS) för containrar som anger CPU-gränser.
  • cpuCFSQuotaPeriod: Ställer in CPU CFS kvotperioden.

Avbildningsavfallsinsamling

Följande inställningar styr beteendet för skräpinsamling av avbildningar för kubelet:

spec:
  kubelet:
    imageGCHighThresholdPercent: 85
    imageGCLowThresholdPercent: 80

De här inställningarna styr när kubelet utför skräpinsamling av containeravbildningar:

  • imageGCHighThresholdPercent: Diskanvändningsprocent som utlöser skräpinsamling av avbildningar.
  • imageGCLowThresholdPercent: Måldiskanvändning i procent efter skräpinsamling.

Topologihantering

Följande inställning styr topologihanterarens princip för kubelet:

spec:
  kubelet:
    topologyManagerPolicy: "best-effort"  # none, restricted, best-effort, single-numa-node

Topologihanteraren hjälper till att samordna resursallokering för svarstidskänsliga arbetsbelastningar mellan processor- och enhetsresurser (till exempel GPU).

Systemkonfiguration

Med följande inställningar kan du konfigurera extra systemparametrar för kubelet:

spec:
  kubelet:
    allowedUnsafeSysctls:
      - "kernel.msg*"
      - "net.ipv4.route.min_pmtu"
    containerLogMaxSize: "50Mi"
    containerLogMaxFiles: 5
    podPidsLimit: 4096
  • allowedUnsafeSysctls: Lista över tillåtna osäkra sysctls som poddar kan använda.
  • containerLogMaxSize: Maximal storlek på containerloggfiler före rotation.
  • containerLogMaxFiles: Maximalt antal containerloggfiler som ska behållas.
  • podPidsLimit: Maximalt antal processer som tillåts i alla poddar.

Konfiguration av Azure-resurstaggar

Du kan ange Azure-resurstaggar som gäller för alla VM-instanser som skapats med hjälp av en viss AKSNodeClass resurs. Taggar är användbara för kostnadsspårning, resursorganisation och efterlevnadskrav.

Taggbegränsningar

  • Azure-resurstaggar har en gräns på 50 taggar per resurs.
  • Taggnamn är inte skiftlägeskänsliga, men taggvärden är skiftlägeskänsliga.
  • Azure reserverar vissa taggnamn som inte kan användas. Mer information finns i Taggvägledning och begränsningar.

Konfiguration av exempeltaggar

spec:
  tags:
    Environment: "production"
    Team: "platform"
    Application: "web-service"
    CostCenter: "engineering"

Omfattande AKSNodeClass konfigurationsexempel

I följande exempel visas en omfattande AKSNodeClass konfiguration som innehåller alla inställningar som beskrivs i den här artikeln:

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

Nästa steg

Mer information om automatisk nodetablering i AKS finns i följande artiklar: