Přidání fondu spotových uzlů Azure do clusteru Azure Kubernetes Service (AKS)

Fond spotových uzlů je fond uzlů podporovaný škálovací sadou spotových virtuálních počítačů Azure. Použití spotových virtuálních počítačů pro uzly s clusterem AKS vám umožní využívat nevyužitou kapacitu v Azure za významné úspory nákladů. Velikost dostupné nevyužité kapacity se bude lišit v závislosti na mnoha faktorech, včetně velikosti uzlu, oblasti a denní doby.

Když nasadíte fond spotových uzlů, Azure přidělí spotové uzly, pokud je k dispozici kapacita. Pro spotové uzly neexistuje žádná smlouva SLA. Spotová škálovací sada, která zálohuje fond spotových uzlů, je nasazená v jedné doméně selhání a nenabízí žádné záruky vysoké dostupnosti. Kdykoli Azure potřebuje kapacitu zpět, infrastruktura Azure spotové uzly vyřadí.

Spotové uzly jsou skvělé pro úlohy, které mohou zpracovávat přerušení, předčasné ukončení nebo vyřazení. Například úlohy, jako jsou úlohy dávkového zpracování, vývojová a testovací prostředí a velké výpočetní úlohy, mohou být vhodnými kandidáty pro plánování ve fondu spotových uzlů.

V tomto článku přidáte sekundární fond spotových uzlů do existujícího clusteru Azure Kubernetes Service (AKS).

Tento článek předpokládá základní znalost kubernetes a konceptů Azure Load Balancer. Další informace najdete v tématu Základní koncepty Kubernetes pro Azure Kubernetes Service (AKS).

Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

Než začnete

Když vytvoříte cluster pro použití fondu spotových uzlů, musí tento cluster používat Virtual Machine Scale Sets pro fondy uzlů a nástroj pro vyrovnávání zatížení se skladovou položkou Standard. Po vytvoření clusteru musíte také přidat další fond uzlů, což je popsané v pozdějším kroku.

Tento článek vyžaduje, abyste měli 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 spotových uzlů nemůže být výchozím fondem uzlů clusteru. Fond spotových uzlů lze použít pouze pro sekundární fond.
  • Řídicí rovinu a fondy uzlů není možné upgradovat současně. Pokud chcete současně upgradovat řídicí rovinu a zbývající fondy uzlů, musíte je upgradovat samostatně nebo odebrat fond spotových uzlů.
  • Fond spotových uzlů musí používat Virtual Machine Scale Sets.
  • Po vytvoření nemůžete změnit ScaleSetPriority ani SpotMaxPrice.
  • Při nastavování hodnoty SpotMaxPrice musí být hodnota -1 nebo kladná hodnota s maximálně pěti desetinnými místy.
  • Fond spotových uzlů bude mít popisek kubernetes.azure.com/scalesetpriority:spot, kubernetes.azure.com/scalesetpriority=spot:NoSchedule taintu a systémové pody budou mít spřažení.
  • Abyste mohli plánovat úlohy ve fondu spotových uzlů, musíte přidat odpovídající spřažení a spřažení.

Přidání fondu spotových uzlů do clusteru AKS

Fond spotových uzlů musíte přidat do existujícího clusteru, který má povolených více fondů uzlů. Další podrobnosti 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í příkazu az aks nodepool add :

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name spotnodepool \
    --priority Spot \
    --eviction-policy Delete \
    --spot-max-price -1 \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3 \
    --no-wait

Ve výchozím nastavení vytvoříte fond uzlů s prioritouNormální v clusteru AKS při vytváření clusteru s více fondy uzlů. Výše uvedený příkaz přidá do existujícího clusteru AKS pomocný fond uzlů s prioritouSpot. Díky prioritěspotu je fond uzlů fond spotových uzlů. Parametr eviction-policy je ve výše uvedeném příkladu nastavený na Odstranit , což je výchozí hodnota. Když nastavíte zásadu vyřazení na Odstranit, uzly v podkladové škálovací sadě fondu uzlů se při vyřazení odstraní. Můžete také nastavit zásadu vyřazení na Uvolnit. Když zásadu vyřazení nastavíte na Uvolnit, uzly v podkladové škálovací sadě se při vyřazení nastaví do zastaveného a uvolněného stavu. Uzly v zastaveném stavu se započítávají do kvóty výpočetních prostředků a můžou způsobovat problémy se škálováním nebo upgradem clusteru. Hodnoty priority a zásad vyřazení lze nastavit pouze během vytváření fondu uzlů. Tyto hodnoty nelze později aktualizovat.

Příkaz také povolí automatické škálování clusteru, které se doporučuje používat s fondy spotových uzlů. V závislosti na úlohách spuštěných v clusteru provede automatické škálování clusteru vertikální navýšení kapacity a snížení kapacity počtu uzlů ve fondu uzlů. V případě fondů spotových uzlů automatické škálování clusteru vertikálně zvýší počet uzlů po vyřazení, pokud je stále potřeba více uzlů. Pokud změníte maximální počet uzlů, které může mít fond uzlů, musíte také upravit hodnotu přidruženou maxCount k automatickému škálování clusteru. Pokud nepoužíváte automatické škálování clusteru, po vyřazení se spotový fond nakonec sníží na nulu a pro příjem dalších spotových uzlů bude nutné provést ruční operaci.

Důležité

Úlohy můžete plánovat pouze ve fondech spotových uzlů, které mohou zpracovávat přerušení, jako jsou úlohy dávkového zpracování a testovací prostředí. Ve fondu spotových uzlů doporučujeme nastavit tainty a tolerance, aby se zajistilo, že ve fondu spotových uzlů budou naplánované jenom úlohy, které dokážou vyřazení uzlů zpracovat. Například výše uvedený příkaz ve výchozím nastavení přidá taint kubernetes.azure.com/scalesetpriority=spot:NoSchedule takže na tomto uzlu jsou naplánovány pouze pody s odpovídající tolelerací.

Ověření fondu spotových uzlů

Ověření přidání fondu uzlů jako fondu spotových uzlů:

az aks nodepool show --resource-group myResourceGroup --cluster-name myAKSCluster --name spotnodepool

Ověřte , že je parametr scaleSetPriorityspotový.

Pokud chcete naplánovat spuštění podu na spotovém uzlu, přidejte tolerance a spřažení uzlů, které odpovídají taintu použitému na spotový uzel. Následující příklad ukazuje část souboru yaml, která definuje tolerance, která odpovídá kubernetes.azure.com/scalesetpriority=spot:NoSchedule taint a spřažení uzlu, které odpovídá popisku kubernetes.azure.com/scalesetpriority=spot použitému v předchozím kroku.

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"
   ...

Když se nasadí pod s touto tolelerací a spřažením uzlů, Kubernetes úspěšně naplánuje pod na uzlech s použitým taintem a popiskem.

Upgrade fondu spotových uzlů

Upgrade fondů spotových uzlů se dříve nepodporoval, ale teď se jedná o dostupnou operaci. Při upgradu fondu spotových uzlů AKS interně vydá kordon a oznámení o vyřazení, ale žádné vyprázdnění se nepoužije. Pro upgrady fondu spotových uzlů nejsou k dispozici žádné přepětí uzlů. Mimo tyto změny je chování při upgradu fondů spotových uzlů konzistentní s jinými typy fondů uzlů.

Další informace o upgradu najdete v tématech Upgrade clusteru AKS a příkazu Azure CLI az aks upgrade.

Maximální cena za spotový bazén

Ceny spotových instancí se liší podle oblasti a skladové položky. Další informace najdete v tématu Ceny pro Linux a Windows.

U proměnných cen máte možnost nastavit maximální cenu v amerických dolarech (USD) s použitím až pěti 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 -1, instance se nevyřadí na základě ceny. Cena za instanci bude aktuální cena spotu nebo cena za standardní instanci (podle toho, co je nižší), pokud je k dispozici kapacita a kvóta.

Další kroky

V tomto článku jste zjistili, jak přidat fond spotových uzlů do clusteru AKS. Další informace o tom, jak řídit pody napříč fondy uzlů, najdete v tématu Osvědčené postupy pro pokročilé funkce plánovače v AKS.