Konfigurasi kumpulan simpul untuk provisi otomatis node (NAP) di Azure Kubernetes Service (AKS)

Artikel ini menjelaskan cara mengonfigurasi kumpulan simpul untuk provisi otomatis simpul (NAP) di Azure Kubernetes Service (AKS), termasuk pemilih SKU, batas sumber daya, dan bobot prioritas. Ini juga menyediakan contoh untuk membantu Anda memulai.

AKS Otomatis menyertakan NAP secara default. Untuk kluster Standar AKS, Anda harus mengaktifkan NAP sebelum mengonfigurasi kumpulan simpulnya.

Cara NAP memilih VM untuk kumpulan simpul

NAP menggunakan persyaratan SKU komputer virtual (VM) untuk memutuskan VM terbaik untuk beban kerja yang tertunda. Anda dapat mengonfigurasi:

  • Keluarga SKU dan jenis instans tertentu.
  • Batas dan prioritas sumber daya.
  • Instans Spot atau Sesuai permintaan.
  • Arsitektur, GPU, dan persyaratan kemampuan lainnya.

Sumber daya NodePool menetapkan batasan pada simpul yang dibuat oleh NAP dan pod yang berjalan pada simpul tersebut. Saat Anda mengaktifkan NAP dengan konfigurasi kumpulan simpul default yang diatur ke Auto, ini akan membuat sumber daya defaultNodePool. Anda dapat memodifikasi kumpulan simpul ini atau membuat kumpulan simpul tambahan agar sesuai dengan persyaratan beban kerja Anda.

Cara NAP mengevaluasi dan memilih kumpulan simpul

Saat mengonfigurasi NodePools untuk NAP, ingatlah perilaku berikut:

  • NAP memerlukan setidaknya satu NodePool untuk berfungsi.
  • NAP mengevaluasi setiap yang dikonfigurasi.
  • NAP melewatkan NodePools dengan taint yang tidak ditoleransi oleh pod.
  • NAP menerapkan taint startup ke simpul yang disediakan tetapi tidak memerlukan toleransi pod.
  • NAP berfungsi paling baik dengan NodePools yang saling eksklusif, yang persyaratannya tidak saling tumpang tindih sehingga setiap pod hanya cocok dengan satu pool. Saat ada beberapa NodePools yang cocok, NAP menggunakan yang memiliki bobot tertinggi.

Meninjau konfigurasi kumpulan simpul default

Konfigurasi Karpenter NodePool default bernama default dibuat oleh NAP adalah sebagai berikut:

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
spec:
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
  template:
    spec:
      nodeClassRef:
        group: karpenter.azure.com
        kind: AKSNodeClass
        name: default
      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

NAP juga membuat system-surge pool node yang menyediakan kapasitas Linux AMD64 sesuai kebutuhan untuk add-on sistem penting. Ketika pod yang tertunda mentolerir CriticalAddonsOnly=true:NoSchedule taint dan cocok dengan persyaratan kumpulan, NAP dapat menyediakan simpul dari kumpulan ini. Node yang dibuat oleh pool memiliki label kubernetes.azure.com/mode: system.

Mengontrol kumpulan simpul default

Saat Anda membuat kluster AKS baru dengan NAP yang diaktifkan menggunakan Azure CLI, sertakan bendera --node-provisioning-default-pools untuk mengontrol apakah AKS membuat NAP default NodePools. Anda juga dapat menggunakan flag ini dengan az aks update saat mengaktifkan NAP pada cluster yang sudah ada.

Bendera --node-provisioning-default-pools menerima nilai berikut:

  • Auto (default): Membuat dua standar NodePools untuk penggunaan segera.
  • None: Tidak membuat NodePools apapun. Anda harus menetapkan sendiri.

Peringatan

Mengubah dari Auto ke None: Jika Anda mengubah pengaturan dari Auto ke None pada kluster yang ada, default NodePools tidak dihapus secara otomatis. Sebelum Anda menghapusnya, tentukan kapasitas penggantian yang sesuai untuk add-on sistem penting. Anda harus menghapus default NodePools secara manual jika Anda tidak lagi membutuhkannya.

Opsi konfigurasi kumpulan simpul

Bagian berikut menguraikan berbagai opsi konfigurasi untuk NodePools di NAP, termasuk label dan pemilih SKU terkenal, batas kumpulan simpul, dan bobot kumpulan simpul.

Label dan pemilih SKU terkenal

Kubernetes mendefinisikan label yang dikenal dengan baik yang Azure terapkan. Anda dapat menentukan label ini di bagian spec.requirementsNodePool API. NAP juga mendukung label khusus Azure untuk penjadwalan yang lebih canggih.

Tabel berikut mencantumkan label yang dapat Anda gunakan di bagian spec.requirements API Anda NodePool untuk menentukan karakteristik VM untuk simpul Anda:

Selector Description Example
karpenter.sh/capacity-type Jenis alokasi VM (Spot / Sesuai permintaan) Tempat
karpenter.azure.com/sku-family Keluarga VM SKU D, F, L, dll.
karpenter.azure.com/sku-series Seri VM SKU Dpls_v6
karpenter.azure.com/sku-name Nama SKU eksplisit Standard_A1_v2
karpenter.azure.com/sku-version Versi SKU (tanpa "v", dapat menggunakan 1) 1, 2
karpenter.azure.com/sku-cpu Jumlah CPU dalam VM 16
karpenter.azure.com/sku-memory Memori dalam VM di MiB 131072
karpenter.azure.com/sku-gpu-name Nama GPU A100
karpenter.azure.com/sku-gpu-manufacturer Produsen GPU nvidia
karpenter.azure.com/sku-gpu-count Jumlah GPU per VM 2
karpenter.azure.com/sku-networking-accelerated Apakah VM telah mempercepat jaringan [benar, salah]
karpenter.azure.com/sku-storage-premium-capable Apakah VM mendukung penyimpanan IO Premium [benar, salah]
karpenter.azure.com/sku-storage-ephemeralos-maxsize Batas ukuran untuk disk sistem operasi (OS) ephemeral dalam GB 92
kubernetes.azure.com/sku-cpu Jumlah CPU dalam VM 16
kubernetes.azure.com/sku-memory Memori dalam VM di MiB 131072
kubernetes.azure.com/cluster Nama kluster AKS my-cluster
kubernetes.azure.com/mode Mode kumpulan simpul [sistem, pengguna]
kubernetes.azure.com/priority Prioritas [titik, reguler]
kubernetes.azure.com/os-sku Sistem operasi SKU [Ubuntu, AzureLinux]
kubernetes.azure.com/fips_enabled Apakah FIPS diaktifkan true
topology.kubernetes.io/zone Zona ketersediaan [uksouth-1,uksouth-2,uksouth-3]
kubernetes.io/os Sistem operasi linux
kubernetes.io/arch Arsitektur CPU (AMD64 atau ARM64) [amd64, arm64]

Nilai pemilih memori dalam tabel ini adalah nilai MiB yang dilaporkan pada node yang dibuat oleh NAP. Sebelum Anda menambahkan pemilih, periksa label pada simpul Anda untuk mengonfirmasi nilai yang digunakan oleh kluster Anda.

Contoh keluarga SKU

Pemilih karpenter.azure.com/sku-family memungkinkan Anda menargetkan keluarga VM tertentu.

Keluarga Description
Seri D VM tujuan umum dengan rasio CPU-ke-memori yang seimbang
Seri F VM yang dioptimalkan komputasi dengan rasio CPU-ke-memori tinggi
Seri E VM yang dioptimalkan memori untuk aplikasi intensif memori
Seri L VM yang dioptimalkan untuk penyimpanan dengan throughput disk yang tinggi
Seri N VM berkemampuan GPU untuk beban kerja intensif komputasi

Contoh konfigurasi menggunakan keluarga SKU:

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

Contoh SKU GPU

Untuk memprovisikan simpul GPU NVIDIA dengan NAP, buat NodePool yang memilih ukuran VM yang mendukung GPU. Contoh berikut memungkinkan NAP untuk memilih SKU GPU NVIDIA seri N:

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

Jika Anda ingin AKS menginstal dan mengelola driver GPU NVIDIA, plugin perangkat, pengekspor metrik Data Center GPU Manager (DCGM), dan sinyal kesehatan GPU pada node GPU yang diprovisikan oleh NAP, konfigurasikan GPU terkelola pada AKSNodeClass yang dirujuk. Untuk informasi selengkapnya, lihat Membuat kumpulan simpul GPU yang dikelola AKS.

Contoh nama SKU

Pemilih karpenter.azure.com/sku-name memungkinkan Anda menentukan jenis instans VM yang tepat.

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

Contoh versi SKU

Pemilih karpenter.azure.com/sku-version menargetkan SKU VM generasi tertentu.

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

Contoh zona ketersediaan

Pemilih topology.kubernetes.io/zone memungkinkan Anda menentukan zona ketersediaan untuk simpul Anda.

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

Nota

Untuk menampilkan ukuran VM yang mendukung zona ketersediaan di wilayah, gunakan perintah az vm list-skus dengan parameter --location <region> --zone --output table. Konfirmasikan bahwa ukuran VM yang Anda pilih mendukung zona dalam NodePool persyaratan.

Contoh arsitektur

Pemilih kubernetes.io/arch memungkinkan Anda menentukan arsitektur CPU untuk simpul Anda. NAP mendukung simpul amd64 dan arm64 .

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

Contoh OS

Pemilih kubernetes.io/os memungkinkan Anda menentukan sistem operasi untuk simpul Anda.

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

Contoh jenis kapasitas

Pemilih karpenter.sh/capacity-type memungkinkan Anda menentukan apakah akan menggunakan instans Spot atau Sesuai permintaan.

Nota

NAP memprioritaskan instans Spot ketika baik Spot maupun On-demand ditentukan.

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

Batas kumpulan simpul

Secara default, NAP mencoba menjadwalkan beban kerja Anda dalam kuota Azure yang tersedia. Untuk kumpulan simpul dinamis, Anda dapat menentukan batas sumber daya agregat di semua simpul yang disediakan oleh kumpulan tersebut. Dalam contoh berikut, cpu: "1000" membatasi kumpulan hingga 1.000 inti vCPU, dan memory: 1000Gi membatasinya hingga 1.000 gibibyte memori:

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

Bobot kumpulan simpul

Ketika Anda memiliki beberapa kumpulan simpul yang ditentukan, Anda dapat mengatur preferensi di mana beban kerja harus dijadwalkan dengan menentukan bobot relatif dalam definisi kumpulan simpul Anda. Bidang weight menerima bilangan bulat dari 1 hingga 100, dan nilai yang lebih tinggi memberikan prioritas yang lebih tinggi pada kumpulan simpul. Jika Anda menghilangkan weight, nilainya secara efektif 0. Contohnya:

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

Kumpulan simpul statis

Pool node statis mempertahankan jumlah tetap node yang diprovisikan oleh NAP sebagaimana ditentukan di kolom replicas, terlepas dari permintaan pod. Untuk mengubah jumlah simpul, secara eksplisit menskalakan NodePool, misalnya dengan menggunakan kubectl scale dengan nodepool static-node-pool --replicas=7. Nilai opsional limits.nodes membatasi penskalaan eksplisit dan kapasitas sementara yang dibuat selama penggantian node. Untuk kumpulan simpul statis, nodes adalah satu-satunya bidang yang didukung di bawah limits; Anda tidak dapat mengatur batas CPU atau memori.

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

Nota

Untuk kumpulan simpul statis, Anda hanya dapat menetapkan nodes pada kolom limits. Anda tidak dapat mengatur batas sumber daya atau weight, dan konsolidasi gangguan tidak berlaku. Setelah membuat NodePool, Anda tidak dapat mengalihkannya antara mode statis dan dinamis dengan menambahkan atau menghapus replicas bidang .

Langkah selanjutnya

Untuk informasi selengkapnya tentang node auto-provisioning di AKS, lihat artikel berikut ini: