Azure Kubernetes Service (AKS)'de düğüm otomatik sağlama (NAP) için AKSNodeClass kaynaklarını yapılandırma

Bu makalede, Karpenter kullanarak Azure Kubernetes Service (AKS) düğüm otomatik sağlama (NAP) için Azure özgü ayarları tanımlamak üzere AKSNodeClass kaynaklarının nasıl yapılandırılacağını açıklar. AKSNodeClass Sanal makine (VM) görüntüsü, işletim sistemi (OS) disk boyutu, düğüm başına maksimum pod sayısı ve kubelet yapılandırmaları gibi Karpenter'ın sağladığı düğümlerin çeşitli yönlerini özelleştirmenize olanak tanır.

Önemli

November 30, 2025 tarihinden itibaren Azure Kubernetes Service (AKS) artık Azure Linux 2.0 için güvenlik güncelleştirmelerini desteklemez veya sağlamaz. Azure Linux 2.0 düğüm görüntüsü 202512.06.0 sürümünde dondurulur. 31 Mart 2026'dan itibaren düğüm görüntüleri kaldırılacak ve düğüm havuzlarınızı ölçeklendiremeyeceksiniz. düğüm havuzlarınızı desteklenen bir Kubernetes sürümüne yükselterek veya osSku AzureLinux3 ile desteklenen bir Azure Linux sürümüne geçin. Daha fazla bilgi için Emeklilik GitHub sorunu ve Azure Güncelleştirmeleri kullanımdan kaldırma duyurusu'na bakınız. Duyurular ve güncelleştirmeler hakkında bilgi sahibi olmak için AKS sürüm notlarını izleyin.

AKSNodeClass kaynaklarına genel bakış

AKSNodeClass kaynakları NAP için Azure özgü ayarları yapılandırmanıza olanak tanır. Her NodePool kaynak bir AKSNodeClass referans spec.template.spec.nodeClassRef kullanmalıdır. Birden fazla NodePools, aynı AKSNodeClass işaret edebilir ve bu, ortak Azure yapılandırmalarını farklı düğüm havuzlarında paylaşmanıza olanak sağlar.

Görüntü ailesi yapılandırması

imageFamily alanı, AKSNodeClass aracılığıyla sağlanan düğümler için varsayılan VM görüntüsünü ve önyükleme mantığını belirler. Görüntü ailesi belirtmezseniz Kubernetes sürümünüze göre varsayılan işletim sistemi sürümü kullanılır. GPU'lar uyumlu VM boyutlarında her iki görüntü ailesinde de desteklenir. Kubernetes sürümü başına varsayılan işletim sistemi sürümü hakkında daha fazla bilgi için AKS İşletim Sistemi Sürümü belgelerine bakın.

Desteklenen görüntü aileleri

  • Ubuntu: Ubuntu, AKS düğümleri için varsayılan Linux dağıtımıdır.
    • İşletim sistemi sürümü varsayılanları Kubernetes sürümünüz temelinde değişir. Ubuntu 22.04, Kubernetes sürüm 1.25 ile 1.33 arasında varsayılandır. Ubuntu 24.04, Kubernetes sürüm 1.34 ve üzeri için varsayılandır.
  • AzureLinux: Azure Linux, AKS iş yükleri için Microsoft alternatif Linux dağıtımıdır. Daha fazla bilgi için Azure Linux belgelerine bakın
  • AzureContainerLinux: Azure Container Linux, AKS iş yükleri için Microsoft’un değiştirilemez, kapsayıcılar için iyileştirilmiş işletim sistemidir. Daha fazla bilgi için Azure Container Linux belgelerine bakın.

Örnek görüntü ailesi yapılandırması

AKSNodeClassAzureLinux görüntü ailesini kullanacak şekilde yapılandıran aşağıdaki örneği inceleyin:

spec:
  imageFamily: AzureLinux

AKSNodeClassAzureContainerLinux görüntü ailesini kullanacak şekilde yapılandıran aşağıdaki örneği inceleyin:

spec:
  imageFamily: AzureContainerLinux

FIPS uyumlu düğüm görüntü yapılandırması

Federal Bilgi İşleme Standartları (FIPS) uyumlu düğüm görüntülerini de etkinleştirebilirsiniz. AKS'deki FIPS hakkında daha fazla bilgi için FIPS belgelerine bakın.

Alan fipsMode varsayılan olarak Devre Dışı olarak ayarlanır ve aşağıdaki seçeneklere ayarlanabilir:

  • FIPS - FIPS uyumlu düğüm görüntülerini seçin
  • Devre dışı - FIPS uyumlu düğüm görüntülerini kullanmayın

Aşağıdaki örnek, 'AKSNodeClass' öğesini fipsMode FIPS uyumlu düğüm görüntülerini seçecek şekilde ayarlayarak FIPS yapılandırıyor.

spec:
  fipsMode: FIPS

Sanal ağ (VNet) alt ağ yapılandırması

vnetSubnetID alanı, düğüm ağ arabirimlerini sağlamak için hangi Azure sanal ağ alt ağının kullanılacağını belirtir. Bu alan isteğe bağlıdır. Alt ağ belirtmezseniz NAP, Karpenter yüklemesi sırasında yapılandırılan varsayılan alt ağı kullanır. Daha fazla bilgi için bkz . NAP için alt ağ yapılandırmaları.

Örnek alt ağ yapılandırması

Alt ağ kimliği, aşağıdaki örnekte gösterildiği gibi tam Azure Resource Manager (ARM) biçiminde olmalıdır:

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

İşletim sistemi disk boyutu yapılandırması

alanı işletim osDiskSizeGB sistemi diskinin boyutunu gigabayt cinsinden belirtir. Varsayılan değer 128 GB, en düşük değer ise 30 GB'tır.

aşağıdaki iş yükleri için daha büyük işletim sistemi disk boyutlarını göz önünde bulundurun:

  • Önemli verileri yerel olarak depolayın.
  • Kapsayıcı görüntüleri için fazladan alan gerekmektedir.
  • Yüksek düzeyde disk G/Ç gereksinimlerine sahiptir.

Örnek işletim sistemi disk boyutu yapılandırması

spec:
  osDiskSizeGB: 256  # 256 GB OS disk

Geçici işletim sistemi disk yapılandırması

NAP, mevcut ve istenen disk boyutuna uygun olduğunda geçici işletim sistemi disklerini otomatik olarak kullanır. Kısa ömürlü işletim sistemi diskleri, yönetilen disklere kıyasla daha iyi performans ve daha düşük maliyet sağlar.

Kısa ömürlü disk seçim ölçütleri

Sistem aşağıdaki senaryolarda kısa ömürlü diskleri otomatik olarak seçer:

  • VM örnek türü Kısa ömürlü işletim sistemi disklerini destekler.
  • Kısa ömürlü disk kapasitesi, istenenden osDiskSizeGBbüyük veya buna eşittir.
  • VM yeterli kısa süreli depolama kapasitesine sahiptir.

Bu koşullar karşılanmazsa sistem yönetilen diskleri kullanmaya geri döner.

Kısa ömürlü disk türleri ve öncelik belirleme

Azure VM'ler farklı kısa ömürlü depolama türlerine sahip olabilir. Sistem aşağıdaki öncelik sırasını kullanır:

  • NVMe diskleri (en yüksek performans)
  • Önbellek diskleri (dengeli performans)
  • Kaynak diskleri (temel performans)

Kısa ömürlü disk yapılandırması örneği

Aşağıdaki örnekte gösterildiği gibi düğümlerin yeterli kısa ömürlü disk kapasitesine sahip olduğundan emin olmak için düğüm havuzu gereksinimlerini kullanabilirsiniz:

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

Bu yapılandırma yalnızca 128 GB'tan büyük kısa ömürlü disklere sahip VM örneği türlerinin seçilmesini sağlar ve belirtilen işletim sistemi disk boyutu için kısa ömürlü disk kullanımını garanti eder.

En fazla pod sayısı yapılandırması

maxPods alanı, bir düğümde zamanlanabilecek en fazla pod sayısını belirtir. Bu ayar hem küme yoğunluğu hem de ağ yapılandırmasını etkiler.

için maxPods en düşük değer 10, maksimum değer ise 250'dir.

için varsayılan davranış maxPods

için maxPods varsayılan davranış, ağ eklentisi yapılandırmasına bağlıdır. Aşağıdaki tabloda varsayılanlar özetlemektedir:

Ağ eklentisi yapılandırması Varsayılan düğüm başına maxPods
Azure CNI ile Standart Ağ (v1 veya NodeSubnet) 30
Yer paylaşımlı ağ ile CNI Azure 250
Hiçbiri (ağ eklentisi yok) 250
Diğer yapılandırmalar 110 (standart Kubernetes varsayılan)

Örnek maksimum pod yapılandırması

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

LocalDNS yapılandırması

LocalDNS, DNS sorgularını iş yüklerine daha yakın bir şekilde çözümleyerek sorgu gecikme süresini azaltan ve geçici DNS kesintileri sırasında dayanıklılığı geliştiren bir düğüm düzeyinde DNS ara sunucusu dağıtır. Daha fazla bilgi için LocalDNS belgelerine bakın. Varsayılan olarak, LocalDNS Devre Dışı olarak ayarlanır ve aşağıdaki seçeneklere göre yapılandırılabilir:

  • Disabled (varsayılan) - LocalDNS özelliğini devre dışı bırakır. DNS sorguları düğümde yerel olarak çözümlenmez.
  • Preferred - AKS, düğüm havuzunun Kubernetes sürümünü temel alarak LocalDNS etkinleştirmesini yönetir. Yapılandırma her zaman doğrulanır ve eklenir, ancak doğru Kubernetes sürümü kullanılmadığı sürece LocalDNS etkinleştirilmez.
  • Required - Tüm önkoşullar karşılanırsa düğüm havuzunda LocalDNS uygulanır. Gereksinimler karşılanmazsa dağıtım başarısız olur.

Örnek LocalDNS yapılandırması

ve vnetDNSOverridesgibi kubeDNSOverrides LocalDNS yapılandırmalarını özelleştirebilirsiniz. Desteklenen eklentiler hakkında daha fazla bilgi için bkz. LocalDNS'yi Özelleştirme.

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"

Kubelet yapılandırması

kubelet bölümü, düğüm davranışını etkileyen çeşitli kubelet parametrelerini yapılandırmanıza olanak tanır. Bu parametreler tipik kubelet bağımsız değişkenleridir, bu nedenle Azure sağlayıcı bunları doğrudan düğümdeki kubelet'e iletir.

Önemli

Kubelet ayarlarını dikkatle yapılandırın ve önce üretim dışı ortamlardaki değişiklikleri test edin.

CPU yönetimi

Aşağıdaki ayarlar kubelet için CPU yönetimi davranışını denetler:

spec:
  kubelet:
    cpuManagerPolicy: "static"  # or "none"
    cpuCFSQuota: true
    cpuCFSQuotaPeriod: "100ms"
  • cpuManagerPolicy: Kubelet'in CPU kaynaklarını tahsis etmesini nasıl denetlediğini kontrol eder. Gecikme süresine duyarlı iş yüklerinde CPU sabitleme için "static" olarak ayarla.
  • cpuCFSQuota: CPU sınırlarını belirten kapsayıcılar (container'lar) için CPU Tam Adil Zamanlayıcı (CFS) kota zorlamasını etkinleştirir.
  • cpuCFSQuotaPeriod: CPU CFS kota süresini ayarlar.

Görüntü çöp toplama

Aşağıdaki ayarlar kubelet için görüntü çöp toplama davranışını denetler:

spec:
  kubelet:
    imageGCHighThresholdPercent: 85
    imageGCLowThresholdPercent: 80

Bu ayarlar kubelet'in kapsayıcı görüntülerinin atık toplama işlemini ne zaman gerçekleştireceklerini denetler:

  • imageGCHighThresholdPercent: Görüntü çöp toplamayı tetikleyen disk kullanım yüzdesi.
  • imageGCLowThresholdPercent: Çöp toplamadan sonra hedef disk kullanım yüzdesi.

Topoloji yönetimi

Aşağıdaki ayar kubelet için topoloji yöneticisi ilkesini denetler:

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

Topoloji yöneticisi, CPU ve cihaz (GPU gibi) kaynakları arasında gecikmeye duyarlı iş yükleri için kaynak ayırmayı koordine etme konusunda yardımcı olur.

Sistem yapılandırması

Aşağıdaki ayarlar kubelet için ek sistem parametreleri yapılandırmanıza olanak sağlar:

spec:
  kubelet:
    allowedUnsafeSysctls:
      - "kernel.msg*"
      - "net.ipv4.route.min_pmtu"
    containerLogMaxSize: "50Mi"
    containerLogMaxFiles: 5
    podPidsLimit: 4096
  • allowedUnsafeSysctls: Podların kullanabileceği izin verilen güvenli olmayan sysctls listesi.
  • containerLogMaxSize: Kapsayıcı günlük dosyalarının döndürülmeden önceki maksimum boyutu.
  • containerLogMaxFiles: Saklanacak kapsayıcı günlük dosyalarının maksimum sayısı.
  • podPidsLimit: Herhangi bir podda izin verilen işlem sayısı üst sınırı.

Linux özel işletim sistemi yapılandırma ayarları

LinuxOSConfig bölümü, düğüm davranışını etkileyen çeşitli kubelet parametrelerini yapılandırmanıza olanak tanır. Bu parametreler tipik özel işletim sistemi bağımsız değişkenleridir, bu nedenle NAP bunları düğümdeki kubelet'e geçirir.

Özel Linux işletim sistemi yapılandırma ayarları, varsayılan değerler hakkında tüm ayrıntılar ve dikkat edilmesi gerekenler hakkında daha fazla bilgi için özel düğüm yapılandırma belgelerimize bakın.

Önemli

Linux işletim sistemi ayarlarını dikkatle yapılandırın ve önce üretim dışı ortamlardaki değişiklikleri test edin.

Linux dosya işleme sınırları ayarları

Dosya sistemi ayarlarını ayarlamak için aşağıdaki ayarları kullanın.

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

Linux yuva ve ağ ayarlama ayarları

TCP ve ağ ayarını ayarlamak için aşağıdaki ayarları kullanın.

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 

Linux çalışan sınırı ayarları

Çekirdek ayarını ayarlamak için aşağıdaki ayarları kullanın.

spec:
  linuxOSConfig:
      # Kernel Settings  
      kernelThreadsMax: 100000         # Range: 20-513785  Default: Dynamically calculated

Linux sanal bellek ayarları

Linux çekirdeğinin sanal bellek alt sisteminin çalışmasını ve kirli verilerin diske yazılmasını ayarlamak için aşağıdaki seçenekleri kullanın.

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

GPU ayarları

Aşağıdaki alan, kullanıcının NVIDIA GPU Operatörü gibi özel GPU sürücüsü yüklemesine izin vermesine olanak tanır.

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

Azure kaynak etiketleri yapılandırması

Belirli bir AKSNodeClass kaynağı kullanılarak oluşturulan tüm VM örnekleri için geçerli Azure kaynak etiketleri belirtebilirsiniz. Etiketler maliyet izleme, kaynak düzenleme ve uyumluluk gereksinimleri için kullanışlıdır.

Etiket sınırlamaları

  • Azure kaynak etiketlerinin kaynak başına 50 etiket sınırı vardır.
  • Etiket adları büyük/küçük harfe duyarlı değildir ancak etiket değerleri büyük/küçük harfe duyarlıdır.
  • Azure kullanılamayabilecek bazı etiket adlarını ayırır. Daha fazla bilgi için bkz. Etiket kılavuzu ve sınırları.

Örnek etiketler yapılandırması

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

Kapsamlı AKSNodeClass yapılandırma örneği

Aşağıdaki örnekte, bu makalede açıklanan tüm ayarları içeren kapsamlı AKSNodeClass bir yapılandırma gösterilmektedir:

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, AzureContainerLinux
  imageFamily: Ubuntu

  # FIPS compliant mode - allows support for FIPS-compliant node images
  # Default: Disabled
  # Valid values: FIPS, Disabled
  fipsMode: Disabled

  # LocalDNS mode - allows use of LocalDNS feature
  # Default: Disabled
  # Valid values: Preferred, Required, Disabled
  LocalDNS:
    mode: Disabled
    # additional details on vnetDNSOverrides and kubeDNSOverrides can be added here

  # 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

Sonraki Adımlar

AKS'de düğüm otomatik sağlama hakkında daha fazla bilgi için aşağıdaki makalelere bakın: