Konfigurace více fondů uzlů pomocí fondů spotových uzlů AKS s automatickým škálováním clusteru
Azure poskytuje instance virtuálních počítačů Azure, které nabízejí škálovatelnost a zároveň snižují náklady a jsou ideální pro úlohy, které se dají přerušit. Tyto virtuální počítače sice přistupují k nevyužité výpočetní kapacitě Azure za nižší ceny, přesto ale podporují vysoce výkonné výpočetní scénáře.
Řešení pro sledování dronů vaší společnosti je nasazené ve službě Azure Kubernetes Service (AKS) jako mnoho kontejnerových aplikací a služeb. Jednou z těchto služeb je služba dávkového zpracování, která plánuje dráhy letů dronů. V souvislosti s náhlým zvětšením zákaznické základny sledujete zahlcení služby dávkového zpracování požadavky a vytvoření backlogu dodávek. Tato situace způsobuje zpoždění a frustraci zákazníků.
Automatické škálování počtu replik služby dávkového zpracování zajišťuje včasné zpracování objednávek. Také ale vyžaduje, abyste nasadili více uzlů, abyste mohli zvládnout požadavky na výpočetní prostředky. Při analýze trendů využití ve službě Azure Monitor zjistíte, že se tyto uzly používají jenom v určitých časech a jejich využití není nákladově efektivní. Služba dávkového zpracování je bezstavová a neukládá žádná data relace klienta. Uvědomíte si, že můžete ušetřit peníze:
- Použitím instancí uzlů s nižšími náklady
- Automatickým škálováním počtu uzlů ve fondu uzlů, který je nakonfigurovaný pro dávkové zpracování
Pojďme se podívat na základní infrastrukturu, která toto řešení snižující náklady v AKS umožňuje.
Co je spotový virtuální počítač v Azure?
Spotový virtuální počítač je virtuální počítač, který umožňuje přístup k nevyužité výpočetní kapacitě Azure s velkými slevami. Spotové virtuální počítače nahrazují v Azure existující virtuální počítače s nízkou prioritou. Spotové virtuální počítače můžete použít ke spouštění úloh, které zahrnují:
Scénáře s vysoce výkonnými výpočetními operacemi, dávkové zpracování nebo aplikace pro vizuální vykreslování
Rozsáhlé bezstavové aplikace
Vývojová a testovací prostředí, včetně úloh kontinuální integrace (CI) a průběžného doručování (CD)
Dostupnost spotového virtuálního počítače
Dostupnost spotového virtuálního počítače závisí na faktorech, jako jsou kapacita, velikost, oblast a čas v průběhu dne. Azure přiděluje virtuální počítače jenom v případě, že je dostupná kapacita. V důsledku toho neexistuje žádná smlouva o úrovni služeb (SLA) pro tyto typy virtuálních počítačů a nenabízí žádné záruky vysoké dostupnosti.
Zásady vyřazení spotového virtuálního počítače
Výchozí zásadou vyřazení spotových virtuálních počítačů je Deallocate (Uvolnit). Azure vyřadí spotové virtuální počítače s oznámením o 30 sekundách, když se kapacita v oblasti omezí. Virtuální počítač s nastavenou zásadou Deallocate (Uvolnit) se při vyřazení přepne do stavu zastaveno (přidělení zrušeno). Vyřazený virtuální počítač můžete znovu nasadit, jakmile bude spotová kapacita opět dostupná. Uvolněný virtuální počítač se dál započítává do vaší kvóty spotových virtuálních procesorů (vCPU) a nadále se účtují poplatky za příslušné přidělené disky.
Co je škálovací sada spotových virtuálních počítačů?
Škálovací sada spotových virtuálních počítačů je škálovací sada virtuálních počítačů, která podporuje spotové virtuální počítače Azure. Tyto virtuální počítače se chovají stejným způsobem jako běžné spotové virtuální počítače, ale s jedním rozdílem: Pokud používáte podporu škálovací sady virtuálních počítačů pro spotové virtuální počítače v Azure, můžete si vybrat mezi dvěma zásadami vyřazení:
Zrušení přidělení: Zrušení přidělení zásad funguje přesně tak, jak je popsáno výše.
Odstranit: Zásady odstranění umožňují vyhnout se nákladům na disky a dosažení limitů kvót. Při použití zásady vyřazení Delete (Odstranit) se vyřazené virtuální počítače odstraní společně s jejich základními disky. Funkce automatického škálování škálovací sady se teď může automaticky pokusit vyřadit virtuální počítač vytvořením nových virtuálních počítačů. I když vytvoření virtuálních počítačů není zaručené, nezapočítávají se vyřazené virtuální počítače do kvóty vCPU a nezpůsobují náklady na základní disky.
Použití funkce automatického škálování je doporučeným postupem jenom v případě, že zásadu vyřazení ve škálovací sadě nastavíte na Delete (Odstranit).
Co je fond spotových uzlů ve službě Azure Kubernetes Service (AKS)?
Fond spotových uzlů je fond uzlů uživatele, který používá škálovací sadu spotových virtuálních počítačů. AKS podporuje spotové virtuální počítače v těchto situacích:
- Potřebujete vytvořit fondy uzlů uživatele.
- Chcete využít cenové výhody, které nabízí podpora škálovací sady virtuálních počítačů pro spotové virtuální počítače Azure.
Pomocí fondů spotových uzlů můžete:
- Využít nevyužité kapacity v Azure
- Použít funkce škálovací sady se zásadou vyřazení Delete (Odstranit)
- Definovat maximální cenu, kterou chcete zaplatit za hodinu
- Povolit doporučené automatické škálování clusteru AKS Kubernetes při použití fondů spotových uzlů
Pokud například chcete podporovat službu dávkového zpracování aplikace pro sledování dronů, můžete vytvořit fond spotových uzlů uživatele a povolit automatické škálování clusteru. Horizontální škálovač podů pak můžete nakonfigurovat tak, aby nasazoval více služeb dávkového zpracování tak, aby odpovídal požadavkům na prostředky.
Když se poptávka po uzlech zvýší, může automatické škálování clusteru škálovat počet uzlů ve fondu spotových uzlů směrem nahoru – a v opačné situaci dolů. Pokud dojde k vyřazení uzlů, automatické škálování clusteru se snaží vertikálně navýšit kapacitu počtu uzlů, pokud jsou stále potřeba další uzly.
Omezení fondu spotových uzlů
Než se do clusteru AKS rozhodnete přidat fond spotových uzlů uživatele, zvažte následující omezení:
- Základní spotová škálovací sada je nasazená jenom v jedné doméně selhání a nenabízí žádné záruky vysoké dostupnosti.
- V clusteru AKS musí být povolená podpora více fondů uzlů.
- Fondy spotových uzlů můžete používat jenom jako fondy uzlů uživatele.
- Fondy spotových uzlů nejde upgradovat.
- Vytvoření spotových virtuálních počítačů není zaručené. Vytvoření spotových uzlů závisí na dostupnosti kapacity a kvóty v oblasti Azure, ve které je cluster nasazený.
Pamatujte, že fondy spotových uzlů by se měly používat jenom pro úlohy, které se dají přerušit.
Důležité
U některých předplatných, jako jsou například předplatná Sponsorship, je možnost vytvoření spotových virtuálních počítačů a fondů spotových uzlů omezená. Je možné, že fond spotových uzlů pro svůj cluster nebudete moct vytvořit.
Přidání fondu spotových uzlů do clusteru AKS
Fond spotových uzlů nemůže být systémovým fondem uzlů pro cluster AKS. Nejprve musíte vytvořit cluster a pak pomocí az aks nodepool add
příkazu přidat nový fond uzlů uživatele.
Nastavíte několik parametrů pro nový fond uzlů, abyste ho mohli nakonfigurovat jako fond spotových uzlů.
Priorita
Parametr --priority
je ve výchozím nastavení pro nový fond uzlů nastavený na hodnotu Regular
. Nastavte hodnotu na Spot
, abyste určili, že vámi vytvářený nový fond je fond spotových uzlů. Tuto hodnotu nelze po vytvoření změnit.
Zásady vyřazení
Fond spotových uzlů musí používat škálovací sadu virtuálních počítačů. Vzpomeňte si, že fond spotových uzlů používá spotovou škálovací sadu. Nastavte --eviction-policy
, aby Delete
škálovací sada umožňovala odebrat uzel i základní přidělený disk, který uzel používá. Tuto hodnotu nemůžete po vytvoření změnit.
Zásady vyřazení můžete nastavit na Deallocate
, ale když se tyto uzly vyřadí, stále se započítávají do kvóty výpočetních prostředků do škálování nebo upgradu clusteru.
Maximální cena pro spotový uzel
Fondy spotových uzlů optimalizují náklady tím, že limitují maximální částku, kterou jste ochotni zaplatit za spotový uzel za hodinu. K nastavení bezpečné částky použijte parametr --spot-max-price
. Nově vytvořené spotové uzly se po dosažení této hodnoty vyřadí.
Tuto hodnotu můžete nastavit na libovolnou kladnou hodnotu až na pět desetinných míst nebo ji nastavit na -1
hodnotu . --spot-max-price
Nastavení hodnoty tak, aby -1
ovlivnilo fond uzlů následujícími způsoby:
- Uzly se nevyřadí na základě ceny uzlu.
- Náklady na nové uzly vycházejí z aktuální ceny spotových uzlů nebo ceny standardního uzlu podle toho, co je nižší.
Pokud například nastavíte hodnotu na 0,98765, maximální cena uzlu v USD je 0,98765 za hodinu. Jakmile spotřeba uzlu překročí tuto částku, bude vyřazen.
Povolení automatického škálování clusteru
Doporučujeme, abyste povolili automatické škálování clusteru pomocí parametru --enable-cluster-autoscaler
. Pokud automatické škálování clusteru nebudete používat, riskujete, že se počet uzlů ve fondu uzlů sníží na nulu, když dojde k vyřazování uzlů z důvodu omezení kapacity Azure.
Minimální počet uzlů
Nastavte minimální počet uzlů na hodnotu mezi 1 a 100 pomocí parametru --min-count
. Minimální počet uzlů se vyžaduje, když povolíte automatické škálování clusteru.
Maximální počet uzlů
Nastavte maximální počet uzlů na hodnotu mezi 1 a 100 pomocí parametru --max-count
. Maximální počet uzlů se vyžaduje, když povolíte automatické škálování clusteru.
Ukázková konfigurace
Tady je příklad az aks nodepool add
příkazu, který přidá fond spotových uzlů s maximálním počtem 3 a minimálním počtem 1. Všimněte si použití --enable-cluster-autoscaler
funkce spotového uzlu.
az aks nodepool add \
--resource-group resourceGroup \
--cluster-name aksCluster \
--name spotpool01 \
--enable-cluster-autoscaler \
--max-count 3 \
--min-count 1 \
--priority Spot \
--eviction-policy Delete \
--spot-max-price -1 \
--no-wait
Nasazení podů do fondů spotových uzlů
Při nasazování úloh v Kubernetes můžete poskytnutím informací plánovači určit, na kterých uzlech se můžou nebo nesmí úlohy spouštět. Plánování úloh řídíte konfigurací taintů, tolerance a spřažení uzlů. Spotové uzly se konfigurují s konkrétním popiskem a taintem.
Co je taint?
Taint se na uzel použije proto, aby určil, že se na něm můžou naplánovat jenom konkrétní pody. Spotové uzly se konfigurují s popiskem nastaveným na kubernetes.azure.com/scalesetpriority:spot
.
Co je tolerance?
Tolerance je specifikace použitá u podu, která umožňuje, ale nevyžaduje, aby byl pod naplánován na uzlu s odpovídajícím taintem. Spotové uzly se konfigurují s taintem uzlu nastaveným na kubernetes.azure.com/scalesetpriority=spot:NoSchedule
.
Poznámka:
Tainty a tolerance nezaručují, že se pod umístí na konkrétní uzel. Pokud například uzel nemá žádný taint, je možné, že pod s tolerací může být naplánovaný na neudržovaný uzel. Tento problém může vyřešit určení spřažení s tainty a tolerancemi.
Co je spřažení uzlu?
Pomocí spřažení uzlu můžete popsat, které pody jsou naplánované na uzel. Spřažení se specifikuje pomocí popisků definovaných pro uzel. Systémové pody jsou například v AKS nakonfigurované s nastavením proti spřažení směrem k spotovým uzlům, aby se zabránilo jejich plánování na těchto uzlech.
Definice tolerance v souboru manifestu podu
Toleraci taintu uzlu určíte vytvořením tolerations
položky slovníku v souboru manifestu úlohy. V tomto slovníku nastavíte následující vlastnosti pro každý taint uzlu, který musí úloha v této části tolerovat:
Vlastnost | Popis |
---|---|
key |
Identifikuje pár klíč-hodnota taintu uzlu zadaný pro uzel. Například u fondu spotových uzlů je pár klíč-hodnota kubernetes.azure.com/scalesetpriority:spot . Klíč je kubernetes.azure.com/scalesetpriority . |
operator |
Umožňuje, aby se tolerance shodovala s taintem. Výchozí operátor je Equal . Můžete také zadat Exists , aby došlo ke shodě s tolerancí. Pokud však použijete Exists , nezadáte následující vlastnost (value ). |
value |
Představuje hodnotu části páru klíč-hodnota uzlu taint, který je zadaný na uzlu. Například ve fondu spotových uzlů s párem klíč-hodnota kubernetes.azure.com/scalesetpriority:spot je hodnotou spot . |
effect |
Určuje, jak se v systému zpracovává plánování podu. Existují tři možnosti: NoSchedule , PreferNoSchedule a NoExecute . NoSchedule zajišťuje, že systém nemůže naplánovat pod. PreferNoSchedule umožňuje, aby se systém pokusil pod neplánovat. NoExecute buď vyřadí pody, které jsou už na uzlu s taintem spuštěné, nebo pod vůbec neplánuje. |
Definování spřažení uzlů v souboru manifestu podu
Spřažení určíte vytvořením affinity
položky v souboru manifestu úlohy. V této položce nastavíte následující vlastnosti pro každý popisek uzlu, který se musí shodovat s úlohou:
Vlastnost | Popis |
---|---|
nodeAffinity |
Popisuje pravidla plánování spřažení uzlů pro pod. |
requiredDuringSchedulingIgnoredDuringExecution |
Pokud požadavky na spřažení zadané tímto polem nejsou splněné v době plánování, pod nelze naplánovat na uzel. Pokud požadavky na spřažení zadané tímto polem přestanou být v určitém okamžiku během provádění podu (například kvůli aktualizaci), může se systém rozhodnout, že se pokusí vyřadit pod z uzlu. |
nodeSelectorTerms |
Seznam termínů selektoru uzlů Vrácené termíny odpovídají některému z filtrů, nikoli ke všem filtrům. |
matchExpressions |
Seznam požadavků selektoru uzlů podle popisků uzlu |
key |
Klávesa popisku, na kterou se selektor vztahuje. Klíč je kubernetes.azure.com/scalesetpriority |
operator |
Představuje vztah klíče k sadě hodnot. Platné operátory jsou In , , NotIn Exists , DoesNotExist Gt aLt |
values |
Představuje hodnotu části dvojice klíč-hodnota popisku uzlu, která je zadána v uzlu. Ve fondu spotových uzlů s párem kubernetes.azure.com/scalesetpriority:spot klíč-hodnota je spot hodnota . |
Tady je příklad úlohy, která má přidané tolerance a spřažení pro fondy spotových uzlů.
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
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"