Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt uitgelegd hoe u resources instelt AKSNodeClass om Azure-specifieke instellingen te definiëren voor het automatisch inrichten van knooppunten (NAP) in Azure Kubernetes Service (AKS) met behulp van Karpenter.
AKSNodeClass hiermee kunt u verschillende aspecten aanpassen van de nodes die Karpenter voorziet, zoals de virtuele machine (VM) images, de schijfgrootte van het besturingssysteem (OS), het maximale aantal pods per node en kubeletconfiguraties.
Belangrijk
Vanaf 30 november 2025 biedt Azure Kubernetes Service (AKS) geen ondersteuning meer voor beveiligingsupdates voor Azure Linux 2.0. De installatiekopieën van het Azure Linux 2.0-knooppunt zijn bevroren bij de release 202512.06.0. Vanaf 31 maart 2026 worden node-afbeeldingen verwijderd en kunt u de node-pools niet meer schalen. Migreer naar een ondersteunde Versie van Azure Linux door uw knooppuntgroepen te upgraden naar een ondersteunde Kubernetes-versie of door te migreren naar osSku AzureLinux3. Zie [Buitengebruikstelling] Azure Linux 2.0-knooppuntgroepen in AKS voor meer informatie.
Overzicht van AKSNodeClass-resources
AKSNodeClass met resources kunt u Azure-specifieke instellingen voor NAP configureren. Elke NodePool resource moet verwijzen naar een AKSNodeClass met behulp van spec.template.spec.nodeClassRef. U kunt meerdere NodePools items hebben die naar hetzelfde AKSNodeClassverwijzen, zodat u algemene Azure-configuraties kunt delen in verschillende knooppuntgroepen.
Configuratie van de installatiekopieënfamilie
Het imageFamily veld bepaalt de standaard-VM-image en de bootstrap-logica voor knooppunten die zijn ingericht via de AKSNodeClass. Als u geen afbeeldingsfamilie specificeert, is de standaard Ubuntu2204. GPU's worden ondersteund met beide installatiekopieën in compatibele VM-grootten.
Ondersteunde installatiekopieën
-
Ubuntu: Ubuntu 22.04 Long Term Support (LTS) is de standaard Linux-distributie voor AKS-knooppunten. -
AzureLinux: Azure Linux is de alternatieve Linux-distributie van Microsoft voor AKS-workloads. Zie de Documentatie voor Azure Linux voor meer informatie
Voorbeeld van configuratie van de image-familie
In het volgende voorbeeld configureert u de AKSNodeClass om de AzureLinux afbeeldingsfamilie te gebruiken:
spec:
imageFamily: AzureLinux
FIPS-conforme configuratie van knooppuntafbeelding
U kunt ook FIPS-compatibele knooppuntbeelden inschakelen. Raadpleeg onze FIPS-documentatie voor meer informatie in FIPS in AKS
Het fipsMode veld is standaard ingesteld op Uitgeschakeld en kan worden ingesteld op de volgende opties:
- FIPS - FIPS-compatibele knooppuntafbeeldingen selecteren
- Uitgeschakeld, gebruik geen FIPS-compatibele node-afbeeldingen
In het volgende voorbeeld wordt de 'AKSNodeClass' geconfigureerd om FIPS-compatibele knooppuntimages te selecteren door fipsMode in te stellen op FIPS.
spec:
fipsMode: FIPS
VNet-subnetconfiguratie (virtueel netwerk)
Het vnetSubnetID veld geeft aan welk Azure VNet-subnet moet worden gebruikt voor het inrichten van netwerkinterfaces voor knooppunten. Dit veld is optioneel. Als u geen subnet opgeeft, gebruikt NAP het standaardsubnet dat is geconfigureerd tijdens de installatie van Karpenter. Zie Subnetconfiguraties voor NAP voor meer informatie.
Voorbeeld van subnetconfiguratie
De Subnet-ID moet in het volledige Azure Resource Manager (ARM)-formaat zijn, zoals weergegeven in het volgende voorbeeld:
spec:
vnetSubnetID: "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/virtualNetworks/{vnet-name}/subnets/{subnet-name}"
Configuratie van schijfgrootte van besturingssysteem
In osDiskSizeGB het veld wordt de grootte van de besturingssysteemschijf opgegeven in gigabytes. De standaardwaarde is 128 GB en de minimumwaarde is 30 GB.
Overweeg grotere besturingssysteemschijven voor werkbelastingen die:
- Sla belangrijke gegevens lokaal op.
- Extra ruimte vereisen voor containerafbeeldingen.
- Er zijn hoge I/O-vereisten voor schijf.
Voorbeeldconfiguratie van schijfgrootte van besturingssysteem
spec:
osDiskSizeGB: 256 # 256 GB OS disk
Tijdelijke besturingssysteemschijfconfiguratie
NAP maakt automatisch gebruik van tijdelijke besturingssysteemschijven indien beschikbaar en geschikt voor de aangevraagde schijfgrootte. Kortstondige besturingssysteemschijven bieden betere prestaties en lagere kosten in vergelijking met beheerde schijven.
Tijdelijke schijfselectiecriteria
Het systeem kiest automatisch tijdelijke schijven in de volgende scenario's:
- Het type VM-exemplaar ondersteunt tijdelijke besturingssysteemschijven.
- De tijdelijke schijfcapaciteit is groter dan of gelijk aan de aangevraagde
osDiskSizeGB. - De VM heeft voldoende tijdelijke opslagcapaciteit.
Als niet aan deze voorwaarden wordt voldaan, valt het systeem terug op het gebruik van beheerde schijven.
Tijdelijke schijftypen en prioriteitstelling
Virtuele Azure-machines kunnen verschillende typen tijdelijke opslag hebben. Het systeem gebruikt de volgende prioriteitsvolgorde:
- NVMe-schijven (hoogste prestaties)
- Cacheschijven (evenwichtige prestaties)
- Resourceschijven (basisprestaties)
Voorbeeld van tijdelijke schijfconfiguratie
U kunt vereisten voor knooppuntgroepen gebruiken om ervoor te zorgen dat knooppunten voldoende tijdelijke schijfcapaciteit hebben, zoals wordt weergegeven in het volgende voorbeeld:
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
Deze configuratie zorgt ervoor dat alleen typen VM-exemplaren met tijdelijke schijven die groter zijn dan 128 GB zijn geselecteerd, waardoor kortstondig schijfgebruik wordt gegarandeerd voor de opgegeven schijfgrootte van het besturingssysteem.
Maximale configuratie van pods
Het maxPods veld geeft het maximum aantal pods op dat op een knooppunt kan worden gepland. Deze instelling is van invloed op zowel clusterdichtheid als netwerkconfiguratie.
De minimumwaarde voor maxPods is 10 en de maximumwaarde is 250.
Standaardgedrag voor maxPods
Het standaardgedrag van maxPods is afhankelijk van de configuratie van de netwerkplug-in. De volgende tabel bevat een overzicht van de standaardwaarden:
| Configuratie van netwerkinvoegtoepassing | Standaard maxPods per knooppunt |
|---|---|
| Azure CNI met standaardnetwerking (v1 of NodeSubnet) | 30 |
| Azure CNI met overlay-netwerk | 250 |
| Geen (geen netwerkinvoegtoepassing) | 250 |
| Andere configuraties | 110 (standaard Kubernetes-instelling) |
Voorbeeld van configuratie van maximale pods
spec:
maxPods: 50 # Allow up to 50 pods per node
LocalDNS-configuratie
LocalDNS implementeert een DNS-proxy op knooppuntniveau waarmee DNS-query's dichter bij workloads worden omgezet, waardoor querylatentie wordt verminderd en de tolerantie tijdens tijdelijke DNS-onderbrekingen wordt verbeterd. Zie de LocalDNS-documentatie voor meer informatie. LocalDNS is standaard ingesteld op Uitgeschakeld en kan worden geconfigureerd op de volgende opties:
-
Disabled(standaard): hiermee wordt de functie LocalDNS uitgeschakeld. DNS-queries worden niet lokaal op het knooppunt opgelost. -
Preferred- AKS beheert LocalDNS-activering op basis van de Kubernetes-versie van de knooppuntgroep. De configuratie wordt altijd gevalideerd en opgenomen, maar LocalDNS is niet ingeschakeld, tenzij de juiste Kubernetes-versie wordt gebruikt. -
Required- LocalDNS wordt afgedwongen op de nodepool als aan alle vereisten is voldaan. Als niet aan de vereisten wordt voldaan, mislukt de implementatie.
Voorbeeld van LocalDNS-configuratie
U kunt LocalDNS-configuraties, zoals vnetDNSOverrides en kubeDNSOverrides, aanpassen. Zie LocalDNS aanpassen voor meer informatie over de ondersteunde invoegtoepassingen.
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-configuratie
kubelet In de sectie kunt u verschillende kubelet-parameters configureren die van invloed zijn op het gedrag van knooppunten. Deze parameters zijn typische kubelet-argumenten, dus de Azure-provider geeft ze gewoon door aan de kubelet op het knooppunt.
Belangrijk
Configureer de kubelet-instellingen zorgvuldig en test eerst eventuele wijzigingen in niet-productieomgevingen.
CPU-beheer
De volgende instellingen bepalen het gedrag van CPU-beheer voor de kubelet:
spec:
kubelet:
cpuManagerPolicy: "static" # or "none"
cpuCFSQuota: true
cpuCFSQuotaPeriod: "100ms"
-
cpuManagerPolicy: Bepaalt hoe de kubelet CPU-resources toewijst. Ingesteld op"static"voor CPU-pinning bij latentiegevoelige workloads. -
cpuCFSQuota: schakelt de handhaving van de CPU-quota door de Completely Fair Scheduler (CFS) in voor containers die CPU-limieten opgeven. -
cpuCFSQuotaPeriod: stelt de CPU CFS-quotumperiode in.
Garbagecollection van installatiekopieën
De volgende instellingen bepalen het gedrag van garbage collection voor containerafbeeldingen in de kubelet:
spec:
kubelet:
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
Deze instellingen bepalen wanneer de kubelet garbagecollection van containerinstallatiekopieën uitvoert:
-
imageGCHighThresholdPercent: Percentage schijfgebruik dat de verwijdering van overbodige afbeeldingen activeert. -
imageGCLowThresholdPercent: Percentage van doelschijfgebruik na het uitvoeren van garbage collection.
Topologiebeheer
Met de volgende instelling bepaalt u het topologiebeheerbeleid voor de kubelet:
spec:
kubelet:
topologyManagerPolicy: "best-effort" # none, restricted, best-effort, single-numa-node
De topologiebeheerder helpt bij het coördineren van resourcetoewijzing voor latentiegevoelige workloads voor CPU- en apparaatresources (zoals GPU-resources).
Systeemconfiguratie
Met de volgende instellingen kunt u extra systeemparameters voor de kubelet configureren:
spec:
kubelet:
allowedUnsafeSysctls:
- "kernel.msg*"
- "net.ipv4.route.min_pmtu"
containerLogMaxSize: "50Mi"
containerLogMaxFiles: 5
podPidsLimit: 4096
-
allowedUnsafeSysctls: Lijst van sysctls die onveilig zijn maar wel mogen worden gebruikt door pods. -
containerLogMaxSize: Maximale grootte van containerlogboekbestanden voordat deze worden gedraaid. -
containerLogMaxFiles: Maximum aantal containerlogboekbestanden dat moet worden bewaard. -
podPidsLimit: Maximum aantal processen dat is toegestaan in elke pod.
Configuratie van Azure-resourcetags
U kunt Azure-resourcetags opgeven die van toepassing zijn op alle VM-exemplaren die zijn gemaakt met behulp van een bepaalde AKSNodeClass resource. Tags zijn handig voor kostentracking, resourceorganisatie en nalevingsvereisten.
Beperkingen van tags
- Azure-resourcetags hebben een limiet van 50 tags per resource.
- Tagnamen zijn niet hoofdlettergevoelig, maar tagwaarden zijn hoofdlettergevoelig.
- Azure reserveert enkele tagnamen die niet kunnen worden gebruikt. Zie Richtlijnen en limieten voor tags voor meer informatie.
Configuratie van voorbeeldtags
spec:
tags:
Environment: "production"
Team: "platform"
Application: "web-service"
CostCenter: "engineering"
Uitgebreid AKSNodeClass configuratievoorbeeld
In het volgende voorbeeld ziet u een uitgebreide AKSNodeClass configuratie met alle instellingen die in dit artikel worden besproken:
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
Volgende stappen
Zie de volgende artikelen voor meer informatie over automatische inrichting van knooppunten in AKS: