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.
Wanneer u workloads implementeert in AKS, moet u een beslissing nemen over de configuratie van de knooppuntgroep met betrekking tot de benodigde VM-grootte. Naarmate uw workloads complexer worden en verschillende CPU-, geheugen- en mogelijkheden nodig hebben om uit te voeren, wordt de overhead van het ontwerpen van uw VM-configuratie voor talloze resourceaanvragen moeilijk.
Automatisch inrichten van knooppunten (NAP) (preview-versie) maakt gebruik van lopende vereisten voor podresources om de optimale configuratie van virtuele machines te bepalen en deze workloads op de meest efficiënte en rendabele manier uit te voeren.
NAP is gebaseerd op het opensource Karpenter-project en de AKS-provider is ook open source. NAP implementeert, configureert en beheert automatisch Karpenter op uw AKS-clusters.
Belangrijk
Automatische inrichting van knooppunten (NAP) voor AKS is momenteel in PREVIEW. Raadpleeg de Aanvullende voorwaarden voor Microsoft Azure-previews voor juridische voorwaarden die van toepassing zijn op Azure-functies die in bèta of preview zijn of die anders nog niet algemeen beschikbaar zijn.
Voordat u begint
- U hebt een Azure-abonnement nodig. Als u geen Azure-abonnement hebt, kunt u een gratis account maken.
- U moet de Azure CLI hebben geïnstalleerd.
- Installeer de
aks-preview
Azure CLI-extensie. Minimumversie 0.5.170. - Registreer de featurevlag NodeAutoProvisioningPreview.
aks-preview
De CLI-extensie installeren
Installeer de
aks-preview
CLI-extensie met behulp van deaz extension add
opdracht.az extension add --name aks-preview
Werk de extensie bij om ervoor te zorgen dat u de nieuwste versie hebt geïnstalleerd met behulp van de
az extension update
opdracht.az extension update --name aks-preview
NodeAutoProvisioningPreview
De functievlag registreren
Registreer de
NodeAutoProvisioningPreview
functievlag met behulp van deaz feature register
opdracht.az feature register --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
Het duurt enkele minuten voordat de status Geregistreerd wordt weergegeven.
Controleer de registratiestatus met behulp van de
az feature show
opdracht.az feature show --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
Wanneer de status Geregistreerd weergeeft, vernieuwt u de registratie van de Microsoft.ContainerService-resourceprovider met behulp van het
az provider register
commando.az provider register --namespace Microsoft.ContainerService
Beperkingen
- U kunt geen functies inschakelen in een cluster waar automatische schaalaanpassing voor knooppuntgroepen is ingeschakeld.
Niet-ondersteunde functies
- Windows-knooppuntgroepen
- Aangepaste configuratie toepassen op de node kubelet
- IPv6-clusters
-
Serviceprincipals
Notitie
U kunt een door het systeem toegewezen of door de gebruiker toegewezen beheerde identiteit gebruiken.
- Schijfversleutelingssets
- CustomCA Vertrouwenscertificaten
- Modus Stoppen starten
- HTTP-proxy
- OutboundType mutatie. Alle uitgaandetypes worden ondersteund, maar u kunt deze niet wijzigen nadat u deze hebt gemaakt.
- Privécluster (en neem je eigen private DNS mee)
Netwerkconfiguratie
De aanbevolen netwerkconfiguraties voor clusters met ingeschakelde knooppunt-autoprovisioning zijn als volgt:
- Azure CNI-overlay met Aangedreven door Cilium
- Azure CNI-Overlay
- Azure CNI ondersteund door Cilium
- Azure CNI
Onze aanbevolen engine voor netwerkbeleid is Cilium.
De volgende netwerkconfiguraties worden momenteel niet ondersteund:
- Calico-netwerkbeleid
- Dynamische IP-toewijzing
- Statische toewijzing van CIDR-blokken
Automatische inrichting van knooppunten inschakelen
Automatische toewijzing van knooppunten inschakelen op een nieuw cluster
Schakel automatische inrichting van knooppunten in op een nieuw cluster met behulp van het
az aks create
commando en stel--node-provisioning-mode
in opAuto
. U moet ook het--network-plugin
instellen opazure
,--network-plugin-mode
opoverlay
en--network-dataplane
opcilium
.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
Automatische inrichting van knooppunten inschakelen op een bestaand cluster
Schakel automatische inrichting van knooppunten in op een bestaand cluster met behulp van de
az aks update
opdracht en stel--node-provisioning-mode
in opAuto
. U moet ook het--network-plugin
instellen opazure
,--network-plugin-mode
opoverlay
en--network-dataplane
opcilium
.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
Knooppuntpools
Automatische inrichting van knooppunten maakt gebruik van een lijst met VM-SKU's als uitgangspunt om te bepalen welke SKU het meest geschikt is voor de workloads die in behandeling zijn. Wanneer u controle hebt over welke SKU u in de eerste pool wilt, kunt u specifieke SKU-families of typen virtuele machines opgeven en het maximale aantal resources dat een provisioner gebruikt specificeren. U kunt ook verwijzen naar verschillende specificaties in het knooppuntgroepbestand, zoals het opgeven van spot- of on-demand exemplaren, meerdere architecturen en meer.
Als u bijvoorbeeld specifieke groottes voor virtuele machines hebt die gereserveerde instanties zijn, wilt u mogelijk alleen deze virtuele machines gebruiken als de startpool.
U kunt meerdere knooppuntgroepdefinities in een cluster hebben, maar AKS implementeert een standaarddefinitie voor knooppuntgroepen die u kunt wijzigen:
apiVersion: karpenter.sh/v1
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
Vereisten voor ondersteunde knooppuntvoorziening
SKU-selectors met bekende labels
Keuzemenu | Beschrijving | Voorbeeld |
---|---|---|
karpenter.azure.com/sku-family | VM-SKU-serie | D, F, L etc. |
karpenter.azure.com/sku-name | Expliciete SKU-naam | Standard_A1_v2 |
karpenter.azure.com/sku-version | SKU-versie (zonder 'v', kan 1 gebruiken) | 1 , 2 |
karpenter.sh/capacity-type | VM-toewijzingstype (Spot/On Demand) | spot of on-demand |
karpenter.azure.com/sku-cpu | Aantal CPU's in VM | 16 |
karpenter.azure.com/sku-memory | Geheugen in VM in MiB | 131072 |
karpenter.azure.com/sku-gpu-name | GPU-naam | A100 |
karpenter.azure.com/sku-gpu-manufacturer | GPU-fabrikant | nvidia |
karpenter.azure.com/sku-gpu-count | AANTAL GPU's per VM | 2 |
karpenter.azure.com/sku-networking-accelerated | Of de VIRTUELE machine versneld netwerken heeft | [waar, onwaar] |
karpenter.azure.com/sku-storage-premium-capable | Of de VM Premium IO-opslag ondersteunt | [waar, onwaar] |
karpenter.azure.com/sku-storage-ephemeralos-maxsize | Groottelimiet voor de tijdelijke besturingssysteemschijf in Gb | 92 |
topology.kubernetes.io/zone | De beschikbaarheidszone(s) | [uksouth-1,uksouth-2,uksouth-3] |
kubernetes.io/os | Besturingssysteem (alleen Linux tijdens preview) | Linux |
kubernetes.io/arch | CPU-architectuur (AMD64 of ARM64) | [amd64, arm64] |
Gebruik de Azure CLI-opdracht om de SKU-mogelijkheden en toegestane waarden van de vm list-skus
virtuele machine weer te geven.
az vm list-skus --resource-type virtualMachines --location <location> --query '[].name' --output table
Limieten voor knooppuntgroepen
Standaard probeert automatische knooppunttoewijzing uw workloads in te plannen binnen het Azure-quotum dat beschikbaar is. U kunt ook de bovengrens opgeven voor resources die door een knooppuntgroep worden gebruikt, waarbij limieten worden opgegeven binnen de specificatie van de knooppuntgroep.
# 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
Gewichten van knooppuntgroepen
Wanneer u meerdere knooppuntgroepen hebt gedefinieerd, is het mogelijk om een voorkeur in te stellen waar een workload moet worden gepland. Definieer het relatieve gewicht van uw knooppuntgroepdefinities.
# 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
Updates voor Kubernetes- en node-afbeeldingen
AKS met automatische inrichting van knooppunten beheert standaard de Kubernetes-versie-upgrades en OS-schijfupdates voor VMs.
Kubernetes-upgrades
Kubernetes-upgrades voor autoprovisioning van knooppunten volgen de Kubernetes-versie van het controlevlak. Als u een clusterupgrade uitvoert, worden uw nodes voor automatische inrichting automatisch bijgewerkt om dezelfde versienummering te volgen.
Updates van knooppuntinstallatiekopieën
Standaard worden virtuele machines voor de NAP-knooppool automatisch bijgewerkt wanneer er een nieuw installatiekopie beschikbaar is. Als u een nodepool wilt vastmaken op een bepaalde versie van de knooppuntimage, kunt u de imageVersion instellen op de nodeklasse.
kubectl edit aksnodeclass default
Stel in de definitie van de knooppuntklasse de imageVersion in op een van de gepubliceerde releases die worden vermeld in de opmerkingen bij de AKS-release. U kunt ook de beschikbaarheid van afbeeldingen in regio's bekijken door te verwijzen naar de AKS-releasetracker
ImageVersion is het datumgedeelte van de Node Image, omdat alleen Ubuntu 22.04 wordt ondersteund. Bijvoorbeeld, 'AKSUbuntu-2204-202311.07.0' zou '202311.07.0' zijn.
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
Als u de imageVersion-specificatie verwijdert, wordt de node pool teruggezet naar de meest recente versie van de knooppuntinstallatiekopieën.
Belangrijk
Nadat u de SSH-sleutel hebt bijgewerkt, worden uw knooppunten niet automatisch bijgewerkt door AKS. U kunt er op elk gewenst moment voor kiezen om een [updatebewerking voor nodepool][node-image-upgrade] uit te voeren. Het bijwerken van SSH-sleutels treedt in werking nadat de update van een knooppuntbeeld is voltooid. Voor clusters met ingeschakelde auto-provisioning kan een update van een knooppuntimage worden uitgevoerd door een nieuw label toe te passen op de Kubernetes NodePool-customresource.
Onderbreking van knooppunt
Wanneer de workloads op uw knooppunten omlaag worden geschaald, maakt de autoprovisioning van knooppunten gebruik van verstoringsregels in de specificatie van de knooppuntgroep om te bepalen wanneer en hoe deze knooppunten moeten worden verwijderd en om uw workloads mogelijk efficiënter opnieuw in te plannen. Dit wordt voornamelijk gedaan door consolidatie, waardoor knooppunten worden verwijderd of vervangen om het bin-packen van uw pods in een optimale configuratie mogelijk te maken. De op statussen gebaseerde benadering maakt gebruik van ConsolidationPolicy
zoals WhenUnderUtilized
, WhenEmpty
, of WhenEmptyOrUnderUtilized
om samenvoeging te initiëren.
consolidateAfter
is een voorwaarde op basis van tijd die kan worden ingesteld om buffertijd tussen acties toe te staan.
U kunt een knooppunt handmatig verwijderen met behulp van kubectl delete node
, maar automatische inrichting van knooppunten kan ook bepalen wanneer uw knooppunten moeten worden geoptimaliseerd op basis van uw specificaties.
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
Selectie-gebeurtenissen bewaken
Bij het automatisch inrichten van knooppunten worden clustergebeurtenissen geproduceerd die kunnen worden gebruikt om beslissingen over implementatie en planning te monitoren. U kunt gebeurtenissen bekijken via de Kubernetes-gebeurtenissenstroom.
kubectl get events -A --field-selector source=karpenter -w
Automatische inrichting van knooppunten uitschakelen
Node-autoprovisioning kan alleen worden uitgeschakeld wanneer:
- Er zijn geen bestaande DOOR NAP beheerde knooppunten. Gebruik
kubectl get nodes -l karpenter.sh/nodepool
dit om door NAP beheerde knooppunten weer te geven. - Alle bestaande karpenter.sh/NodePools zijn
spec.limits.cpu
ingesteld op 0.
Stappen voor het uitschakelen van automatische configuratie van knooppunten
- Stel alle karpenter.sh/NodePools
spec.limits.cpu
veld in op 0. Hiermee voorkomt u dat nieuwe knooppunten worden gemaakt, maar worden momenteel actieve knooppunten niet onderbroken.
Notitie
Als het u niet uitmaakt om ervoor te zorgen dat elke pod die op een NAP-knooppunt draait veilig naar een niet-NAP-knooppunt wordt gemigreerd, kunt u stap 2 en 3 overslaan en in plaats daarvan de kubectl delete node
opdracht gebruiken voor elk door NAP beheerd knooppunt.
Het overslaan van stappen 2 en 3 wordt niet aanbevolen, omdat sommige pods mogelijk in afwachting blijven en niet voldoen aan PDBs.
Voer niet uit kubectl delete node
op knooppunten die niet worden beheerd door NAP.
Voeg de
karpenter.azure.com/disable:NoSchedule
taint toe aan elke karpenter.sh/NodePool.apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: default spec: template: spec: ... taints: - key: karpenter.azure.com/disable, effect: NoSchedule
Hiermee start u het proces voor het migreren van de workloads van de door NAP beheerde knooppunten naar knooppunten die niet door NAP worden beheerd, met inachtneming van de PDBs en onderbrekingslimieten. Pods zullen migreren naar niet-NAP-knooppunten als ze passen. Als er onvoldoende capaciteit met vaste grootte is, blijven sommige door NAP beheerde knooppunten behouden.
Schaal bestaande ManagedCluster AgentPools met vaste grootte op of maak nieuwe AgentPools met vaste grootte om de belasting van de door NAP beheerde knooppunten te nemen. Omdat deze knooppunten worden toegevoegd aan het cluster, worden de door NAP beheerde knooppunten leeggestroomd en worden werk gemigreerd naar de knooppunten op vaste schaal.
Controleer of alle door NAP beheerde knooppunten worden verwijderd met behulp van
kubectl get nodes -l karpenter.sh/nodepool
. Als er nog steeds NAP-beheerde knooppunten zijn, betekent dit waarschijnlijk dat het cluster niet meer capaciteit op vaste schaal heeft en meer knooppunten nodig heeft, zodat de resterende workloads kunnen worden gemigreerd.Werk de parameter voor de inrichtingsmodus van het ManagedCluster-knooppunt bij naar
Manual
.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-provisioning-mode Manual
Azure Kubernetes Service