Mengonfigurasi sumber daya AKSNodeClass untuk provisi otomatis simpul (NAP) di Azure Kubernetes Service (AKS)

Artikel ini menjelaskan cara mengonfigurasi sumber daya AKSNodeClass untuk menentukan pengaturan khusus Azure untuk provisi otomatis simpul (NAP) di Azure Kubernetes Service (AKS) menggunakan Karpenter. AKSNodeClass memungkinkan Anda untuk menyesuaikan berbagai aspek node yang disediakan Karpenter, seperti gambar komputer virtual (VM), ukuran disk sistem operasi (OS), pod maksimum per node, dan konfigurasi kubelet.

Penting

Mulai November 30, 2025, Azure Kubernetes Service (AKS) tidak lagi mendukung atau menyediakan pembaruan keamanan untuk Azure Linux 2.0. Image node Azure Linux 2.0 dibekukan pada rilis 202512.06.0. Mulai tanggal 31 Oktober 2026, gambar simpul akan dihapus, dan Anda tidak akan dapat menskalakan kumpulan simpul Anda. Migrasikan ke versi Linux Azure yang didukung dengan meningkatkan kumpulan simpul Anda ke versi Kubernetes yang didukung atau bermigrasi ke osSku AzureLinux3. Untuk informasi selengkapnya, lihat masalah GitHub Retirement dan pengumuman penghentian pembaruan Azure. Untuk tetap mendapatkan informasi tentang pengumuman dan pembaruan, ikuti catatan rilis AKS.

Gambaran umum sumber daya AKSNodeClass

sumber daya AKSNodeClass memungkinkan Anda mengonfigurasi pengaturan khusus Azure untuk NAP. Setiap NodePool sumber daya harus mereferensikan AKSNodeClass menggunakan spec.template.spec.nodeClassRef. Anda dapat memiliki beberapa NodePools yang menunjuk ke AKSNodeClass yang sama, memungkinkan Anda berbagi konfigurasi Azure umum di berbagai kumpulan simpul.

Penting

Mengubah pengaturan pada AKSNodeClass yang sudah ada tidak mengonfigurasi ulang simpul yang sedang berjalan. NAP menandai simpul yang disediakan dari konfigurasi sebelumnya sebagai drift dan menggantinya, tunduk pada kontrol gangguan pada sumber daya yang mereferensikan NodePool. Kolom tags adalah satu-satunya pengecualian, karena perubahan tag berlaku untuk sumber daya Azure yang ada tanpa mengganti node. Untuk mempelajari lebih lanjut, lihat Drift dan Anggaran gangguan. Sebelum Anda mengubah AKSNodeClass yang digunakan oleh beban kerja produksi, tinjau panduan ini.

Konfigurasi grup gambar

Kolom imageFamily menetapkan image VM default dan logika bootstrap untuk node yang diprovisikan melalui AKSNodeClass. Jika Anda tidak menentukan keluarga gambar, versi OS default sesuai dengan versi Kubernetes Anda akan digunakan. Unit Pemrosesan Grafis (GPU) didukung dengan kedua jenis gambar pada ukuran VM yang kompatibel. Untuk informasi selengkapnya tentang versi OS default per versi Kubernetes, lihat dokumentasi Versi OS AKS.

Jenis gambar yang didukung

  • Ubuntu: Ubuntu adalah distribusi Linux default untuk simpul AKS.
    • Default versi OS berubah berdasarkan versi Kubernetes Anda. Ubuntu 22.04 adalah default untuk Kubernetes versi 1.25 hingga 1.33. Ubuntu 24.04 adalah default untuk Kubernetes versi 1.34 dan yang lebih baru.
  • AzureLinux: Azure Linux adalah distribusi Linux alternatif Microsoft untuk beban kerja AKS. Untuk informasi selengkapnya, lihat dokumentasi Linux Azure.
  • AzureContainerLinux: Azure Container Linux didukung dengan AKS 1.34 dan yang lebih baru. Gunakan VM generasi 2 dan aktifkan kedua pengaturan Trusted Launch secara eksplisit, bahkan ketika Anda tidak mengharuskannya:
    • Atur security.trustedLaunch.vtpm ke true.
    • Atur security.trustedLaunch.secureBoot ke true.
    • Jika Anda mengatur osDiskSizeGB, gunakan nilai setidaknya 60.
    • Jangan gabungkan keluarga gambar ini dengan pengaturan yang tidak didukung oleh gambar ini. Lihat Azure Container Linux di AKS untuk detailnya.
  • Windows2022: Windows Server 2022 sedang dalam pratinjau. Ini membutuhkan arsitektur AMD64 dan tidak didukung dengan data plane Cilium. Windows2022 tidak mendukung FIPS atau Trusted Launch. Jangan konfigurasi linuxOSConfig, aktifkan streaming artefak, atau atur LocalDNS ke mode selain Disabled.
  • Windows2025: Windows Server 2025 sedang dalam pratinjau. Ini membutuhkan arsitektur AMD64 dan tidak didukung dengan data plane Cilium. FIPS diperlukan dan diaktifkan secara efektif bahkan ketika fipsMode dihilangkan. Jangan konfigurasi linuxOSConfig, aktifkan streaming artefak, atau atur LocalDNS ke mode selain Disabled.

Contoh konfigurasi keluarga gambar

Contoh berikut mengonfigurasi AKSNodeClass untuk menggunakan AzureLinux keluarga gambar:

spec:
  imageFamily: AzureLinux

konfigurasi Azure Container Linux

Contoh berikut menggunakan Azure Container Linux dengan pengaturan Peluncuran Tepercaya yang diperlukan. Ini menghilangkan osDiskSizeGB sehingga platform memilih ukuran disk yang didukung.

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: azure-container-linux
spec:
  imageFamily: AzureContainerLinux
  security:
    trustedLaunch:
      vtpm: true
      secureBoot: true

dukungan OS Windows (pratinjau)

Nota

Fitur pratinjau AKS tersedia atas dasar layanan mandiri dan pendaftaran sukarela. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan pratinjau tersebut dikecualikan dari perjanjian tingkat layanan (SLA) serta garansi terbatas. Fitur pratinjau AKS sebagian didukung oleh dukungan pelanggan sebatas upaya terbaik. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:

NAP mendukung gambar Windows2022 dan Windows2025.

  • Windows2022: Windows Server 2022 sedang dalam pratinjau. Ini membutuhkan arsitektur AMD64 dan tidak didukung dengan data plane Cilium. Windows2022 tidak mendukung FIPS atau Peluncuran Tepercaya. Jangan konfigurasi linuxOSConfig, aktifkan streaming artefak, atau atur LocalDNS ke mode selain Disabled.
  • Windows2025: Windows Server 2025 sedang dalam pratinjau. Ini membutuhkan arsitektur AMD64 dan tidak didukung dengan data plane Cilium. FIPS diperlukan dan diaktifkan secara efektif bahkan ketika fipsMode dihilangkan. Jangan konfigurasi linuxOSConfig, aktifkan streaming artefak, atau atur LocalDNS ke mode selain Disabled.

Konfigurasi Windows2022

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: windows-2025
spec:
  imageFamily: Windows2025

Konfigurasi Windows2025

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: windows-2025
spec:
  imageFamily: Windows2025
  security:
    trustedLaunch:
      vtpm: true
      secureBoot: true

Penting

Keluarga image Windows merupakan fitur pratinjau. Gunakan Windows NodePool yang memilih kubernetes.io/os: windows dan kubernetes.io/arch: amd64, dan pastikan bahwa beban kerja juga memilih simpul Windows. Untuk detailnya, lihat Mengonfigurasi kumpulan simpul untuk provisi otomatis simpul di AKS.

Konfigurasi gambar simpul yang sesuai dengan FIPS

Anda juga dapat mengaktifkan gambar node yang sesuai dengan Standar Pemrosesan Informasi Federal (FIPS). Untuk informasi selengkapnya tentang FIPS di AKS, lihat dokumentasi FIPS.

Bidang fipsMode diatur secara default ke Dinonaktifkan, dan dapat diatur ke opsi berikut:

  • FIPS - pilih gambar simpul yang mematuhi FIPS
  • Dinonaktifkan - jangan gunakan gambar simpul yang mematuhi FIPS

Contoh berikut mengonfigurasi 'AKSNodeClass' untuk memilih gambar simpul yang mematuhi FIPS dengan mengatur fipsMode ke FIPS:

spec:
  fipsMode: FIPS

Konfigurasi IP publik tingkat instans

Anda dapat menetapkan alamat IPv4 publik ke setiap simpul yang disediakan NAP dengan mengatur nodePublicIP.enabled ke true. Anda dapat secara opsional menentukan ipTags atau prefixIDs. Gunakan satu atau yang lain, bukan keduanya.

Gunakan IP publik tingkat instans dengan awalan

Secara opsional, tentukan satu awalan IP publik IPv4 menggunakan prefixIDs. Awalan harus berada di wilayah yang sama dengan kluster. Untuk awalan zona, batasi NodePool terkait ke zona ketersediaan yang sama. Anda tidak dapat menentukan ipTags dan prefixIDs bersama-sama - gunakan hanya salah satunya.

Identitas kluster memerlukan izin untuk menggunakan awalan IP publik, jika ditentukan, dan untuk membuat dan mengelola sumber daya IP publik simpul. Untuk penyiapan lengkap, keamanan jaringan, dan panduan verifikasi, lihat Menggunakan IP publik simpul.

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: public-ip-nodes
spec:
  nodePublicIP:
    enabled: true
    # Optional. Specify at most one IPv4 public IP prefix resource ID.
    prefixIDs:
      - /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Network/publicIPPrefixes/<prefix-name>

Gunakan IP publik tingkat instans dengan tag IP dan preferensi perutean internet

Contoh berikut menunjukkan cara menggunakan IP publik tingkat instans dengan tag IP:

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: public-ip-nodes
spec:
  nodePublicIP:
    enabled: true
    ipTags:
      - ipTagType: RoutingPreference
        tag: Internet
    # Optional. Specify at most one IPv4 public IP prefix resource ID.
    prefixIDs:
      - /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Network/publicIPPrefixes/<prefix-name>

Streaming Artefakt

Streaming Artefak memungkinkan Anda melakukan streaming gambar kontainer dari Azure Container Registry (ACR) ke Azure Kubernetes Service (AKS). AKS hanya mengunduh lapisan yang diperlukan saat pod pertama kali dijalankan, sehingga mengurangi waktu yang dibutuhkan untuk menerapkan beban kerja Anda.

Prasyarat

  • Streaming Artefak mengharuskan Anda memiliki ACR tingkat Premium yang terintegrasi dengan kluster AKS Anda.
  • Artifact Streaming harus diaktifkan di ACR.

Lihat dokumentasi Artifact Streaming untuk petunjuk untuk mengaktifkan Artifact Streaming di ACR.

Mengaktifkan streaming artefak di kluster NAP

Cluster dengan Node Auto Provisioning (NAP) yang diaktifkan dapat mengaktifkan streaming artefak dengan menggunakan bidang spec.artifactStreaming.enabled dari CRD AKSNodeClass. Setel field ini ke true untuk mengaktifkan streaming artefak pada setiap node baru maupun yang sudah ada, yang dikelola NAP dan terkait dengan CRD AKSNodeClass ini.

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: my-node-class
spec:
  # Enables artifact streaming; To use this feature container images must also enable artifact streaming on ACR
  # Valid values: true, false; defaults to false if not specified
  artifactStreaming:
    enabled: 
      true

Nota

Untuk menggunakan streaming artefak pada simpul terkelola AKS NAP, Anda juga harus mengaktifkan streaming artefak di Azure Container Registry (ACR). Jika Anda tidak mengatur opsi ini di ACR, nilai default bidang ini adalah false.

Konfigurasi subnet jaringan virtual (VNet)

Bidang vnetSubnetID menentukan subnet VNet Azure mana yang harus digunakan untuk menyediakan antarmuka jaringan simpul. Bidang ini bersifat opsional. Jika Anda tidak menentukan subnet, NAP menggunakan subnet default yang dikonfigurasi selama penginstalan Karpenter. Untuk informasi selengkapnya, lihat Konfigurasi subnet untuk NAP.

Contoh konfigurasi subnet

ID subnet harus dalam format Azure Resource Manager lengkap (ARM), seperti yang ditunjukkan dalam contoh berikut:

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

Konfigurasi ukuran disk OS

Bidang osDiskSizeGB menentukan ukuran disk OS dalam gigabyte. Nilai defaultnya adalah 128 GB, dan nilai minimumnya adalah 30 GB.

Pertimbangkan ukuran disk OS yang lebih besar untuk beban kerja yang:

  • Simpan data yang signifikan secara lokal.
  • Memerlukan ruang ekstra untuk gambar kontainer.
  • Memiliki persyaratan I/O disk tinggi.

Contoh konfigurasi ukuran disk OS

spec:
  osDiskSizeGB: 256  # 256 GB OS disk

Konfigurasi disk OS Ephemeral

NAP secara otomatis menggunakan disk OS Ephemeral jika tersedia dan cocok untuk ukuran disk yang diminta. Disk OS Ephemeral memberikan performa yang lebih baik dan biaya yang lebih rendah dibandingkan dengan disk terkelola.

Kriteria pemilihan disk sementara

Sistem secara otomatis memilih disk Ephemeral dalam skenario berikut:

  • Jenis instans VM mendukung disk OS Ephemeral.
  • Kapasitas disk Ephemeral lebih besar dari atau sama dengan yang diminta osDiskSizeGB.
  • VM memiliki kapasitas penyimpanan ephemeral yang memadai.

Jika kondisi ini tidak terpenuhi, sistem akan kembali menggunakan disk terkelola.

Jenis disk Ephemeral dan pemrioritasan

Azure VM dapat memiliki berbagai jenis penyimpanan ephemeral. Sistem menggunakan urutan prioritas berikut:

  • Disk NVMe (performa tertinggi)
  • Cache disk (performa seimbang)
  • Disk sumber daya (performa dasar)

Contoh konfigurasi cakram ephemeral

Anda dapat menggunakan persyaratan kumpulan simpul untuk memastikan simpul memiliki kapasitas disk sementara yang memadai, seperti yang ditunjukkan dalam contoh berikut:

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:
        group: karpenter.azure.com
        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

Konfigurasi ini memastikan bahwa hanya jenis instans VM dengan disk ephemeral yang lebih besar dari 128 GB yang dipilih, yang menjamin penggunaan disk ephemeral untuk ukuran disk OS yang ditentukan.

Konfigurasi pod maksimum

Bidang maxPods menentukan jumlah maksimum pod yang dapat dijadwalkan pada node. Pengaturan ini memengaruhi kepadatan kluster dan konfigurasi jaringan.

Nilai minimum untuk maxPods adalah 10, dan nilai maksimum adalah 250.

Perilaku bawaan untuk maxPods

Perilaku default untuk maxPods tergantung pada konfigurasi plugin jaringan. Tabel berikut ini meringkas default:

Konfigurasi plugin jaringan Default maxPods per simpul
Azure CNI dengan jaringan standar (v1 atau NodeSubnet) 30
Azure CNI dengan jaringan overlay 250
Tidak ada (tidak ada plugin jaringan) 250
Konfigurasi lain 110 (default Kubernetes standar)

Contoh pengaturan pod maksimum

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

Konfigurasi LocalDNS

LocalDNS menyebarkan proksi DNS di tingkat simpul yang memproses kueri DNS lebih dekat dengan beban kerja, mengurangi latensi kueri, dan meningkatkan ketahanan selama gangguan DNS sementara. Untuk informasi selengkapnya, lihat dokumentasi LocalDNS. Secara default, LocalDNS diatur ke Dinonaktifkan dan dapat dikonfigurasi ke opsi berikut:

  • Disabled (default) - Menonaktifkan fitur LocalDNS. Kueri DNS tidak diselesaikan secara lokal pada simpul.
  • Preferred - AKS mengelola pengaktifan LocalDNS berdasarkan versi Kubernetes dari kumpulan simpul. Konfigurasi selalu divalidasi dan disertakan, tetapi LocalDNS tidak diaktifkan kecuali versi Kubernetes yang benar digunakan.
  • Required - LocalDNS diberlakukan pada kumpulan simpul jika semua prasyarat terpenuhi. Jika persyaratan tidak terpenuhi, penyebaran gagal.

Contoh konfigurasi LocalDNS

Anda dapat menyesuaikan konfigurasi LocalDNS seperti vnetDNSOverrides dan kubeDNSOverrides. Untuk detail selengkapnya tentang plugin yang didukung, lihat Menyesuaikan LocalDNS.

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"

Memperbarui konfigurasi LocalDNS pada AKSNodeClass yang ada

Pengaturan localDNS berpartisipasi dalam deteksi penyimpangan seperti pengaturan lainnya AKSNodeClass . Ketika Anda mengubah spec.localDNS pada AKSNodeClass yang sudah dirujuk oleh node yang ada, NAP menerapkan perubahan melalui mekanisme Drift standar. NAP tidak membuat image ulang node yang ada.

Perilaku berikut berlaku saat Anda mengubah mode atau penimpaan LocalDNS, seperti mengubah mode dari Disabled ke Required:

  • Simpul baru: Setiap simpul yang disediakan NAP setelah Anda memperbarui AKSNodeClass akan menggunakan konfigurasi LocalDNS baru.
  • Simpul yang ada: NAP menandai objek yang ada NodeClaim sebagai menyimpang karena konfigurasi yang direkam tidak lagi cocok dengan AKSNodeClass. NAP meluncurkan simpul pengganti yang menggunakan konfigurasi LocalDNS baru, lalu melakukan cordon, drain, dan menghapus simpul yang di-drifted.
  • Tidak ada reimage: Mengaktifkan LocalDNS pada kumpulan simpul terkelola AKS akan me-reimage setiap simpul di kumpulan. NAP justru menggantikan simpul itu. Bagaimanapun, pod pada node yang terpengaruh dikeluarkan dan dijadwalkan ulang, jadi rencanakan untuk dampak beban kerja yang sama.

Penting

Mengatur mode ke Preferred atau Disabled juga mengubah konfigurasi AKSNodeClass yang di-resolve dan menyebabkan node yang ada mengalami drift. Setiap perubahan dalam bagian localDNS, termasuk nilai vnetDNSOverrides dan kubeDNSOverrides, menyebabkan penggantian node.

Ketika penggantian dimulai

Evaluasi dan penggantian drift dimulai segera setelah Anda menerapkan versi terbaru AKSNodeClass. Penggantian mengikuti siklus hidup gangguan NAP standar, sehingga frekuensi dan waktunya bergantung pada kontrol gangguan yang Anda konfigurasikan pada sumber daya NodePool yang mereferensikan AKSNodeClass.

Cara NAP mengatur penggantian

Penyimpangan yang disebabkan oleh perubahan LocalDNS mematuhi kontrol gangguan NAP standar yang dijelaskan dalam tabel berikut:

Kontrol Pengaruh pada penggantian yang diinduksi LocalDNS
Disruption budgets (spec.disruption.budgets) Batas laju membatasi berapa banyak simpul yang diganti NAP sekaligus. Jika Anda tidak menentukan anggaran, NAP default ke satu anggaran nodes: 10%, sehingga mengganggu maksimum 10 persen dari node dalam node pool secara bersamaan.
Anggaran schedule dan duration Membatasi penggantian ke periode pemeliharaan. Atur nodes: "0" di luar area jendela untuk memblokir penggantian.
Pod disruption budget (PDB) Selama drain node. NAP menunggu alih-alih mengusir pod yang melanggar PDB.
karpenter.sh/do-not-disrupt anotasi Mengecualikan pod dan node yang dianotasikan dari disrupsi sukarela, termasuk drift.
terminationGracePeriod Batasi waktu pengurasan Pengaturan ini mengabaikan PDB dan anotasi karpenter.sh/do-not-disrupt saat jangka waktunya berakhir.

Penggantian tidak sepenuhnya serial maupun sepenuhnya paralel. NAP menyediakan kapasitas penggantian sebelum menghapus simpul yang mengalami drift, tetapi dapat menggantikan beberapa simpul yang mereferensikan AKSNodeClass yang sama secara bersamaan, hingga batas yang ditetapkan anggaran gangguan Anda.

Warning

Jika Anda tidak menentukan anggaran gangguan pada kumpulan node dan tidak menentukan anggaran gangguan pod untuk beban kerja Anda, perubahan localDNS pada AKSNodeClass yang sibuk dapat mengganggu hingga 10 persen node Anda sekaligus tanpa perlindungan tingkat aplikasi, yang dapat menyebabkan waktu henti beban kerja. Tentukan PDB untuk beban kerja penting dan tetapkan anggaran gangguan konservatif sebelum Anda mengubah localDNS pada kluster produksi.

Mengurangi risiko gangguan ketersediaan saat Anda mengaktifkan LocalDNS

  1. Konfirmasikan bahwa server DNS kustom Anda menjawab kueri melalui UDP dan TCP pada port 53 dari subnet simpul. Untuk informasi selengkapnya, lihat Memvalidasi DNS kustom sebelum mengaktifkan LocalDNS.

  2. Tentukan pod disruption budget untuk setiap beban kerja penting.

  3. Tetapkan anggaran gangguan konservatif pada sumber daya yang NodePool terpengaruh sebelum Anda mengubah AKSNodeClass, seperti yang ditunjukkan dalam contoh berikut:

    apiVersion: karpenter.sh/v1
    kind: NodePool
    metadata:
      name: default
    spec:
      disruption:
        budgets:
        - nodes: "1"   # Replace one node at a time
    
  4. Terapkan perubahan pada localDNS nonproduksi AKSNodeClass terlebih dahulu. Atau, buat AKSNodeClass yang mengaktifkan LocalDNS dan memigrasikan beban kerja ke NodePool yang mereferensikannya.

  5. Pantau kemajuan penggantian dengan mencantumkan node claim. Penggantian selesai ketika tidak ada klaim simpul yang melaporkan kondisi status Drifted.

    # List node claims and watch replacements appear as drifted nodes are removed
    kubectl get nodeclaims
    
    # Inspect the status conditions on a specific node claim
    kubectl describe nodeclaim <nodeclaim-name>
    
  6. Konfirmasikan bahwa LocalDNS aktif pada simpul pengganti. Untuk informasi selengkapnya, lihat Memverifikasi operasi LocalDNS.

Konfigurasi Kubelet

Bagian ini kubelet memungkinkan Anda untuk mengonfigurasi berbagai parameter kubelet yang memengaruhi perilaku node. Parameter ini adalah argumen khas kubelet, sehingga penyedia Azure meneruskannya langsung ke kubelet pada simpul.

Penting

Konfigurasikan pengaturan kubelet dengan hati-hati, dan uji perubahan apa pun di lingkungan nonproduksi terlebih dahulu.

Manajemen CPU

Pengaturan berikut mengontrol perilaku manajemen CPU untuk kubelet:

spec:
  kubelet:
    cpuManagerPolicy: "static"  # or "none"
    cpuCFSQuota: true
    cpuCFSQuotaPeriod: "100ms"
  • cpuManagerPolicy: Mengontrol bagaimana kubelet mengalokasikan sumber daya CPU. Atur ke "static" untuk penyematan CPU pada beban kerja yang sensitif terhadap latensi.
  • cpuCFSQuota: Mengaktifkan penegakan kuota CPU Completely Fair Scheduler (CFS) untuk kontainer yang menentukan batas CPU.
  • cpuCFSQuotaPeriod: Mengatur periode kuota CPU CFS.

Pengumpulan sampah gambar

Pengaturan berikut mengontrol perilaku pengumpulan sampah gambar untuk kubelet:

spec:
  kubelet:
    imageGCHighThresholdPercent: 85
    imageGCLowThresholdPercent: 80

Pengaturan ini mengontrol kapan kubelet melakukan pengumpulan sampah gambar kontainer:

  • imageGCHighThresholdPercent: Persentase penggunaan disk yang memicu pengumpulan sampah gambar.
  • imageGCLowThresholdPercent: Persentase penggunaan disk target setelah pengumpulan sampah.

Manajemen topologi

Pengaturan berikut mengontrol kebijakan manajer topologi untuk kubelet:

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

Manajer topologi membantu mengoordinasikan alokasi sumber daya untuk beban kerja sensitif latensi di seluruh sumber daya CPU dan perangkat (seperti GPU).

Konfigurasi sistem

Pengaturan berikut memungkinkan Anda mengonfigurasi parameter sistem tambahan untuk kubelet:

spec:
  kubelet:
    allowedUnsafeSysctls:
      - "kernel.msg*"
      - "net.ipv4.route.min_pmtu"
    containerLogMaxSize: "50Mi"
    containerLogMaxFiles: 5
    podPidsLimit: 4096
  • allowedUnsafeSysctls: Daftar sysctl tidak aman yang diizinkan untuk digunakan oleh pod-pod.
  • containerLogMaxSize: Ukuran maksimum file log kontainer sebelum rotasi.
  • containerLogMaxFiles: Jumlah maksimum file log kontainer yang akan dipertahankan.
  • podPidsLimit: Jumlah maksimum proses yang diizinkan dalam pod apa pun.

Pengaturan konfigurasi OS kustom Linux

Bagian ini LinuxOSConfig memungkinkan Anda untuk mengonfigurasi berbagai parameter kubelet yang memengaruhi perilaku node. Parameter ini adalah argumen kustom sistem operasi yang umum, sehingga NAP hanya meneruskan parameter tersebut ke kubelet pada simpul.

Untuk informasi selengkapnya tentang pengaturan konfigurasi OS Linux kustom, nilai default, dan pertimbangan, lihat referensi parameter konfigurasi simpul kustom.

Penting

Konfigurasikan pengaturan OS Linux dengan hati-hati, dan uji perubahan apa pun di lingkungan nonproduksi terlebih dahulu.

Pengaturan batas penangan berkas Linux

Gunakan pengaturan berikut untuk mengatur pengaturan sistem file.

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

Pengaturan soket Linux dan penyetelan jaringan

Gunakan pengaturan berikut untuk mengatur pengaturan TCP dan jaringan.

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 

Pengaturan batas pekerja Linux

Gunakan pengaturan berikut untuk mengatur pengaturan kernel.

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

Pengaturan memori virtual Linux

Gunakan opsi berikut untuk menyetel pengoperasian subsistem memori virtual Linux dari kernel Linux dan penulisan data kotor ke disk.

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

Pengaturan GPU

Gunakan bidang berikut untuk mengaktifkan penginstalan driver GPU kustom, seperti dengan Operator GPU NVIDIA.

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

GPU terkelola

Bidang gpu.mode mengontrol penginstalan driver GPU. Ini menerima Driver atau None dan default ke Driver. Atur None untuk melewati penginstalan driver, misalnya, saat menggunakan Operator GPU NVIDIA.

Untuk ikut serta dalam pengalaman GPU NVIDIA terkelola, gunakan mode: Driver dan atur nvidia.managementMode: Managed. GPU terkelola didukung untuk simpul GPU NVIDIA Linux yang menggunakan mode provisi AKS Machine API. Mode manajemen NVIDIA default adalah Unmanaged.

spec:
  gpu:
    mode: Driver
    nvidia:
      managementMode: Managed

Untuk contoh GPU yang dikelola NAP lengkap dan langkah-langkah verifikasi, lihat simpul GPU yang dikelola AKS.

Pengaturan keamanan

Enkripsi di host

Bidang berikut menentukan apakah enkripsi tingkat host diaktifkan untuk simpul yang disediakan. Saat Anda mengatur bidang ini ke true, NAP hanya menyertakan opsi instans yang mendukung enkripsi di host.

spec:
  security:
    encryptionatHost: 
      # acceptable values: [true, false] default(or if not specified): false  
      false

Untuk informasi selengkapnya tentang enkripsi berbasis host, lihat Enkripsi di Dokumentasi Host.

Kunci yang dikelola secara kustom dan set enkripsi disk

NAP mendukung kluster yang menggunakan kunci yang dikelola oleh pelanggan dan kumpulan enkripsi disk. Aktifkan opsi ini di tingkat kluster. Mereka tidak memiliki AKSNodeClass kolom yang perlu Anda tetapkan. Pastikan identitas kluster Anda memiliki kontrol akses berbasis peran (RBAC) yang tepat:

  • Identitas kluster memiliki akses Reader ke Kumpulan Enkripsi Disk.
  • Sumber daya kumpulan Enkripsi Disk memiliki akses Key Vault Crypto Service Encryption User ke Azure Key Vault.

Untuk informasi tentang kunci yang dikelola pelanggan dan set enkripsi disk yang diaktifkan selama pembuatan kluster, lihat dokumentasi Kunci yang Dikelola Pelanggan.

Mengaktifkan peluncuran tepercaya di kluster NAP

Kluster dengan Node Auto Provisioning (NAP) diaktifkan dapat mengaktifkan peluncuran tepercaya dengan menggunakan bidang spec.security.trustedLaunchAKSNodeClass CRD. Atur bidang secureBoot dan vTPM ke true untuk mengaktifkan peluncuran tepercaya untuk simpul baru atau yang dikelola NAP yang sudah ada yang terkait dengan CRD AKSNodeClass ini.

spec:
  security:
  # Enables trusted lunch
  # Valid values: true, false; defaults to false if not specified
     trustedLaunch:
       secureBoot: true
       vTPM: true   

konfigurasi tag sumber daya Azure

Anda dapat menentukan tag sumber daya Azure yang berlaku untuk semua instans VM yang dibuat menggunakan sumber daya AKSNodeClass tertentu. Tag berguna untuk pelacakan biaya, organisasi sumber daya, dan persyaratan kepatuhan.

Batasan tag

  • Tag sumber daya Azure memiliki limit 50 tag per sumber daya.
  • Nama tag tidak sensitif huruf besar/kecil tetapi nilai tag sensitif huruf besar/kecil.
  • Azure mencadangkan beberapa nama tag yang tidak dapat digunakan. Untuk informasi selengkapnya, lihat Panduan dan batasan tag.

Contoh konfigurasi tag

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

Contoh konfigurasi komprehensif AKSNodeClass

Contoh berikut menunjukkan konfigurasi komprehensif AKSNodeClass yang mencakup semua pengaturan yang dibahas dalam artikel ini:

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

  # Artifact Streaming- allows use of artifact streaming feature; To use this feature container images must also enable artifact streaming on ACR
  # Valid values: true, false; defaults to false if not specified
  artifactStreaming:
    enabled: true

  # LocalDNS mode - allows use of LocalDNS feature
  # Default: Disabled
  # Valid values: Preferred, Required, Disabled
  # vnetDNSOverrides and kubeDNSOverrides are both required, even when mode is Disabled
  # Each list must include the "." and "cluster.local" zones, and each zone must set all nine fields
  localDNS:
    mode: Disabled
    # vnetDNSOverrides apply to DNS traffic from pods with dnsPolicy:default and from kubelet
    vnetDNSOverrides:
      - zone: "."
        cacheDuration: "3600s"
        forwardDestination: VnetDNS   # the "." zone can't forward to ClusterCoreDNS in vnetDNSOverrides
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: PreferUDP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"
      - zone: "cluster.local"
        cacheDuration: "3600s"
        forwardDestination: ClusterCoreDNS   # cluster.local can't forward to VnetDNS
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: ForceTCP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"
    # kubeDNSOverrides apply to DNS traffic from pods with dnsPolicy:ClusterFirst
    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"

  # 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

  security:
  # Enables trusted lunch
  # Valid values: true, false; default(or if not specified): false  
     trustedLaunch:
      secureBoot: true
      vTPM: true
  # Encryption at host
     encryptionatHost: 
      # acceptable values: [true, false] default(or if not specified): false  
      false

Langkah selanjutnya

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