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

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

Fond spotových uzlů je fond uzlů zálohovaný škálovací sadou spotových virtuálních počítačů Azure. 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 úlohy dávkového zpracování, vývojová a testovací prostředí, a velké výpočetní úlohy můžou být vhodnými kandidáty na plánování ve fondu spotových uzlů.

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 pro použití fondu spotových uzlů, musí cluster používat škálovací sady virtuálních počítačů pro fondy uzlů a nástroj pro vyrovnávání zatížení skladové položky 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 spotových uzlů nemůže být výchozím fondem uzlů, dá se použít jenom jako sekundární fond.
  • Fondy řídicí roviny a uzlů nemůžete upgradovat současně. Pokud chcete upgradovat řídicí rovinu a zbývající fondy uzlů najednou, musíte je upgradovat samostatně nebo odebrat fond spotových uzlů.
  • Fond spotových uzlů musí používat škálovací sady virtuálních počítačů.
  • Nemůžete změnit ScaleSetPriority ani SpotMaxPrice po vytvoření.
  • Při nastavování SpotMaxPricemusí být hodnota -1 nebo kladná hodnota s až pěti desetinnými místy.
  • Fond spotových uzlů má kubernetes.azure.com/scalesetpriority:spot popisek, kubernetes.azure.com/scalesetpriority=spot:NoSchedule taint a systémové pody mají anti-spřažení.
  • Abyste mohli plánovat úlohy ve fondu spotových uzlů, musíte přidat odpovídající tolerance a spřažení.

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

Při přidávání fondu spotových uzlů do existujícího clusteru musí být cluster s povoleným více fondy uzlů. Když vytvoříte cluster AKS s povoleným více fondy uzlů, ve výchozím nastavení vytvoříte fond priorityRegular uzlů. Chcete-li přidat fond spotových uzlů, je nutné zadat Spot jako hodnotu pro priority. 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í prioritySpotaz aks nodepool add příkazu.

    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
    

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řazení na Delete, uzly v podkladové škálovací sadě fondu uzlů se odstraní, když se vyřazuje.

Můžete také nastavit zásadu vyřazení na Deallocate, což znamená, že uzly v podkladové škálovací sadě jsou při vyřazení nastaveny na zastavený uvolněný stav. Uzly v zastaveném uvolněné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 eviction-policy hodnoty je možné nastavit pouze při vytváření fondu uzlů. Tyto hodnoty nelze později aktualizovat.

Předchozí příkaz také umožňuje automatické škálování clusteru, které doporučujeme používat s fondy spotových uzlů. 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ů spotových uzlů bude automatické škálování clusteru vertikálně navýšit kapacitu počtu uzlů po vyřazení, 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é

Naplánujte pouze úlohy ve fondech spotových uzlů, které můžou zpracovávat přerušení, jako jsou úlohy dávkového zpracování a testovací prostředí. Doporučujeme nastavit tainty a tolerance ve fondu spotových uzlů, abyste zajistili, že ve fondu spotových uzlů jsou naplánované jenom úlohy, které dokážou zpracovat vyřazení uzlů. Například výše uvedený příkaz přidá taint , kubernetes.azure.com/scalesetpriority=spot:NoScheduletakže na tomto uzlu jsou naplánované pouze pody s odpovídajícími tolerancemi.

Ověření fondu spotových uzlů

  • Pomocí příkazu ověřte, že byl fond uzlů přidánaz aks nodepool show, a ověřte, že je Spot.scaleSetPriority

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

Naplánování spuštění podu na spotovém uzlu

Pokud chcete naplánovat spuštění podu na spotovém uzlu, můžete přidat spřažení tolerace a uzlu, které odpovídá taintu použitému na spotovém uzlu.

Následující příklad ukazuje část souboru YAML, která definuje tolerance odpovídající kubernetes.azure.com/scalesetpriority=spot:NoSchedule taintu a spřažení uzlu odpovídající kubernetes.azure.com/scalesetpriority=spot popisku použitému v předchozím kroku s requiredDuringSchedulingIgnoredDuringExecution pravidly spřažení uzlů a preferredDuringSchedulingIgnoredDuringExecution spřažení uzlů:

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 tímto tolerací a spřažením uzlů, Kubernetes úspěšně naplánuje pod na uzlech s použitým taintem a popiskem. 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ýt spot.
  • Uzel přednostně popisek s klíčem another-node-label-keya hodnota tohoto popisku musí být another-node-label-value.

Další informace najdete v tématu Přiřazení podů k uzlům.

Upgrade fondu 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 spotových uzlů nejsou k dispozici žádné přepětí. Mimo tyto změny chování při upgradu fondů spotových uzlů je konzistentní s jinými typy 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 k dispozici kapacita a kvóta, cena instance bude nižší cenou aktuální ceny za spotovou instanci nebo pro standardní instanci.

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.