Aracılığıyla paylaş


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

Bu makalede, Karpenter kullanarak Azure Kubernetes Service'teki (AKS) düğüm otomatik sağlama (NAP) için Azure'a özgü ayarları tanımlamak üzere AKSNodeClass kaynakları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

30 Kasım 2025 itibarıyla Azure Kubernetes Service (AKS) artık Azure Linux 2.0 için güvenlik güncelleştirmelerini desteklememektedir veya sağlamamaktadır. 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'e geçerek desteklenen bir Azure Linux sürümüne geçin. Daha fazla bilgi için bkz. [Kullanımdan kaldırma] AKS üzerinde Azure Linux 2.0 düğüm havuzları.

AKSNodeClass kaynaklarına genel bakış

AKSNodeClass kaynakları NAP için Azure'a özgü ayarları yapılandırmanızı sağlar. Her NodePool kaynak bir AKSNodeClass referans spec.template.spec.nodeClassRef kullanmalıdır. Ortak Azure yapılandırmalarını farklı düğüm havuzlarında paylaşmanıza olanak sağlayan, aynı NodePoolsöğesine işaret eden birden çok AKSNodeClass seçeneğiniz olabilir.

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

imageFamily alanı, AKSNodeClass aracılığıyla sağlanan nodlar için varsayılan VM imajını ve başlangıç mantığını belirler. Bir görüntü ailesi belirtmezseniz, varsayılan değer olur Ubuntu2204. GPU'lar uyumlu VM boyutlarında her iki görüntü ailesinde de desteklenir.

Desteklenen görüntü aileleri

  • Ubuntu: Ubuntu 22.04 Uzun Vadeli Destek (LTS), AKS düğümleri için varsayılan Linux dağıtımıdır.
  • AzureLinux: Azure Linux, Aks iş yükleri için Microsoft'un alternatif Linux dağıtımıdır. Daha fazla bilgi için Bkz. Azure Linux belgeleri

Ö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

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

Federal Information Process Standard (FIPS) uyumlu düğüm görüntülerini de etkinleştirebilirsiniz. AKS'de FIPS hakkında daha fazla bilgi için FIPS belgelerimizi ziyaret edin

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ı

alanı, vnetSubnetID düğüm ağ arabirimlerini sağlamak için hangi Azure VNet 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

Kısa ömürlü 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'lerinin farklı türlerde kısa ömürlü depolaması 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 yapılandırması

alanı, maxPods bir düğümde zamanlanacak 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
Standart ağ ile Azure CNI (v1 veya NodeSubnet) 30
Yer paylaşımlı ağ ile Azure CNI 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: "30s"
        forwardDestination: VnetDNS
        forwardPolicy: Random
        maxConcurrent: 80
        protocol: ForceTCP
        queryLogging: Log
        serveStale: Immediate
        serveStaleDuration: "100s"
      - zone: "cluster.local"
        cacheDuration: "40s"
        forwardDestination: VnetDNS
        forwardPolicy: Sequential
        maxConcurrent: 70
        protocol: PreferUDP
        queryLogging: Error
        serveStale: Disable
        serveStaleDuration: "30s"
    kubeDNSOverrides:
      - zone: "."
        cacheDuration: "30s"
        forwardDestination: ClusterCoreDNS
        forwardPolicy: RoundRobin
        maxConcurrent: 100
        protocol: PreferUDP
        queryLogging: Log
        serveStale: Immediate
        serveStaleDuration: "60s"
      - zone: "cluster.local"
        cacheDuration: "10s"
        forwardDestination: ClusterCoreDNS
        forwardPolicy: Sequential
        maxConcurrent: 50
        protocol: PreferUDP
        queryLogging: Error
        serveStale: Disable
        serveStaleDuration: "30s"

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 argümanlarıdır, bu nedenle Azure sağlayıcısı onları düğümdeki kubelet'e doğrudan 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ı nasıl ayıranı denetler. 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ı.

Azure kaynak etiketleri yapılandırması

Belirli AKSNodeClass bir kaynak kullanılarak oluşturulan tüm VM örnekleri için geçerli olan Azure kaynak etiketlerini 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
  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

  # 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: