Delen via


Azure Spot Virtual Machines gebruiken in een Azure Red Hat OpenShift-cluster (ARO)

Dit artikel bevat de benodigde details waarmee u uw Azure Red Hat OpenShift-cluster (ARO) kunt configureren voor het gebruik van Azure Spot Virtual Machines.

Met azure Spot Virtual Machines kunt u profiteren van onze ongebruikte capaciteit tegen aanzienlijke kostenbesparingen. Op elk moment waarop Azure de capaciteit terug nodig heeft, wordt de Azure-infrastructuur azure Spot Virtual Machines verwijderd. Zie Spot Virtual Machines voor meer informatie over spot-exemplaren.

Voordat u begint

Voordat u aan de slag gaat, moet u ervoor zorgen dat u een Azure Red Hat Openshift-cluster hebt geïmplementeerd. Als u een ARO-cluster nodig hebt, raadpleegt u de ARO-quickstart voor een openbaar cluster of de zelfstudie over een privécluster. De stappen voor het configureren van uw cluster voor het gebruik van spot-VM's zijn hetzelfde voor zowel privé- als openbare clusters.

Een ARO-cluster moet altijd ten minste drie werkknooppunten hebben die niet-spot-VM's zijn en drie besturingsknooppunten. Een ARO-cluster kan geen spot-VM-besturingsknooppunten hebben.

Spot-VM's toevoegen

Machinebeheer in Azure Red Hat Openshift wordt uitgevoerd met behulp van MachineSet. MachineSet-resources zijn groepen machines. MachineSets zijn van machines, omdat ReplicaSets zich op pods bevinden. Als u meer machines nodig hebt of omlaag moet schalen, wijzigt u het veld Replica's op de computerset om te voldoen aan uw rekenbehoefte. Raadpleeg onze OpenShift MachineSet-documentatie voor meer informatie

Het gebruik van spot-VM's wordt opgegeven door het spotVMOptions veld toe te voegen binnen de sjabloonspecificatie van een MachineSet. Om deze MachineSet te maken, doen we het volgende:

  1. Haal een kopie op van een MachineSet die wordt uitgevoerd op uw cluster.
  2. Maak een gewijzigde MachineSet-configuratie.
  3. Deze MachineSet implementeren in uw cluster

Maak eerst verbinding met uw OpenShift-cluster met behulp van de CLI.

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

Vervolgens vermeldt u de MachineSets in uw cluster. Voor een standaardcluster zijn drie MachineSets geïmplementeerd:

oc get machinesets -n openshift-machine-api

Hieronder ziet u een voorbeelduitvoer van deze opdracht:

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

Vervolgens beschrijft u de geïmplementeerde MachineSet. Vervang <de machineset> door een van de hierboven vermelde MachineSets en voer deze uit naar een bestand.

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

U moet de volgende parameters in de MachineSet wijzigen:

  • 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 (Voeg dit veld toe en stel dit in op {}.)

Hieronder ziet u een verkort voorbeeld van Spot MachineSet YAML waarin de belangrijkste wijzigingen worden gemarkeerd die u moet aanbrengen bij het baseren van een nieuwe Spot MachineSet op een bestaande werkrolmachineset, inclusief aanvullende informatie voor context. (Het voorbeeld vertegenwoordigt geen volledige, functionele MachineSet; veel velden zijn hieronder weggelaten.)

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'

Nadat het bestand is bijgewerkt, past u het toe.

oc create -f spotmachineset.yaml

Voer de volgende opdracht uit om te controleren of uw MachineSet is gemaakt:

oc get machinesets -n openshift-machine-api

Hier volgt een voorbeelduitvoer. Uw Machineset is klaar zodra u machines in de status Gereed hebt.

  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

Onderbreekbare workloads plannen

Het is raadzaam om een taint toe te voegen aan de Spot-knooppunten om te voorkomen dat niet-onderbrekende knooppunten erop worden gepland en om toleranties van deze taint toe te voegen aan eventuele pods die u erop wilt plannen. U kunt de knooppunten tainten via de MachineSet-specificatie.

U kunt bijvoorbeeld de volgende YAML toevoegen aan spec.template.spec:

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

Hiermee voorkomt u dat pods worden gepland op het resulterende knooppunt, tenzij ze een tolerantie voor spot='true' taint hadden en eventuele pods die die tolerantie missen, zouden verwijderen.

Voor meer informatie over het toepassen van taints en toleranties leest u De plaatsing van pods beheren met behulp van knooppunttaints.

Target

Machines kunnen een mislukte status krijgen vanwege quotumproblemen als het quotum voor het computertype dat u gebruikt, gedurende een kort moment te laag is, zelfs als dit uiteindelijk voldoende zou moeten zijn (bijvoorbeeld dat één knooppunt nog steeds wordt verwijderd wanneer er een ander wordt gemaakt). Daarom is het raadzaam om het quotum in te stellen voor het computertype dat u gebruikt voor Spot-exemplaren om iets hoger te zijn dan nodig is (misschien met 2*n, waarbij n het aantal kernen is dat door een computer wordt gebruikt). Deze overhead zou voorkomen dat mislukte machines moeten worden hersteld, die, hoewel relatief eenvoudig, nog steeds handmatige interventie is.

Gereedheid van knooppunten

Zoals wordt uitgelegd in de bovenstaande spot-VM-documentatie, gaan VM's naar de inrichtingsstatus Ongedaan maken wanneer ze niet meer beschikbaar zijn of niet meer beschikbaar zijn tegen de opgegeven maximumprijs.

Dit manifesteert zich in OpenShift als Niet-gereed knooppunten. De machines blijven in orde, in fase Ingericht als knooppunt.

Ze gaan terug naar Gereed zodra de VM's weer beschikbaar zijn

Probleemoplossing

Het knooppunt is vastgelopen in de status Niet gereed, de toewijzing van onderliggende VM is opgeheven

Als een knooppunt gedurende een lange periode vastloopt in de status Niet gereed nadat de toewijzing van de VM ongedaan is gemaakt, kunt u proberen het te verwijderen of het bijbehorende OpenShift-machineobject te verwijderen.

Spot-machine is vastgelopen in de status Mislukt

Als een machine (OpenShift-object) die gebruikmaakt van een spot-VM vastloopt in de status Mislukt, verwijdert u het handmatig. Als deze niet kan worden verwijderd vanwege een 403 omdat de VIRTUELE machine niet meer bestaat, bewerkt u de machine en verwijdert u de finalizers.