Sdílet prostřednictvím


Použití spotových virtuálních počítačů Azure v clusteru Azure Red Hat OpenShift (ARO)

Tento článek obsahuje nezbytné podrobnosti, které vám umožní nakonfigurovat cluster Azure Red Hat OpenShift (ARO) tak, aby používal spotové virtuální počítače Azure.

Použití spotových virtuálních počítačů Azure vám umožňuje využít výhod naší nevyužité kapacity za významné úspory nákladů. V každém okamžiku, kdy Azure potřebuje kapacitu zpět, infrastruktura Azure vyřadí spotové virtuální počítače Azure. Další informace o spotových instancích najdete v tématu Spot Virtual Machines.

Než začnete

Než začnete, ujistěte se, že máte nasazený cluster Azure Red Hat Openshift. Pokud potřebujete cluster ARO, přečtěte si rychlý start ARO pro veřejný cluster nebo kurz privátního clusteru pro privátní cluster. Postup konfigurace clusteru pro použití spotových virtuálních počítačů je stejný pro privátní i veřejné clustery.

Cluster ARO by měl mít vždy aspoň tři pracovní uzly, které nejsou spotové virtuální počítače, a tři řídicí uzly. Cluster ARO nemůže mít žádné řídicí uzly založené na virtuálních počítačích.

Přidání spotových virtuálních počítačů

Správa počítačů v Azure Red Hat Openshift se provádí pomocí MachineSetu. Prostředky MachineSet jsou skupiny počítačů. MachineSets jsou na počítače, protože repliky jsou pody. Pokud potřebujete více počítačů nebo je musíte vertikálně snížit, změňte pole Repliky v sadě počítačů tak, aby vyhovovalo vašim potřebám výpočetních prostředků. Další informace najdete v naší dokumentaci k OpenShift MachineSet.

Použití spotových virtuálních počítačů je určeno přidáním spotVMOptions pole v rámci specifikace šablony MachineSet. Abychom tuto sadu MachineSet vytvořili, provedeme následující:

  1. Získejte kopii machineset spuštěné v clusteru.
  2. Vytvořte upravenou konfiguraci MachineSet.
  3. Nasazení této sady počítačů do clusteru

Nejprve se připojte ke clusteru OpenShift pomocí rozhraní příkazového řádku.

oc login $apiServer -u kubeadmin -p <kubeadmin password>

V dalším kroku vypíšete machinesety v clusteru. Výchozí cluster bude mít nasazené 3 sady počítačů:

oc get machinesets -n openshift-machine-api

Následující příklad ukazuje ukázkový výstup z tohoto příkazu:

NAME                                    DESIRED   CURRENT   READY   AVAILABLE   AGE
aro-cluster-5t2dj-worker-eastus1   1         1         1       1           2d22h
aro-cluster-5t2dj-worker-eastus2   1         1         1       1           2d22h
aro-cluster-5t2dj-worker-eastus3   1         1         1       1           2d22h

Dále popíšete nasazenou sadu počítačů. Nahraďte <sadu počítačů některou z výše uvedených sad MachineSet> a vypíšete ji do souboru.

oc get machineset <machineset> -n openshift-machine-api -o yaml > spotmachineset.yaml

V sadě MachineSet budete muset změnit následující parametry:

  • metadata.name
  • spec.selector.matchLabels.machine.openshift.io/cluster-api-machineset
  • spec.template.metadata.labels.machine.openshift.io/cluster-api-machineset
  • spec.template.spec.providerSpec.value.spotVMOptions (Přidejte toto pole a nastavte ho na {}.)

Níže je zkrácený příklad YAML spotové sady počítačů, který zvýrazňuje klíčové změny, které je potřeba provést při založit novou spotovou sadu machineset na existující machineset pracovního procesu, včetně dalších informací pro kontext. (Příklad nepředstavuje celou funkční sadu MachineSet. Mnoho polí bylo vynecháno níže.)

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  name: aro-cluster-abcd1-spot-eastus
spec:
  replicas: 2
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: aro-cluster-abcd1
      machine.openshift.io/cluster-api-machineset: aro-cluster-abcd1-spot-eastus
  template:
    metadata:
        machine.openshift.io/cluster-api-machineset: aro-cluster-abcd1-spot-eastus
    spec:
      providerSpec:
        value:
          spotVMOptions: {}
      taints:
        - effect: NoExecute
          key: spot
          value: 'true'

Po aktualizaci souboru ho použijte.

oc create -f spotmachineset.yaml

Pokud chcete ověřit úspěšné vytvoření sady MachineSet, spusťte následující příkaz:

oc get machinesets -n openshift-machine-api

Tady je ukázkový výstup. Jakmile budete mít počítače ve stavu Připraveno, vaše sada Machineset je připravená.

  NAME                                    DESIRED   CURRENT   READY   AVAILABLE   AGE
aro-cluster-5t2dj-worker-eastus1           1         1         1       1           3d1h
aro-cluster-5t2dj-worker-eastus2           1         1         1       1           3d1h
aro-cluster-5t2dj-worker-eastus3           1         1         1       1           3d1h
spot                                       1         1         1       1           2m47s

Plánování přerušitelných úloh

Doporučujeme přidat do spotových uzlů taint, aby se zabránilo naplánování nerušitelných uzlů a přidání tolerací tohoto taintu do libovolných podů, které na nich chcete naplánovat. Uzly můžete taintovat pomocí specifikace MachineSet.

Můžete například přidat následující YAML do spec.template.spec:

     taints:
        - effect: NoExecute
          key: spot
          value: 'true'

To zabrání naplánování podů na výsledném uzlu, pokud neměli tolerance pro spot='true' taint, a vyřadili by všechny pody, které nemají tuto tolerance.

Další informace o použití taintů a tolerance najdete v tématu Řízení umístění podů pomocí taintů uzlů.

Kvóta

Počítače můžou kvůli problémům s kvótami přejít do stavu selhání, pokud je kvóta pro typ počítače, který používáte, příliš nízká, a to ani v případě, že by nakonec měla stačit (například jeden uzel se stále odstraňuje, když se vytváří jiný). Z tohoto důvodu se doporučuje nastavit kvótu pro typ počítače, který budete používat pro spotové instance, aby byly mírně vyšší, než by mělo být potřeba (možná o 2*n, kde n je počet jader používaných počítačem). Tato režie by se vyhnula nápravě neúspěšných počítačů, což, i když relativně jednoduché, je stále ruční zásah.

Připravenost uzlů

Jak je vysvětleno v dokumentaci k spotovým virtuálním počítačům, které jsou propojené výše, virtuální počítače přejdou do stavu uvolněného zřizování, pokud už nejsou dostupné nebo už nejsou dostupné za stanovenou maximální cenu.

To se projeví v OpenShiftu jako nepřipravené uzly. Počítače zůstanou ve stavu v pořádku ve fázi Zřízené jako uzel.

Jakmile budou virtuální počítače znovu dostupné, vrátí se k připravenosti.

Řešení problému

Uzel se zablokoval ve stavu Nepřipraveno, základní virtuální počítač se zrušil

Pokud se uzel po uvolnění virtuálního počítače zablokuje po dlouhou dobu v nepřipraveném stavu, můžete zkusit ho odstranit nebo odstranit odpovídající objekt počítače OpenShift.

Spotový počítač zablokovaný ve stavu selhání

Pokud je počítač (objekt OpenShift), který používá spotový virtuální počítač, zablokovaný ve stavu selhání, zkuste ho odstranit ručně. Pokud se nedá odstranit kvůli 403, protože virtuální počítač už neexistuje, upravte počítač a odeberte finalizátory.