Share via


Utiliser le service Azure Spot Virtual Machines dans un cluster Azure Red Hat OpenShift (ARO)

Cet article fournit les informations nécessaires pour vous permettre de configurer votre cluster Azure Red Hat OpenShift (ARO) afin d’utiliser le service Azure Spot Virtual Machines.

L’utilisation de machines virtuelles Azure Spot vous permet de disposer de notre capacité inutilisée en réalisant des économies significatives. Dès qu’Azure aura besoin de récupérer la capacité, l’infrastructure Azure supprimera les machines virtuelles Azure Spot. Pour plus d’informations sur les instances spot, consultez Spot Virtual Machines.

Avant de commencer

Avant de commencer, assurez-vous que vous avez déployé un cluster Azure Red Hat Openshift. Si vous avez besoin d’un cluster ARO, consultez le Démarrage rapide ARO pour un cluster public, ou le tutoriel sur les clusters privés pour un cluster privé. Les étapes de configuration de votre cluster pour utiliser des machines virtuelles spot sont les mêmes pour les clusters publics et privés.

Un cluster ARO doit toujours avoir au moins trois nœuds Worker qui ne sont pas des machines virtuelles Spot et trois nœuds de contrôle. Un cluster ARO ne peut pas avoir de nœuds de contrôle basés sur des machines virtuelles spot.

Ajouter des machines virtuelles spot

La gestion des machines dans Azure Red Hat Openshift s’effectue à l’aide de MachineSet. Les ressources MachineSet sont des groupes de machines. Les MachineSets sont aux machines ce que les ReplicaSets sont aux pods. Si vous avez besoin de davantage de machines ou si vous devez en réduire l’échelle, modifiez le champ Réplicas sur le groupe de machines en fonction de vos besoins de calcul. Pour en savoir plus, consultez notre documentation OpenShift MachineSet

L’utilisation de machines virtuelles spot est spécifiée en ajoutant le champ spotVMOptions dans la spécification de modèle d’un MachineSet. Pour que ce MachineSet soit créé, nous allons effectuer les opérations suivantes :

  1. Obtenir une copie d’un MachineSet s’exécutant sur votre cluster.
  2. Créer une configuration MachineSet modifiée.
  3. Déployer ce MachineSet sur votre cluster

Tout d’abord, connectez-vous à votre cluster OpenShift à l’aide de l’interface de ligne de commande.

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

Ensuite, vous allez répertorier les MachineSets présents sur votre cluster. Un cluster par défaut dispose de trois MachineSets déployés :

oc get machinesets -n openshift-machine-api

Voici un exemple de sortie de cette commande :

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

Vous allez ensuite décrire le MachineSet déployé. Remplacez <le jeu> d’ordinateurs par l’un des Ensembles de machines répertoriés ci-dessus et affichez-le dans un fichier.

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

Vous devez modifier les paramètres suivants dans 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 (Ajoutez ce champ et définissez sa valeur sur {}.)

Vous trouverez ci-dessous un exemple abrégé de YAML Spot MachineSet qui met en évidence les principales modifications que vous devez apporter lors de la base d’un nouveau Spot MachineSet sur un MachineSet worker existant, y compris quelques informations supplémentaires pour le contexte. (L’exemple ne représente pas l’intégralité d’un MachineSet fonctionnel ; de nombreux champs ont été omis ci-dessous.)

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'

Une fois le fichier mis à jour, appliquez-le.

oc create -f spotmachineset.yaml

Pour vérifier que votre MachineSet a bien été créée, exécutez la commande suivante :

oc get machinesets -n openshift-machine-api

Voici un exemple de sortie. Votre MachineSet est prêt une fois que vous avez des machines dans l’état « Prêt ».

  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

Planifier des charges de travail interruptibles

Il est recommandé d’ajouter une teinte aux nœuds Spot pour empêcher la planification des nœuds non interrompts et d’ajouter des tolérances de cette teinte aux pods que vous souhaitez planifier. Vous pouvez teinter les nœuds via la spécification MachineSet.

Par exemple, vous pouvez ajouter le YAML suivant à spec.template.spec :

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

Cela empêche les pods d’être planifiés sur le nœud résultant, sauf s’ils ont eu une tolérance pour spot='true' la teinte, et il supprime tous les pods qui manquent de tolérance.

Pour en savoir plus sur l’application de teintes et de tolérances, consultez Contrôle du positionnement de pod à l’aide de teintes de nœud.

Quota

Les machines peuvent passer à un état d’échec en raison de problèmes de quota si le quota pour le type d’ordinateur que vous utilisez est trop faible pour un bref instant, même s’il devrait être suffisant (par exemple, un nœud est toujours supprimé lors de la création d’un autre). Pour cette raison, il est recommandé de définir un quota pour le type de machine que vous allez utiliser pour les instances Spot de façon à ce qu’il soit légèrement plus élevé que nécessaire (par 2*n, où n est le nombre de cœurs qu’une machine utilise). Cette surcharge évite d’avoir à réparer des machines défaillantes, ce qui nécessite toujours une intervention manuelle, même si elle est relativement simple.

Préparation du nœud

Comme expliqué dans la documentation de la machine virtuelle Spot liée ci-dessus, les machines virtuelles passent à l’état d’approvisionnement désalloué lorsqu’elles ne sont plus disponibles ou qu’elles ne sont plus disponibles au prix maximal spécifié.

Cela se traduit dans OpenShift par des nœuds dans l’état Non prêt. Les machines restent saines, en phase Approvisionnée en tant que nœud.

Ils retournent à être prêts une fois que les machines virtuelles sont à nouveau disponibles

Résolution des problèmes

Nœud bloqué dans l’état Non prêt, machine virtuelle sous-jacente libérée

Si un nœud est bloqué pendant une longue période dans l’état Non prêt après la désallocation de sa machine virtuelle, vous pouvez essayer de le supprimer ou de supprimer l’objet machine OpenShift correspondant.

Machine Spot bloquée dans l’état Échec

Si une machine (objet OpenShift) utilisant une machine virtuelle Spot est bloquée dans l’état Échec, essayez de la supprimer manuellement. S’il ne peut pas être supprimé en raison d’un 403, car la machine virtuelle n’existe plus, modifiez l’ordinateur et supprimez les finaliseurs.