Używanie maszyn wirtualnych typu spot platformy Azure w klastrze usługi Azure Red Hat OpenShift (ARO)

Ten artykuł zawiera niezbędne szczegóły, które umożliwiają skonfigurowanie klastra Azure Red Hat OpenShift (ARO) do korzystania z maszyn wirtualnych typu spot platformy Azure.

Korzystanie z maszyn wirtualnych typu spot platformy Azure umożliwia korzystanie z nieużywanej pojemności przy znacznych oszczędnościach. W dowolnym momencie, gdy platforma Azure potrzebuje pojemności z powrotem, infrastruktura platformy Azure wykluczy maszyny wirtualne typu spot platformy Azure. Aby uzyskać więcej informacji na temat wystąpień typu spot, zobacz Maszyny wirtualne typu spot.

Zanim rozpoczniesz

Przed rozpoczęciem upewnij się, że wdrożono klaster usługi Azure Red Hat Openshift. Jeśli potrzebujesz klastra usługi ARO, zobacz przewodnik Szybki start usługi ARO dla klastra publicznego lub samouczek dotyczący klastra prywatnego dla klastra prywatnego. Kroki konfigurowania klastra pod kątem używania maszyn wirtualnych typu Spot są takie same zarówno w przypadku klastrów prywatnych, jak i publicznych.

Klaster usługi ARO powinien zawsze mieć co najmniej trzy węzły robocze, które nie są maszynami wirtualnymi typu spot i trzema węzłami sterowania. Klaster ARO nie może mieć żadnych węzłów sterowania opartych na maszynie wirtualnej typu spot.

Dodawanie maszyn wirtualnych typu spot

Zarządzanie maszynami w usłudze Azure Red Hat Openshift odbywa się przy użyciu zestawu MachineSet. Zasoby zestawu maszyn to grupy maszyn. Zestawy maszyn to maszyny, ponieważ zestawy replik to zasobniki. Jeśli potrzebujesz więcej maszyn lub musisz je skalować w dół, zmień pole Repliki na maszynie, aby spełniało potrzeby obliczeniowe. Aby dowiedzieć się więcej, zapoznaj się z naszą dokumentacją platformy OpenShift MachineSet

Użycie maszyn wirtualnych typu spot jest określane przez dodanie spotVMOptions pola w specyfikacji szablonu zestawu maszyn. Aby utworzyć ten zestaw MachineSet, wykonaj następujące elementy:

  1. Pobierz kopię zestawu MachineSet uruchomionego w klastrze.
  2. Utwórz zmodyfikowaną konfigurację zestawu maszyn.
  3. Wdrażanie tego zestawu maszyn w klastrze

Najpierw połącz się z klastrem OpenShift przy użyciu interfejsu wiersza polecenia.

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

Następnie wyświetlisz listę zestawów MachineSet w klastrze. Domyślny klaster będzie miał wdrożone 3 zestawy Maszyn:

oc get machinesets -n openshift-machine-api

Poniżej przedstawiono przykładowe dane wyjściowe z tego polecenia:

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

Następnie opiszesz wdrożony zestaw MachineSet. Zastąp zestaw <> maszyn jednym z zestawów maszyn wymienionych powyżej i wyprowadź go do pliku.

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

Musisz zmienić następujące parametry w zestawie MachineSet:

  • 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 (Dodaj to pole i ustaw je na {}.)

Poniżej znajduje się skrócony przykład kodu YAML zestawu maszyn typu spot, który wyróżnia kluczowe zmiany, które należy wprowadzić podczas tworzenia nowego zestawu maszyn typu spot na istniejącym zestawie maszyn roboczych, w tym kilka dodatkowych informacji na potrzeby kontekstu. (Przykład nie reprezentuje całego, funkcjonalnego zestawu MachineSet; wiele pól zostało pominiętych poniżej).

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 zaktualizowaniu pliku zastosuj go.

oc create -f spotmachineset.yaml

Aby sprawdzić, czy zestaw MachineSet został pomyślnie utworzony, uruchom następujące polecenie:

oc get machinesets -n openshift-machine-api

Oto przykładowe dane wyjściowe. Zestaw maszyn jest gotowy po utworzeniu maszyn w stanie "Gotowe".

  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

Planowanie przerywanych obciążeń

Zaleca się dodanie defektu do węzłów typu Spot, aby zapobiec zaplanowaniu na nich niezwiązanych z przerwaniem węzłów oraz dodać tolerancje tego defektu do wszystkich zasobników, które mają być zaplanowane na nich. Węzły można za pomocą specyfikacji Zestawu maszyn.

Możesz na przykład dodać następujący kod YAML do pliku spec.template.spec:

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

Zapobiega to zaplanowaniu zasobników w węźle wynikowym, chyba że mieli tolerancję spot='true' dla defektu, i wykluczałoby to wszelkie zasobniki, które nie mają tej tolerancji.

Aby dowiedzieć się więcej na temat stosowania defektów i tolerancji, przeczytaj Temat Kontrolowanie umieszczania zasobników przy użyciu defektów węzłów.

Norma

Maszyny mogą przechodzić w stan niepowodzenia z powodu problemów z limitem przydziału, jeśli limit przydziału używanego typu maszyny jest zbyt niski przez krótki moment, nawet jeśli w końcu powinien być wystarczający (na przykład jeden węzeł nadal jest usuwany podczas tworzenia innego). W związku z tym zaleca się ustawienie limitu przydziału dla typu maszyny, którego użyjesz, aby wystąpienia typu spot były nieco wyższe niż powinny być potrzebne (może do 2*n, gdzie n jest liczbą rdzeni używanych przez maszynę). To obciążenie pozwoliłoby uniknąć konieczności usunięcia awarii maszyn, które, choć stosunkowo proste, są nadal interwencją ręczną.

Gotowość węzła

Jak wyjaśniono w powyższej dokumentacji maszyny wirtualnej typu spot, maszyny wirtualne przechodzą do stanu aprowizacji cofniętego przydziału, gdy nie są już dostępne lub nie są już dostępne w określonej cenie maksymalnej.

Spowoduje to manifest w rozwiązaniu OpenShift jako węzły Nie gotowe . Maszyny pozostaną w dobrej kondycji w fazie Aprowizowanie jako węzeł.

Powrócą one do gotowości po ponownym udostępnieniu maszyn wirtualnych

Rozwiązywanie problemów

Węzeł zablokowany w stanie Brak gotowości, cofnięto przydział podstawowej maszyny wirtualnej

Jeśli węzeł jest zablokowany przez długi czas w stanie Nie wszystko gotowe po cofnięciu przydziału maszyny wirtualnej, możesz spróbować go usunąć lub usunąć odpowiadający mu obiekt maszyny OpenShift.

Maszyna typu spot zablokowana w stanie Niepowodzenie

Jeśli maszyna (obiekt OpenShift), która używa maszyny wirtualnej typu spot, jest zablokowana w stanie Niepowodzenie, spróbuj usunąć ją ręcznie. Jeśli nie można go usunąć z powodu błędu 403, ponieważ maszyna wirtualna już nie istnieje, zmodyfikuj maszynę i usuń finalizatory.