Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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. Gambar node Linux 2.0 Azure dibekukan pada rilis 202512.06.0. Mulai tanggal 31 Maret 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.
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 adalah sistem operasi imutabel Microsoft yang dioptimalkan untuk kontainer bagi beban kerja AKS. Untuk informasi selengkapnya, lihat dokumentasi Azure Container Linux.
Contoh konfigurasi keluarga gambar
Contoh berikut mengonfigurasi AKSNodeClass untuk menggunakan AzureLinux keluarga gambar:
spec:
imageFamily: AzureLinux
Contoh berikut mengonfigurasi AKSNodeClass untuk menggunakan AzureContainerLinux keluarga gambar:
spec:
imageFamily: AzureContainerLinux
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 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:
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
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"
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, detail lengkap tentang nilai default, dan pertimbangan, lihat dokumentasi konfigurasi simpul kustom kami.
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
Bidang berikut memungkinkan pengguna untuk mengizinkan 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
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:
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
Langkah selanjutnya
Untuk informasi selengkapnya tentang node auto-provisioning di AKS, lihat artikel berikut ini: