Automatisk avetablering av noder (förhandsversion)
När du distribuerar arbetsbelastningar till AKS måste du fatta ett beslut om konfigurationen av nodpoolen när det gäller den VM-storlek som behövs. När dina arbetsbelastningar blir mer komplexa och kräver olika processorer, minne och funktioner för att köras blir det svårt att behöva utforma konfigurationen av den virtuella datorn för många resursbegäranden.
Nod autoprovisioning (NAP) (förhandsversion) bestämmer baserat på väntande poddresurskrav den optimala VM-konfigurationen för att köra dessa arbetsbelastningar på det mest effektiva och kostnadseffektiva sättet.
NAP baseras på Karpenter-projektet med öppen källkod och AKS-providern är också öppen källkod. NAP distribuerar och konfigurerar och hanterar Karpenter automatiskt i dina AKS-kluster.
Viktigt!
Nod autoprovisioning (NAP) för AKS är för närvarande i förhandsversion. Juridiska villkor för Azure-funktioner i betaversion, förhandsversion eller som av någon annan anledning inte har gjorts allmänt tillgängliga ännu finns i kompletterande användningsvillkor för Microsoft Azure-förhandsversioner.
Innan du börjar
- Du behöver en Azure-prenumerationen. Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto.
- Du behöver Azure CLI installerat.
- Installera Azure CLI-tillägget
aks-preview
. Lägsta version 0.5.170. - Registrera flaggan NodeAutoProvisioningPreviewfeature.
Installera CLI-tillägget aks-preview
Installera CLI-tillägget
aks-preview
med kommandotaz extension add
.az extension add --name aks-preview
Uppdatera tillägget så att du har den senaste versionen installerad med kommandot
az extension update
.az extension update --name aks-preview
Registrera funktionsflaggan NodeAutoProvisioningPreview
Registrera funktionsflaggan
NodeAutoProvisioningPreview
az feature register
med kommandot .az feature register --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
Det tar några minuter för statusen att visa Registrerad.
Kontrollera registreringsstatusen
az feature show
med kommandot .az feature show --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
När statusen visar Registrerad uppdaterar du registreringen av resursprovidern Microsoft.ContainerService med hjälp av
az provider register
kommandot .az provider register --namespace Microsoft.ContainerService
Begränsningar
- Den enda nätverkskonfiguration som tillåts är Azure CNI Overlay med Powered by Cilium.
- Du kan inte aktivera i ett kluster där nodpooler har autoskalning av kluster aktiverat
Funktioner som inte stöds
- Windows-nodpooler
- Tillämpa anpassad konfiguration på nod-kubelet
- IPv6-kluster
- Tjänstens huvudnamn
Kommentar
Du kan använda antingen en systemtilldelad eller användartilldelad hanterad identitet.
- Diskkrypteringsuppsättningar
- CustomCATrustCertificates
- Starta stoppläge
- HTTP-proxy
- UtgåendeTypmutation . Alla OutboundTypes stöds, men du kan inte ändra dem när du har skapat dem.
Aktivera automatisk avetablering av noder
Aktivera automatisk avetablering av noder i ett nytt kluster
Aktivera automatisk avetablering av noder i ett nytt kluster med kommandot
az aks create
och ange--node-provisioning-mode
tillAuto
. Du måste också ange--network-plugin
tillazure
,--network-plugin-mode
tilloverlay
och--network-dataplane
tillcilium
.az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-provisioning-mode Auto \ --network-plugin azure \ --network-plugin-mode overlay \ --network-dataplane cilium \ --generate-ssh-keys
Aktivera automatisk avetablering av noder i ett befintligt kluster
Aktivera automatisk avetablering av noder i ett befintligt kluster med kommandot
az aks update
och ange--node-provisioning-mode
tillAuto
. Du måste också ange--network-plugin
tillazure
,--network-plugin-mode
tilloverlay
och--network-dataplane
tillcilium
.az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --node-provisioning-mode Auto --network-plugin azure --network-plugin-mode overlay --network-dataplane cilium
Nodpooler
Autoetablering av noder använder en lista över VM-SKU:er som utgångspunkt för att avgöra vilka som passar bäst för de arbetsbelastningar som är i ett väntande tillstånd. Om du har kontroll över vilken SKU du vill ha i den första poolen kan du ange specifika SKU-familjer eller VM-typer och den maximala mängden resurser som en provisioner använder.
Om du till exempel har specifika VM-SKU:er som är reserverade instanser kanske du bara vill använda de virtuella datorerna som startpool.
Du kan ha flera nodpooldefinitioner i ett kluster, men AKS distribuerar en standarddefinition för nodpoolen som du kan ändra:
apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
name: default
spec:
disruption:
consolidationPolicy: WhenUnderutilized
expireAfter: Never
template:
spec:
nodeClassRef:
name: default
# 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
Krav för nodetablering som stöds
SKU-väljare med välkända etiketter
Väljare | beskrivning | Exempel |
---|---|---|
karpenter.azure.com/sku-family | VM SKU-familj | D, F, L osv. |
karpenter.azure.com/sku-name | Explicit SKU-namn | Standard_A1_v2 |
karpenter.azure.com/sku-version | SKU-version (utan "v", kan använda 1) | 1 , 2 |
karpenter.sh/capacity-type | Vm-allokeringstyp (spot/på begäran) | spot or on-demand |
karpenter.azure.com/sku-cpu | Antal processorer i den virtuella datorn | 16 |
karpenter.azure.com/sku-memory | Minne i virtuell dator i MiB | 131072 |
karpenter.azure.com/sku-gpu-name | GPU-namn | A100 |
karpenter.azure.com/sku-gpu-manufacturer | GPU-tillverkare | nvidia |
karpenter.azure.com/sku-gpu-count | GPU-antal per virtuell dator | 2 |
karpenter.azure.com/sku-networking-accelerated | Om den virtuella datorn har accelererat nätverk | [sant, falskt] |
karpenter.azure.com/sku-storage-premium-capable | Om den virtuella datorn stöder Premium IO-lagring | [sant, falskt] |
karpenter.azure.com/sku-storage-ephemeralos-maxsize | Storleksgräns för den tillfälliga OS-disken i Gb | 92 |
topology.kubernetes.io/zone | Tillgänglighetszonerna | [uksouth-1,uksouth-2,uksouth-3] |
kubernetes.io/os | Operativsystem (endast Linux under förhandsversionen) | linux |
kubernetes.io/arch | CPU-arkitektur (AMD64 eller ARM64) | [amd64, arm64] |
Om du vill visa en lista över de virtuella datorernas SKU-funktioner och tillåtna värden använder du vm list-skus
kommandot från Azure CLI.
az vm list-skus --resource-type virtualMachines --location <location> --query '[].name' --output table
Nodpoolsgränser
Som standard försöker NAP schemalägga dina arbetsbelastningar inom den Azure-kvot som du har tillgänglig. Du kan också ange den övre gränsen för resurser som används av en nodpool och ange gränser i specifikationen för nodpoolen.
# Resource limits constrain the total size of the cluster.
# Limits prevent Karpenter from creating new instances once the limit is exceeded.
limits:
cpu: "1000"
memory: 1000Gi
Vikter för nodpool
När du har definierat flera nodpooler kan du ange var en arbetsbelastning ska schemaläggas. Definiera den relativa vikten för nodpoolens definitioner.
# 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
Uppdateringar av Kubernetes- och nodbild
AKS med NAP hanterar Kubernetes-versionsuppgraderingar och VM OS-diskuppdateringar åt dig som standard.
Kubernetes-uppgraderingar
Kubernetes-uppgraderingar för NAP-nodpooler följer Kubernetes-versionen för kontrollplanet. Om du utför en klusteruppgradering uppdateras NAP-noderna automatiskt för att följa samma versionshantering.
Uppdateringar av nodbild
Som standard uppdateras virtuella datorer i NAP-nodpoolen automatiskt när en ny avbildning är tillgänglig. Om du vill fästa en nodpool på en viss nodbildversion kan du ange imageVersion på nodklassen:
kubectl edit aksnodeclass default
I nodklassdefinitionen anger du imageVersion till en av de publicerade versionerna som visas i AKS-versionsanteckningarna. Du kan också se tillgängligheten för bilder i regioner genom att referera till AKS-versionsspåraren
ImageVersion är datumdelen på nodavbildningen eftersom endast Ubuntu 22.04 stöds, till exempel "AKSUbuntu-2204-202311.07.0" skulle vara "202311.07.0"
apiVersion: karpenter.azure.com/v1alpha2
kind: AKSNodeClass
metadata:
annotations:
kubernetes.io/description: General purpose AKSNodeClass for running Ubuntu2204
nodes
meta.helm.sh/release-name: aks-managed-karpenter-overlay
meta.helm.sh/release-namespace: kube-system
creationTimestamp: "2023-11-16T23:59:06Z"
generation: 1
labels:
app.kubernetes.io/managed-by: Helm
helm.toolkit.fluxcd.io/name: karpenter-overlay-main-adapter-helmrelease
helm.toolkit.fluxcd.io/namespace: 6556abcb92c4ce0001202e78
name: default
resourceVersion: "1792"
uid: 929a5b07-558f-4649-b78b-eb25e9b97076
spec:
imageFamily: Ubuntu2204
imageVersion: 202311.07.0
osDiskSizeGB: 128
Om du tar bort imageVersion-specifikationen återställs nodpoolen så att den uppdateras till den senaste nodbildversionen.
Nodstörningar
När arbetsbelastningarna på noderna skalas ned använder NAP avbrottsregler i specifikationen för nodpoolen för att bestämma när och hur dessa noder ska tas bort och eventuellt schemalägga om dina arbetsbelastningar så att de blir mer effektiva.
Du kan ta bort en nod manuellt med hjälp av kubectl delete node
, men NAP kan också styra när noderna ska optimeras.
disruption:
# Describes which types of Nodes NAP should consider for consolidation
consolidationPolicy: WhenUnderutilized | WhenEmpty
# 'WhenUnderutilized', NAP will consider all nodes for consolidation and attempt to remove or replace Nodes when it discovers that the Node is underutilized and could be changed to reduce cost
# `WhenEmpty`, NAP will only consider nodes for consolidation that contain no workload pods
# The amount of time NAP should wait after discovering a consolidation decision
# This value can currently only be set when the consolidationPolicy is 'WhenEmpty'
# You can choose to disable consolidation entirely by setting the string value 'Never'
consolidateAfter: 30s
Övervaka urvalshändelser
Autoprovision för Nod skapar klusterhändelser som kan användas för att övervaka distributions- och schemaläggningsbeslut som fattas. Du kan visa händelser via Kubernetes-händelseströmmen.
kubectl get events -A --field-selector source=karpenter -w
Azure Kubernetes Service