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

Bu makalede, SKU seçicileri, kaynak sınırları ve öncelik ağırlıkları dahil olmak üzere Azure Kubernetes Service (AKS) düğüm otomatik sağlama (NAP) için düğüm havuzlarının nasıl yapılandırılması açıklanır. Ayrıca, başlamanıza yardımcı olacak örnekler de sağlar.

AKS Otomatik varsayılan olarak NAP'yi içerir. AKS Standart kümeleri için düğüm havuzlarını yapılandırmadan önce NAP'yi etkinleştirmeniz gerekir.

NAP düğüm havuzları için VM'leri nasıl seçer?

NAP, bekleyen iş yükleri için en iyi VM'lere karar vermek için sanal makine (VM) SKU gereksinimlerini kullanır. Aşağıdakileri yapılandırabilirsiniz:

  • SKU aileleri ve belirli örnek türleri.
  • Kaynak sınırları ve öncelikleri.
  • Spot veya İsteğe Bağlı örnekler.
  • Mimari, GPU ve diğer özellikler gereksinimleri.

Kaynak, NAP tarafından NodePool oluşturulan düğümler ve bu düğümlerde çalışan podlar üzerinde kısıtlamalar belirler. NAP’yi, varsayılan düğüm havuzu yapılandırması Auto olarak ayarlanmışken etkinleştirdiğinizde, varsayılan NodePool kaynakları oluşturur. Bu düğüm havuzlarını değiştirebilir veya iş yükü gereksinimlerinize uygun ek düğüm havuzları oluşturabilirsiniz.

NAP düğüm havuzlarını nasıl değerlendirir ve seçer?

NAP için yapılandırırken NodePools aşağıdaki davranışları aklınızda bulundurun:

  • NAP işlevinin çalışması için en az bir tane NodePool gerekir.
  • NAP, yapılandırılan NodePoolher öğesini değerlendirir.
  • NAP, bir pod tarafından tolere edilmeyen taintlere sahip NodePools'i atlar.
  • NAP, sağlanan düğümlere başlangıç taintleri uygular, ancak pod toleransı gerektirmez.
  • NAP, her pod yalnızca bir havuzla eşleşsin diye gereksinimleri çakışmayan birbirini dışlayan NodePoolsile en iyi şekilde çalışır. Birden çok NodePools eşleşme olduğunda NAP, en yüksek ağırlığa sahip olanı kullanır.

Varsayılan düğüm havuzu yapılandırmasını gözden geçirme

Aşağıdaki örnek, Cilium tarafından desteklenen Azure CNI kullanan bir kümede NAP tarafından oluşturulan NodePool adlı varsayılan yapılandırmayı göstermektedir:

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
  annotations:
    kubernetes.io/description: "General purpose NodePool for generic workloads"
spec:
  disruption:
    consolidateAfter: 0s
    budgets:
      - nodes: "30%"
  template:
    metadata:
      labels:
        kubernetes.azure.com/mode: "user"
        # Required for Karpenter to predict overhead from the Cilium DaemonSet.
        kubernetes.azure.com/ebpf-dataplane: cilium
    spec:
      expireAfter: Never
      # Requirements that constrain the parameters of provisioned nodes.
      # These requirements are combined with pod.spec.affinity.nodeAffinity rules.
      # Operators { In, NotIn, Exists, DoesNotExist, Gt, and Lt } are supported.
      # https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators
      requirements:
        - key: kubernetes.io/arch
          operator: In
          values: ["amd64"]
        - key: kubernetes.io/os
          operator: In
          values: ["linux"]
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["on-demand"]
        - key: karpenter.azure.com/sku-family
          operator: In
          values: [D]
      startupTaints:
        # https://karpenter.sh/docs/concepts/nodepools/#cilium-startup-taint
        - key: node.cilium.io/agent-not-ready
          effect: NoExecute
          value: "true"
      nodeClassRef:
        group: karpenter.azure.com
        kind: AKSNodeClass
        name: default

NAP ayrıca kritik sistem eklentileri için isteğe bağlı Linux AMD64 kapasitesi sağlayan bir system-surge düğüm havuzu oluşturur. CriticalAddonsOnly=true:NoSchedule taint’ini tolere eden ve havuz gereksinimlerini karşılayan bekleyen bir pod olduğunda, NAP bu havuzdan bir düğüm oluşturabilir. Havuz tarafından oluşturulan düğümler etikete kubernetes.azure.com/mode: system sahiptir.

Varsayılan düğüm havuzlarını denetleme

Azure CLI kullanarak NAP ile etkinleştirilmiş yeni bir AKS kümesi oluşturduğunuzda, AKS'nin --node-provisioning-default-pools varsayılan NAP'yi NodePoolsoluşturup oluşturmadığını denetlemek için bayrağını ekleyin. Mevcut bir kümede NAP’i etkinleştirdiğinizde, bu bayrağı az aks update ile de kullanabilirsiniz.

--node-provisioning-default-pools bayrağı aşağıdaki değerleri kabul eder:

  • Auto (varsayılan): Hemen kullanmak için iki standart NodePools oluşturur.
  • None: herhangi bir NodePoolsoluşturmaz. Kendi tanımınızı yapmanız gerekir.

Uyarı

Auto'dan None'ye değişiklik: Ayarı mevcut bir kümede Auto'den None'e değiştirirseniz, varsayılan NodePools otomatik olarak silinmez. Bunları silmeden önce kritik sistem eklentileri için uygun değiştirme kapasitesi tanımlayın. Artık bunlara ihtiyacınız yoksa, varsayılan NodePools öğelerini manuel olarak silmeniz gerekir.

Yapılandırma seçenekleri düğüm havuzu

Aşağıdaki bölümlerde NAP için, iyi bilinen etiketler ve SKU seçiciler, düğüm havuzu sınırları, ve düğüm havuzu ağırlıkları gibi çeşitli yapılandırma seçenekleri özetlenmiştir.

İyi bilinen etiketler ve SKU seçicileri

Kubernetes, Azure'ın uyguladığı iyi bilinen etiketleri tanımlar. Bu etiketleri API'nin spec.requirementsNodePool bölümünde tanımlayabilirsiniz. NAP, daha gelişmiş zamanlama için Azure özgü etiketleri de destekler.

Aşağıdaki tabloda, düğümleriniz için VM özelliklerini tanımlamak üzere API'nizin spec.requirementsNodePool bölümünde kullanabileceğiniz etiketler listelenir:

Selector Description Example
karpenter.sh/capacity-type VM ayırma türü (Spot / İsteğe bağlı) Nokta
karpenter.azure.com/sku-family VM SKU ailesi D, F, L vb.
karpenter.azure.com/sku-series VM SKU serisi Dpls_v6
karpenter.azure.com/sku-name Açık SKU adı Standard_A1_v2
karpenter.azure.com/sku-version SKU sürümü ("v" olmadan 1 kullanabilir) 1, 2
karpenter.azure.com/sku-cpu VM'deki CPU sayısı 16
karpenter.azure.com/sku-memory VM bellek miktarı (MiB olarak) 131072
karpenter.azure.com/sku-gpu-name GPU adı A100
karpenter.azure.com/sku-gpu-manufacturer GPU üreticisi nvidia
karpenter.azure.com/sku-gpu-count VM başına GPU sayısı 2
karpenter.azure.com/sku-networking-accelerated VM'nin ağı hızlandırıp hızlandırmadığı [doğru, yanlış]
karpenter.azure.com/sku-storage-premium-capable VM'nin Premium IO depolamayı destekleyip desteklemediği [doğru, yanlış]
karpenter.azure.com/sku-storage-ephemeralos-maxsize GB cinsinden kısa ömürlü işletim sistemi (OS) diski için boyut sınırı 92
kubernetes.azure.com/sku-cpu VM'deki CPU sayısı 16
kubernetes.azure.com/sku-memory VM bellek miktarı (MiB olarak) 131072
kubernetes.azure.com/cluster AKS kümesi adı my-cluster
kubernetes.azure.com/mode Düğüm havuzu modu [sistem, kullanıcı]
kubernetes.azure.com/priority Öncelik [spot, düzenli]
kubernetes.azure.com/os-sku İşletim sistemi SKU'su [Ubuntu, AzureLinux]
kubernetes.azure.com/fips_enabled FIPS'nin etkinleştirilip etkinleştirilmediği doğru
topology.kubernetes.io/zone Kullanılabilirlik alanları [uksouth-1,uksouth-2,uksouth-3]
kubernetes.io/os İşletim sistemi Linux işletim sistemi
kubernetes.io/arch CPU mimarisi (AMD64 veya ARM64) [amd64, arm64]

Bu tablodaki bellek seçici değerleri, NAP tarafından oluşturulan düğümlerde bildirilen MiB değerleridir. Seçici eklemeden önce, kümeniz tarafından kullanılan değeri onaylamak için düğümlerinizdeki etiketleri inceleyin.

SKU ailesi örnekleri

Seçici, karpenter.azure.com/sku-family belirli VM ailelerini hedeflemenizi sağlar.

Aile Description
D Serisi Dengeli CPU-bellek oranına sahip genel amaçlı VM'ler
F serisi Yüksek CPU-bellek oranına sahip hesaplama için optimize edilmiş sanal makineler
E serisi Bellek yoğun uygulamalar için optimize edilmiş sanal makineler
L serisi Yüksek disk aktarım hızına sahip depolama için iyileştirilmiş VM'ler
N serisi yoğun işlem gücü kullanan iş yükleri için GPU özellikli VM'ler

SKU ailesi kullanılarak örnek yapılandırma:

requirements:
- key: karpenter.azure.com/sku-family
  operator: In
  values:
  - D
  - F

GPU SKU örneği

NAP ile NVIDIA GPU düğümleri sağlamak için GPU özellikli VM boyutlarını seçen bir NodePool oluşturun. Aşağıdaki örnek NAP'nin N serisi NVIDIA GPU SKU'larını seçmesine olanak tanır:

requirements:
- key: karpenter.azure.com/sku-family
  operator: In
  values:
  - N
- key: karpenter.azure.com/sku-gpu-manufacturer
  operator: In
  values:
  - nvidia

AKS'nin NVIDIA GPU sürücüsünü, cihaz eklentisini, Data Center GPU Manager (DCGM) metrik dışa aktarıcısını ve NAP ile sağlanan GPU düğümlerindeki GPU durum sinyallerini yüklemesini ve yönetmesini istiyorsanız, başvurulan AKSNodeClass içinde yönetilen GPU'yu yapılandırın. Daha fazla bilgi için bkz. AKS tarafından yönetilen GPU düğüm havuzu oluşturma.

SKU adı örnekleri

Seçici, karpenter.azure.com/sku-name tam VM örneği türünü belirtmenize olanak tanır.

requirements:
- key: karpenter.azure.com/sku-name
  operator: In
  values:
  - Standard_D4s_v3
  - Standard_F8s_v2

SKU sürümü örnekleri

Seçici, karpenter.azure.com/sku-version VM SKU'larının belirli nesillerini hedefler.

requirements:
- key: karpenter.azure.com/sku-version
  operator: In
  values:
  - "3"  # v3 generation
  - "5"  # v5 generation

Kullanılabilirlik alanı örneği

Seçici, topology.kubernetes.io/zone düğümleriniz için kullanılabilirlik alanlarını belirtmenize olanak tanır.

requirements:
- key: topology.kubernetes.io/zone
  operator: In
  values:
  - eastus-1
  - eastus-2

Uyarı

Bir bölgedeki kullanılabilirlik alanlarını destekleyen VM boyutlarını listelemek için komutunu parametrelerle birlikte --location <region> --zone --output table kullanınaz vm list-skus. Seçtiğiniz VM boyutunun gereksinimdeki bölgeleri desteklediğini NodePool onaylayın.

Mimari örneği

Seçici, kubernetes.io/arch düğümleriniz için CPU mimarisini belirtmenize olanak tanır. NAP hem amd64 hem de arm64 düğümlerini destekler.

requirements:
- key: kubernetes.io/arch
  operator: In
  values:
  - amd64
  - arm64

İşletim sistemi örneği

Seçici, kubernetes.io/os düğümleriniz için işletim sistemini belirtmenize olanak tanır.

requirements:
- key: kubernetes.io/os
  operator: In
  values:
  - linux

Kapasite türü örneği

Seçici, karpenter.sh/capacity-type Spot veya İsteğe Bağlı örneklerin kullanılıp kullanılmayacağını belirtmenize olanak tanır.

Uyarı

NAP, hem Spot hem de İsteğe Bağlı belirtildiğinde Spot örneklere öncelik tanır.

requirements:
- key: karpenter.sh/capacity-type
  operator: In
  values:
  - spot
  - on-demand

Düğüm havuzu limitleri

Varsayılan olarak NAP, kullanılabilir Azure kotası içinde iş yüklerinizi zamanlamayı dener. Dinamik düğüm havuzu için, bu havuz tarafından sağlanan tüm düğümlerde toplam kaynak sınırları belirtebilirsiniz. Aşağıdaki örnekte havuzu cpu: "1000" 1.000 vCPU çekirdeğiyle ve memory: 1000Gi 1.000 gibibayt bellekle sınırlar:

spec:
  # Resource limits constrain the total size of the node pool.
  # Limits prevent Node Auto Provisioning from creating new instances once the limit is exceeded.
  limits:
    cpu: "1000"
    memory: 1000Gi

Düğüm havuzu ağırlıkları

Birden çok düğüm havuzu tanımladığınızda, düğüm havuzu tanımlarınızdaki göreli ağırlığı tanımlayarak bir iş yükünün zamanlanacağı yer için bir tercih ayarlayabilirsiniz. alanı weight 1 ile 100 arasında bir tamsayı kabul eder ve daha yüksek değerler düğüm havuzuna daha yüksek öncelik verir. weight öğesini atlarsanız, değeri fiilen 0’dır. Örneğin:

spec:
  # Priority given to the node pool when the scheduler considers which to select. 
  # Higher weights indicate higher priority when comparing node pools.
  # Specifying no weight is equivalent to specifying a weight of 0.
  weight: 10

Statik düğüm havuzları

Sabit düğüm havuzları, pod talebinden bağımsız olarak replicas alanında belirtilen sabit NAP tarafından sağlanan düğüm sayısını korur. Düğüm sayısını değiştirmek için, örneğin kubectl scale ile NodePool kullanarak nodepool static-node-pool --replicas=7 öğesini açıkça ölçeklendirin. İsteğe bağlı limits.nodes değer, düğüm değiştirme sırasında oluşturulan açık ölçeklendirmeyi ve geçici kapasiteyi kısıtlar. Statik düğüm havuzları için altında nodes desteklenen tek alandır limits; CPU veya bellek sınırlarını ayarlayamazsınız.

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: static-node-pool
spec:
  replicas: 5
  template:
    spec:
      requirements:
      - key: karpenter.azure.com/sku-name
        operator: In
        values:
          - Standard_D4s_v3
          - Standard_F8s_v2
      - key: topology.kubernetes.io/zone
        operator: In
        values:
          - eastus-1
          - eastus-2
          - eastus-3
  limits:
    nodes: 10

Uyarı

Statik düğüm havuzları için yalnızca nodes alanında limits ayarlayabilirsiniz. Kaynak sınırlarını veya weight ayarlayamazsınız ve kesinti konsolidasyonu geçerli değildir. oluşturduktan NodePoolsonra, alanı ekleyerek veya kaldırarak replicas statik ve dinamik modlar arasında geçiş yapamazsınız.

Sonraki Adımlar

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