Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Při nasazování úloh do AKS musíte rozhodnout o konfiguraci fondu uzlů v souvislosti s požadovanou velikostí virtuálního počítače. S tím, jak jsou vaše úlohy složitější a vyžadují různé možnosti procesoru, paměti a funkcí, je náročné navrhnout konfiguraci virtuálního počítače pro řadu požadavků na prostředky.
Automatické zřizování uzlů (NAP) (náhled) využívá nevyřízené požadavky na prostředky podů k určení optimální konfigurace virtuálního počítače pro spuštění těchto úloh nejefektivnějším a nákladově nejefektivnějším způsobem.
Architektura NAP je založená na opensourcovém projektu Karpenter a poskytovatel AKS je také open source. NAP automaticky nasadí, nakonfiguruje a spravuje Karpenter v klastrech AKS.
Důležité
Automatické zřizování uzlů (NAP) pro AKS je aktuálně ve verzi PREVIEW. Podívejte se na doplňkové podmínky užívání služby Microsoft Azure Preview pro právní podmínky, které se vztahují na funkce Azure, jež jsou ve verzi beta, Preview nebo jinak ještě nejsou obecně dostupné.
Než začnete
- Potřebujete předplatné Azure. Pokud ještě nemáte předplatné Azure, můžete si vytvořit bezplatný účet.
- Potřebujete nainstalované Rozhraní příkazového řádku Azure.
-
aks-preview
Nainstalujte rozšíření Azure CLI. Minimální verze 0.5.170. - Zaregistrujte příznak NodeAutoProvisioningPreviewfeature.
Nainstalovat rozšíření aks-preview
příkazového řádku
Nainstalujte CLI rozšíření pomocí příkazu
aks-preview
.az extension add --name aks-preview
Pomocí příkazu aktualizujte rozšíření, abyste měli nainstalovanou
az extension update
nejnovější verzi.az extension update --name aks-preview
Zaregistruj příznak funkce NodeAutoProvisioningPreview
Příznak funkce
NodeAutoProvisioningPreview
zaregistrujte pomocí příkazuaz feature register
.az feature register --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
Zobrazení stavu Zaregistrované trvá několik minut.
Pomocí příkazu ověřte stav
az feature show
registrace.az feature show --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
Jakmile se stav projeví jako zaregistrovaný, aktualizujte registraci poskytovatele prostředků Microsoft.ContainerService pomocí
az provider register
příkazu.az provider register --namespace Microsoft.ContainerService
Omezení
- Nemůžete povolit v clusteru, kde mají fondy uzlů povolené automatické škálování clusteru.
Nepodporované funkce
- Pooly uzlů Windows
- Použití vlastní konfigurace na kubelet uzlu
- Klastry IPv6
-
Instanční objekty
Poznámka:
Můžete použít spravovanou identitu přiřazenou systémem nebo spravovanou identitu přiřazenou uživatelem.
- Sady šifrování disků
- Vlastní CATrustCertifikáty
- Režim Start Stop
- Proxy server HTTP
- OutboundType mutace. Všechny typy odchozích dat jsou podporovány, avšak po vytvoření je nemůžete změnit.
- Privátní cluster (a používání vlastního privátního DNS)
Konfigurace sítě
Doporučené konfigurace sítě pro clustery s povoleným automatickým zřizováním uzlů jsou následující:
Náš doporučený mechanismus pravidel sítě je Cilium.
V současné době se nepodporují následující konfigurace sítí:
- Zásady sítě Calico
- Dynamické přidělování IP adres
- Statické přidělování bloků CIDR
Povolit automatické zřizování uzlů
Povolení automatického provisioningu uzlů v novém clusteru
Povolte automatické zřizování uzlů v novém clusteru pomocí
az aks create
příkazu a nastavte--node-provisioning-mode
naAuto
. Musíte také nastavit--network-plugin
naazure
,--network-plugin-mode
naoverlay
a--network-dataplane
nacilium
.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
Povolit automatické zřízení uzlu v existujícím clusteru
Povolte automatické zřizování uzlů v existujícím clusteru pomocí
az aks update
příkazu a nastavte--node-provisioning-mode
naAuto
. Musíte také nastavit--network-plugin
naazure
,--network-plugin-mode
naoverlay
a--network-dataplane
nacilium
.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
Skupiny uzlů
Automatické zřizování uzlů používá jako výchozí bod seznam skladových položek virtuálních počítačů k určení, která skladová položka je nejvhodnější pro úlohy, které jsou ve stavu čekání na vyřízení. Pokud máte kontrolu nad produktovou jednotkou, kterou chcete v počáteční skupině, můžete určit konkrétní rodiny produktových jednotek nebo typy virtuálních počítačů a maximální počet prostředků, které zřizovací nástroj používá. Můžete také odkazovat na různé specifikace v souboru fondu uzlů, například určení spotových instancí nebo instancí na vyžádání, více architektur a další.
Pokud máte konkrétní velikosti virtuálních počítačů, které jsou instance s rezervací, můžete chtít používat jako výchozí fond jenom tyto virtuální počítače.
V clusteru můžete mít několik definic fondu uzlů, ale AKS nasadí výchozí definici fondu uzlů, kterou můžete upravit:
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
Požadavky na poskytovatele uzlů
Selektory skladových položek s dobře známými popisky
Selektor | Popis | Příklad |
---|---|---|
karpenter.azure.com/sku-family | Řada skladových položek virtuálního počítače | D, F, L atd. |
karpenter.azure.com/sku-name | Explicitní název skladové položky | Standard_A1_v2 |
karpenter.azure.com/sku-version | Verze SKU (bez 'v', použijte 1) | 1 , 2 |
karpenter.sh/capacity-type | Typ přidělování virtuálních počítačů (spotový/ na vyžádání) | okamžitý nebo na vyžádání |
karpenter.azure.com/sku-cpu | Počet procesorů ve virtuálním počítači | 16 |
karpenter.azure.com/sku-memory | Paměť ve virtuálním počítači v MiB | 131072 |
karpenter.azure.com/sku-gpu-name | Název GPU | A100 |
karpenter.azure.com/sku-gpu-manufacturer | Výrobce GPU | nvidia |
karpenter.azure.com/sku-gpu-count | Počet GPU na virtuální počítač | 2 |
karpenter.azure.com/sku-networking-accelerated | Jestli má virtuální počítač akcelerované síťové služby | [pravda, nepravda] |
karpenter.azure.com/sku-storage-premium-capable (úložiště prémiové schopnosti) | Jestli virtuální počítač podporuje úložiště Premium IO | [pravda, nepravda] |
karpenter.azure.com/sku-storage-ephemeralos-maxsize | Omezení velikosti dočasného disku s operačním systémem v Gb | 92 |
topology.kubernetes.io/zone | Zóny dostupnosti | [uksouth-1,uksouth-2,uksouth-3] |
kubernetes.io/os | Operační systém (pouze v Linuxu ve verzi Preview) | Linux |
kubernetes.io/arch | Architektura procesoru (AMD64 nebo ARM64) | [architektura amd64, arm64] |
Pokud chcete zobrazit seznam možností skladové položky virtuálního počítače a povolených hodnot, použijte vm list-skus
příkaz Azure CLI.
az vm list-skus --resource-type virtualMachines --location <location> --query '[].name' --output table
Omezení fondu uzlů
Ve výchozím nastavení se automatické zřizování uzlů pokouší naplánovat úlohy v rámci kvóty Azure, kterou máte k dispozici. Můžete také určit horní limit prostředků, které fond uzlů používá, a určit limity v rámci specifikace fondu uzlů.
# 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
Váhy skupiny uzlů
Pokud máte definovány více poolů uzlů, je možné upřednostnit místo, kde má být úloha naplánována. Definujte relativní váhu definic fondu uzlů.
# 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
Aktualizace imagí Kubernetes a uzlů
AKS s automatickým zřizováním uzlů spravuje upgrady verzí Kubernetes a aktualizace disků operačního systému virtuálního počítače za vás ve výchozím nastavení.
Aktualizace Kubernetes
Upgrady Kubernetes pro uzly automatického zřizování se řídí verzí Kubernetes řídicího panelu. Pokud provedete upgrade clusteru, uzly automatického zřizování se automaticky aktualizují, aby dodržovaly stejné verzování.
Aktualizace imagí uzlu
Ve výchozím nastavení se virtuální počítače fondu uzlů NAP automaticky aktualizují, když je k dispozici nová image. Pokud chcete připnout pool uzlů k určité verzi obrazu uzlu, můžete nastavit imageVersion ve třídě uzlu:
kubectl edit aksnodeclass default
V definici třídy uzlu nastavte imageVersion na jednu z publikovaných verzí uvedených v poznámkách k verzi AKS. Také můžete zobrazit dostupnost obrazů v oblastech pomocí sledovače verzí AKS.
ImageVersion je část názvu image uzlu, která obsahuje datum, protože se podporuje pouze Ubuntu 22.04, například "AKSUbuntu-2204-202311.07.0" by bylo "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
Odebrání specifikace verze obrazu by způsobilo, že fond uzlů bude aktualizován na nejnovější verzi obrazu uzlu.
Důležité
Po aktualizaci klíče SSH AKS automaticky neaktualizuje uzly. Kdykoli se můžete rozhodnout spustit [operaci aktualizace fondu uzlů][node-image-upgrade]. Operace aktualizace klíčů SSH se projeví po dokončení aktualizace image uzlu. U clusterů s povoleným automatickým zřizováním uzlů je možné aktualizaci image uzlu provést použitím nového popisku u vlastního prostředku Kubernetes NodePool.
Přerušení uzlu
Když se úlohy na uzlech škálují dolů, automatické zřizování uzlů používá pravidla přerušení ve specifikaci fondu uzlů k rozhodnutí, kdy a jak tyto uzly odebrat, a potenciálně přeplánovat úlohy, aby byly efektivnější. To se provádí především prostřednictvím konsolidace, která odstraňuje nebo nahrazuje uzly pro kontejnery podů v optimální konfiguraci. Stavové úvahy využívají ConsolidationPolicy
jako například WhenUnderUtilized
, WhenEmpty
nebo WhenEmptyOrUnderUtilized
k aktivaci konsolidace.
consolidateAfter
je podmínka založená na čase, která se dá nastavit tak, aby umožňovala čas vyrovnávací paměti mezi akcemi.
Uzel můžete odebrat ručně pomocí kubectl delete node
, ale automatické poskytování uzlů může také řídit, kdy by měly být uzly optimalizovány na základě vašich specifikací.
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
Monitorování událostí výběru
Automatické poskytování uzlu vytváří události clusteru, které lze použít k monitorování rozhodnutí o nasazení a plánování. Události můžete zobrazit prostřednictvím streamu událostí Kubernetes.
kubectl get events -A --field-selector source=karpenter -w
Zakázání automatického zřizování nodů
Automatické zřizování uzlů lze zakázat pouze tehdy, když:
- Neexistují žádné uzly spravované architekturou NAP. Slouží
kubectl get nodes -l karpenter.sh/nodepool
k zobrazení uzlů spravovaných architekturou NAP. - Všechny existující karpenter.sh/NodePools mají nastavenou
spec.limits.cpu
hodnotu 0.
Postup vypnutí automatického zřizování uzlů
- Nastavte všechna pole karpenter.sh/NodePools
spec.limits.cpu
na hodnotu 0. To brání vytvoření nových uzlů, ale nenaruší aktuálně spuštěné uzly.
Poznámka:
Pokud vám nezáleží na tom, aby se zajistilo, že každý pod, který běžel na uzlu NAP, je bezpečně migrován na ne-NAP uzel, můžete přeskočit kroky 2 a 3 a místo toho použít kubectl delete node
příkaz pro každý uzel spravovaný NAP.
Přeskočení kroků 2 a 3 se nedoporučuje, protože některé pody můžou být nevyřízené a nebudou respektovat soubory PDB.
Nespouštějte kubectl delete node
na žádných uzlech, které nespravuje NAP.
Přidejte "taint
karpenter.azure.com/disable:NoSchedule
" ke každému karpenter.sh/NodePool.apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: default spec: template: spec: ... taints: - key: karpenter.azure.com/disable, effect: NoSchedule
Tím se spustí proces migrace úloh na uzlech spravovaných architekturou NAP na uzly bez architektury NAP, které dodržují limity souborů PDB a přerušení. Pody se budou migrovat na uzly bez architektury NAP, pokud se dají přizpůsobit. Pokud není dostatek pevně stanovené kapacity, zůstanou některé uzly spravované NAP.
Zvyšte kapacitu stávajících AgentPools ManagedCluster s pevnou velikostí nebo vytvořte nové AgentPools s pevnou velikostí, aby se zatížení převzalo z uzlů spravovaných pomocí NAP. Při přidání těchto uzlů do clusteru se vyprázdní uzly spravované architekturou NAP a práce se migruje na uzly s pevným škálováním.
Ověřte, že všechny uzly spravované NAP jsou odstraněny pomocí
kubectl get nodes -l karpenter.sh/nodepool
. Pokud stále existují NAP-spravované uzly, to pravděpodobně znamená, že clusteru došla kapacita pro pevné škálování a je potřeba více uzlů k migraci zbývajících úloh.Aktualizujte parametr režimu zřizování uzlu managedCluster na
Manual
.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-provisioning-mode Manual
Azure Kubernetes Service