Automatische inrichting van knooppunten (preview)
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.
Het automatisch inrichten van knooppunten (NAP) (preview) besluit op basis van de vereisten voor in behandeling zijnde podresources de optimale VM-configuratie om deze workloads op de meest efficiënte en rendabele manier uit te voeren.
NAP is gebaseerd op het Open Source Karpenter-project en de AKS-provider is ook Open Source. NAP implementeert en configureert Karpenter automatisch op uw AKS-clusters en configureert en beheert.
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 vlag NodeAutoProvisioningPreviewfeature.
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 de
az provider register
opdracht.az provider register --namespace Microsoft.ContainerService
Beperkingen
- De enige toegestane netwerkconfiguratie is Azure CNI-overlay met Powered by Cilium.
- U kunt niet inschakelen in een cluster waarvoor automatische schaalaanpassing van clusters is ingeschakeld voor knooppuntgroepen
Niet-ondersteunde functies
- Windows-knooppuntgroepen
- Aangepaste configuratie toepassen op de kubelet van het knooppunt
- IPv6-clusters
- Service-principals
Notitie
U kunt een door het systeem toegewezen of door de gebruiker toegewezen beheerde identiteit gebruiken.
- Schijfversleutelingssets
- CustomCATrustCertificates
- 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 PRIVÉ-DNS van BYO)
Automatische inrichting van knooppunten inschakelen
Automatische inrichting van knooppunten inschakelen op een nieuw cluster
Schakel automatische inrichting van knooppunten in op een nieuw cluster met behulp van de
az aks create
opdracht en ingesteld--node-provisioning-mode
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 ingesteld--node-provisioning-mode
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 workloads het meest geschikt zijn voor de workloads die in behandeling zijn. Als u controle hebt over de gewenste SKU in de eerste pool, kunt u specifieke SKU-families of VM-typen opgeven en de maximale hoeveelheid resources die een inrichtingsfunctie gebruikt.
Als u bijvoorbeeld specifieke VM-SKU's hebt die gereserveerde instanties zijn, wilt u deze VM's mogelijk alleen gebruiken als de begingroep.
U kunt meerdere knooppuntgroepdefinities in een cluster hebben, maar AKS implementeert een standaarddefinitie voor knooppuntgroepen die u kunt wijzigen:
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
Ondersteunde vereisten voor knooppuntinrichting
SKU-selectors met bekende labels
Selector | 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] |
Als u de mogelijkheden en toegestane waarden van de VM-SKU wilt weergeven, gebruikt u de vm list-skus
opdracht van de Azure CLI.
az vm list-skus --resource-type virtualMachines --location <location> --query '[].name' --output table
Limieten voor knooppuntgroepen
NAP probeert standaard uw workloads te plannen binnen het Azure-quotum dat u beschikbaar hebt. 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 knooppuntinstallatiekopieën
AKS met NAP beheert de Kubernetes-versie-upgrades en vm-besturingssysteemschijfupdates standaard voor u.
Kubernetes-upgrades
Kubernetes-upgrades voor NAP-knooppuntgroepen volgen de Kubernetes-versie van het besturingsvlak. Als u een clusterupgrade uitvoert, worden uw NAP-knooppunten automatisch bijgewerkt om dezelfde versiebeheer te volgen.
Updates van knooppuntinstallatiekopieën
Virtuele machines voor NAP-knooppuntgroepen worden standaard automatisch bijgewerkt wanneer er een nieuwe installatiekopieën beschikbaar zijn. Als u een knooppuntgroep wilt vastmaken op een bepaalde versie van de knooppuntinstallatiekopieën, kunt u de imageVersion instellen op de knooppuntklasse:
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 knooppuntinstallatiekopie, omdat alleen Ubuntu 22.04 wordt ondersteund, bijvoorbeeld 'AKSVersion-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 knooppuntgroep teruggezet zodat deze wordt bijgewerkt naar de meest recente versie van de knooppuntinstallatiekopieën.
Onderbreking van knooppunt
Wanneer de workloads op uw knooppunten omlaag worden geschaald, gebruikt NAP onderbrekingsregels in de specificatie van de knooppuntgroep om te bepalen wanneer en hoe u deze knooppunten verwijdert en mogelijk uw workloads opnieuw moet plannen om efficiënter te zijn.
U kunt een knooppunt handmatig verwijderen met behulp van kubectl delete node
, maar NAP kan ook bepalen wanneer uw knooppunten moeten worden geoptimaliseerd.
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
Automatische inrichting van knooppunten produceert clustergebeurtenissen die kunnen worden gebruikt voor het bewaken van implementatie- en planningsbeslissingen die worden genomen. U kunt gebeurtenissen bekijken via de Kubernetes-gebeurtenissenstroom.
kubectl get events -A --field-selector source=karpenter -w
Azure Kubernetes Service