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.
V tomto článku přidáte sekundární fond spotových uzlů do existujícího clusteru Azure Kubernetes Service (AKS).
Fond uzlů Spot je fond uzlů využívající škálovací sadu virtuálních počítačů Azure Spot. Díky spotovým virtuálním počítačům v clusteru AKS můžete využít nevyužitou kapacitu Azure s významnými úsporami nákladů. Množství dostupné nevyužité kapacity se liší v závislosti na mnoha faktorech, jako je velikost uzlu, oblast a denní doba.
Když nasadíte fond spotových uzlů, Azure přidělí spotové uzly, pokud je k dispozici kapacita, a nasadí spotovou škálovací sadu, která zálohuje fond spotových uzlů v jedné výchozí doméně. Pro spotové uzly neexistuje žádná smlouva SLA. Neexistují žádné záruky vysoké dostupnosti. Pokud Azure potřebuje kapacitu zpět, infrastruktura Azure vyřadí spotové uzly.
Spotové uzly jsou skvělé pro úlohy, které můžou zvládnout přerušení, předčasné ukončení nebo vyřazení. Například úlohy, jako jsou dávkové zpracování, vývojová a testovací prostředí a rozsáhlé výpočetní úlohy, mohou být vhodné pro plánování do fondu uzlů Spot.
Než začnete
- Tento článek předpokládá základní znalosti konceptů Kubernetes a Azure Load Balanceru. Další informace najdete v tématu Základní koncepty Kubernetes pro Službu Azure Kubernetes Service (AKS).
- Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
- Když vytvoříte cluster, který má používat fond uzlů Spot, musí pro fondy uzlů používat škálovací sady virtuálních počítačů a nástroj pro vyrovnávání zatížení SKU Standard. Po vytvoření clusteru musíte také přidat další fond uzlů, který je popsaný v tomto kurzu.
- Tento článek vyžaduje, abyste spustili Azure CLI verze 2.14 nebo novější. Verzi zjistíte spuštěním příkazu
az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.
Omezení
Při vytváření a správě clusterů AKS s fondem spotových uzlů platí následující omezení:
- Fond uzlů Spot nemůže být výchozím fondem uzlů, lze jej použít pouze jako sekundární fond.
- Řídicí rovinu a fondy uzlů nemůžete upgradovat současně. Chcete-li upgradovat řídicí rovinu a zbývající fondy uzlů současně, musíte fond uzlů typu Spot upgradovat samostatně nebo jej odebrat.
- Fond uzlů Spot musí používat škálovací sady virtuálních počítačů.
- Nemůžete změnit
ScaleSetPriorityaniSpotMaxPricepo vytvoření. - Při nastavování
SpotMaxPricemusí být hodnota -1 nebo kladná hodnota s maximálně pěti desetinnými místy. - Fond uzlů Spot má štítek
kubernetes.azure.com/scalesetpriority:spot, poskvrněníkubernetes.azure.com/scalesetpriority=spot:NoSchedulea systémové pody mají antiafinitu. - Abyste mohli naplánovat úlohy do fondu uzlů Spot, musíte přidat odpovídající toleranci a afinitu.
Přidat fond uzlů Spot do clusteru AKS
Při přidávání fondu uzlů Spot do existujícího clusteru musí jít o cluster s povolenými více fondy uzlů. Když vytvoříte cluster AKS s povolenou podporou více fondů uzlů, ve výchozím nastavení se vytvoří fond uzlů s priorityRegular. Chcete-li přidat fond spotových uzlů, je nutné zadat Spot jako hodnotu pro priority. Další informace o vytvoření clusteru AKS s více fondy uzlů najdete v tématu použití více fondů uzlů.
- Vytvořte fond uzlů pomocí
prioritySpotaz aks nodepool addpříkazu.
export SPOT_NODEPOOL="spotnodepool"
az aks nodepool add \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER \
--name $SPOT_NODEPOOL \
--priority Spot \
--eviction-policy Delete \
--spot-max-price -1 \
--enable-cluster-autoscaler \
--min-count 1 \
--max-count 3 \
--no-wait
V předchozím příkazu priority vytvoří fond Spot uzlů fond spotových uzlů. Parametr eviction-policy je nastaven na Deletehodnotu , což je výchozí hodnota. Když nastavíte zásadu vyřazování na Delete, uzly v základní škálovací sadě fondu uzlů se při vyřazení odstraní.
Můžete také nastavit zásadu vyřazení na Deallocate, což znamená, že uzly v podkladové sadě škálování budou při vyřazení uvedeny do stavu stopped-deallocated. Uzly ve stavu stopped-deallocated se započítávají do kvóty výpočetních prostředků a mohou způsobovat problémy se škálováním nebo aktualizací clusteru. Hodnoty priority a eviction-policy lze nastavit pouze při vytváření fondu uzlů. Tyto hodnoty nelze později aktualizovat.
Předchozí příkaz také povolí cluster autoscaler, který doporučujeme používat s fondy uzlů Spot. Na základě úloh spuštěných v clusteru automatické škálování clusteru škáluje počet uzlů nahoru a dolů. U fondů uzlů Spot automatické škálování clusteru po vystěhování navýší počet uzlů, pokud je stále potřeba více uzlů. Pokud změníte maximální počet uzlů, které fond uzlů může mít, musíte také upravit maxCount hodnotu přidruženou k automatickému škálování clusteru. Pokud automatické škálování clusteru nepoužíváte, po vyřazení se spotový fond nakonec sníží na 0 a bude vyžadovat ruční operaci pro příjem dalších spotových uzlů.
Důležité
Úlohy plánujte pouze do fondů uzlů Spot, které snesou přerušení, například úlohy dávkového zpracování a testovací prostředí. Doporučujeme nastavit poskvrny a tolerance ve fondu uzlů Spot, abyste zajistili, že do fondu uzlů Spot budou plánovány pouze úlohy, které dokážou zvládnout vystěhování z uzlu. Například výše uvedený příkaz přidá poskvrnu kubernetes.azure.com/scalesetpriority=spot:NoSchedule, takže se na tento uzel naplánují pouze pody s odpovídající tolerancí.
Ověřit fond uzlů Spot
- Ověřte pomocí příkazu
az aks nodepool show, že byl fond uzlů přidán, a potvrďte, žescaleSetPriorityjeSpot.
az aks nodepool show --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER --name $SPOT_NODEPOOL
Výsledky:
{
"artifactStreamingProfile": null,
"availabilityZones": null,
"capacityReservationGroupId": null,
"count": 3,
"creationData": null,
"currentOrchestratorVersion": "1.30.10",
"eTag": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"enableAutoScaling": true,
"enableCustomCaTrust": false,
"enableEncryptionAtHost": false,
"enableFips": false,
"enableNodePublicIp": false,
"enableUltraSsd": false,
"gatewayProfile": null,
"gpuInstanceProfile": null,
"gpuProfile": null,
"hostGroupId": null,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/xxxxxxxxxxxxxxxx/providers/Microsoft.ContainerService/managedClusters/xxxxxxxxxxxxxxxx/agentPools/xxxxxxxxxxxx",
"kubeletConfig": null,
"kubeletDiskType": "OS",
"linuxOsConfig": null,
"maxCount": 3,
"maxPods": 30,
"messageOfTheDay": null,
"minCount": 1,
"mode": "User",
"name": "xxxxxxxxxxxx",
"networkProfile": {
"allowedHostPorts": null,
"applicationSecurityGroups": null,
"nodePublicIpTags": null
},
"nodeImageVersion": "AKSUbuntu-2204gen2containerd-xxxxxxxx.xx.x",
"nodeInitializationTaints": null,
"nodeLabels": {
"kubernetes.azure.com/scalesetpriority": "spot"
},
"nodePublicIpPrefixId": null,
"nodeTaints": [
"kubernetes.azure.com/scalesetpriority=spot:NoSchedule"
],
"orchestratorVersion": "x.xx.xx",
"osDiskSizeGb": 128,
"osDiskType": "Managed",
"osSku": "Ubuntu",
"osType": "Linux",
"podIpAllocationMode": null,
"podSubnetId": null,
"powerState": {
"code": "Running"
},
"provisioningState": "Creating",
"proximityPlacementGroupId": null,
"resourceGroup": "xxxxxxxxxxxxxxxx",
"scaleDownMode": "Delete",
"scaleSetEvictionPolicy": "Delete",
"scaleSetPriority": "Spot",
"securityProfile": {
"enableSecureBoot": false,
"enableVtpm": false,
"sshAccess": "LocalUser"
},
"spotMaxPrice": -1.0,
"status": null,
"tags": null,
"type": "Microsoft.ContainerService/managedClusters/agentPools",
"typePropertiesType": "VirtualMachineScaleSets",
"upgradeSettings": {
"drainTimeoutInMinutes": null,
"maxSurge": null,
"maxUnavailable": null,
"nodeSoakDurationInMinutes": null,
"undrainableNodeBehavior": null
},
"virtualMachineNodesStatus": null,
"virtualMachinesProfile": null,
"vmSize": "Standard_DS2_v2",
"vnetSubnetId": null,
"windowsProfile": null,
"workloadRuntime": "OCIContainer"
}
Naplánování spuštění podu na spotovém uzlu
Chcete-li naplánovat pod tak, aby běžel na uzlu Spot, můžete přidat toleranci a afinitu uzlu, které odpovídají taintu aplikovanému na uzel Spot.
Následující příklad ukazuje část souboru YAML, která definuje toleranci odpovídající poskvrně kubernetes.azure.com/scalesetpriority=spot:NoSchedule a afinitu uzlu odpovídající štítku kubernetes.azure.com/scalesetpriority=spot, který byl v předchozím kroku použit s pravidly afinity uzlu requiredDuringSchedulingIgnoredDuringExecution a preferredDuringSchedulingIgnoredDuringExecution:
spec:
containers:
- name: spot-example
tolerations:
- key: "kubernetes.azure.com/scalesetpriority"
operator: "Equal"
value: "spot"
effect: "NoSchedule"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "kubernetes.azure.com/scalesetpriority"
operator: In
values:
- "spot"
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
Když nasadíte pod s touto tolerancí a afinitou uzlu, Kubernetes pod úspěšně naplánuje na uzly, na které byly použity taint a label. V tomto příkladu platí následující pravidla:
- Uzel musí mít popisek s klíčem
kubernetes.azure.com/scalesetprioritya hodnota tohoto popisku musí býtspot. - Uzel má přednostně štítek s klíčem
another-node-label-keya hodnota tohoto štítku musí býtanother-node-label-value.
Další informace najdete v tématu Přiřazení podů k uzlům.
Upgradovat fond spotových uzlů
Když upgradujete fond spotových uzlů, AKS interně vydá cordon a oznámení o vyřazení, ale nepoužije se žádné vyprázdnění. Pro upgrady fondu uzlů Spot nejsou k dispozici žádné navýšené uzly. Kromě těchto změn je chování při aktualizaci fondů uzlů Spot stejné jako u jiných typů fondů uzlů.
Další informace o upgradu najdete v tématu Upgrade clusteru AKS.
Maximální cena za spotový bazén
Ceny spotových instancí jsou proměnné na základě oblasti a skladové položky. Další informace najdete v informacích o cenách pro Linux a Windows.
U proměnných cen máte možnost nastavit maximální cenu v amerických dolarech (USD) až na pět desetinných míst. Například hodnota 0,98765 by byla maximální cena 0,98765 USD za hodinu. Pokud nastavíte maximální cenu na hodnotu -1, instance se nevyřadí na základě ceny. Pokud je dostupná kapacita a kvóta, cena instance bude odpovídat nižší z těchto cen: aktuální ceně instance Spot nebo aktuální ceně standardní instance.
Další kroky
V tomto článku jste zjistili, jak přidat fond spotových uzlů do clusteru AKS. Další informace o řízení podů napříč fondy uzlů najdete v tématu Osvědčené postupy pro pokročilé funkce plánovače v AKS.