Cette page explique comment exécuter des charges de travail tolérantes aux pannes, sans état ou par lot à moindre coût en utilisant des Spot VM sur vos clusters et vos pools de nœuds Google Kubernetes Engine (GKE).
Présentation
Les VM spot sont des machines virtuelles (VM) Compute Engine dont le prix est inférieur à celui des VM standards par défaut et qui n'offrent aucune garantie de disponibilité. Les VM spot offrent les mêmes types de machines et les mêmes options que les VM Compute Engine standards. Compute Engine peut récupérer des Spot VM à tout moment en raison d'événements système, tels que la nécessité de disposer de ressources pour les VM standards.
Pour en savoir plus sur les Spot VM dans GKE, consultez la page Spot VM.
Les Spot VM remplacent les VM préemptives pour exécuter des charges de travail sans état, par lots ou tolérantes aux pannes. Contrairement aux VM préemptives qui expirent au bout de 24 heures, les Spot VM n'ont pas de délai d'expiration. Les Spot VM sont arrêtées lorsque Compute Engine a besoin des ressources pour exécuter des VM standards.
Les VM Spot sont également compatibles avec les clusters GKE Autopilot via les pods spot. Avec les pods Spot, Autopilot planifie et gère automatiquement les charges de travail sur les Spot VM.
Limites
- Les Spot VM ne sont pas compatibles avec les pools de nœuds Windows Server.
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser la Google Cloud CLI pour cette tâche, installez et initialisez la gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la commande
gcloud components update. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.
Provisionner des Spot VM dans GKE
Vous pouvez provisionner des Spot VM en créant un cluster qui les utilise pour le pool de nœuds par défaut. Vous pouvez également créer un pool de nœuds qui utilise des Spot VM.
Utilisez la gcloud CLI pour définir les paramètres d'arrêt progressif des Spot VM. Pour en savoir plus sur la possibilité de définir les paramètres d'arrêt progressif, une fonctionnalité disponible en version bêta, consultez Arrêt et arrêt progressif des Spot VM.
Créer un cluster avec des Spot VM
Vous pouvez créer un cluster à l'aide de Spot VM avec la Google Cloud CLI ou la Google Cloud console.
gcloud
Créez un cluster qui utilise des VM Spot dans le pool de nœuds par défaut au lieu de VM standards:
gcloud container clusters create CLUSTER_NAME \
--spot
[--system-config-from-file=SYSTEM_CONFIG_PATH]
Remplacez CLUSTER_NAME par le nom de votre nouveau cluster.
Si vous souhaitez définir les paramètres d'arrêt progressif
(bêta) pour le
pool de nœuds par défaut, remplacez SYSTEM_CONFIG_PATH par
le chemin d'accès au fichier contenant votre kubelet configuration. Pour en savoir plus, consultez Arrêt progressif des Spot VM dans
GKE.
Vous pouvez également mettre à jour ces paramètres après la création du pool de nœuds. Toutefois,
GKE doit recréer les
nœuds
pour appliquer les modifications.
Console
Pour créer un cluster avec un pool de nœuds à l'aide de VM Spot, procédez comme suit:
Dans la Google Cloud console, accédez à la page Créer un cluster Kubernetes.
Dans le menu de navigation, dans la section Pools de nœuds, cliquez sur le nom du pool de nœuds que vous souhaitez configurer, puis sur Nœuds.
Cochez la case Activer les Spot VM.
Configurez le cluster selon vos besoins, puis cliquez sur Créer.
Créer un pool de nœuds avec des Spot VM
Vous pouvez créer des pools de nœuds à l'aide de Spot VM avec la gcloud CLI ou la Google Cloud console. Vous ne pouvez activer des VM Spot que sur les nouveaux pools de nœuds. Vous ne pouvez pas activer ni désactiver des VM Spot sur des pools de nœuds existants.
gcloud
Créez un pool de nœuds à l'aide de VM Spot :
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--spot
[--system-config-from-file=SYSTEM_CONFIG_PATH]
Remplacez POOL_NAME par le nom de votre nouveau pool de nœuds.
Si vous souhaitez définir les paramètres d'arrêt progressif
(bêta), remplacez
SYSTEM_CONFIG_PATH par le chemin d'accès au fichier
contenant votre kubelet configuration. Pour en savoir plus, consultez Arrêt progressif des Spot VM dans
GKE.
Vous pouvez également mettre à jour ces paramètres après la création du pool de nœuds. Toutefois,
GKE doit recréer les
nœuds
pour appliquer les modifications.
Console
Pour créer un pool de nœuds à l'aide de VM Spot, procédez comme suit:
Accédez à la page Google Kubernetes Engine dans la Google Cloud console.
Dans la liste des clusters, cliquez sur le nom du cluster que vous souhaitez modifier.
Cliquez sur l'onglet Nœuds.
Cliquez sur Créer un pool de nœuds géré par l'utilisateur.
Dans le menu de navigation, cliquez sur Nœuds.
Cochez la case Activer les Spot VM.
Configurez le pool de nœuds selon vos besoins, puis cliquez sur Créer.
Planifier des charges de travail sur des Spot VM
GKE ajoute les libellés cloud.google.com/gke-spot=true et cloud.google.com/gke-provisioning=spot (pour les nœuds exécutant la version 1.25.5-gke.2500 de GKE ou une version ultérieure) aux nœuds qui utilisent des VM Spot. Vous pouvez filtrer ce libellé dans la spécification de pod à l'aide du champ nodeSelector de la spécification de pod ou de l'affinité de nœud.
Dans l'exemple suivant, vous créez un cluster avec deux pools de nœuds, dont l'un utilise des Spot VM. Vous déployez ensuite une application nginx sans état sur les Spot VM, en utilisant un nodeSelector pour contrôler l'emplacement des pods par GKE.
Créez un cluster avec le pool de nœuds par défaut à l'aide de VM standards :
gcloud container clusters create CLUSTER_NAMERemplacez
CLUSTER_NAMEpar le nom de votre nouveau cluster.Obtenez les identifiants du cluster :
gcloud container clusters get-credentials CLUSTER_NAMECréez un pool de nœuds à l'aide de VM Spot :
gcloud container node-pools create POOL_NAME \ --num-nodes=1 \ --spotRemplacez
POOL_NAMEpar le nom de votre nouveau pool de nœuds.Enregistrez le fichier de manifeste suivant dans un fichier nommé
pi-app.yaml:apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: metadata: labels: app: pi spec: nodeSelector: cloud.google.com/gke-spot: "true" terminationGracePeriodSeconds: 25 containers: - name: pi image: perl:5.34.0 command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never backoffLimit: 4Dans ce fichier manifeste, le champ
nodeSelectorindique à GKE de ne planifier des pods que sur les nœuds qui utilisent des Spot VM.Appliquez le fichier manifeste à votre cluster :
kubectl apply -f pi-app.yamlDécrivez le pod :
kubectl describe pod piLe résultat ressemble à ce qui suit :
Name: pi-kjbr9 Namespace: default Priority: 0 Node: gke-cluster-2-spot-pool-fb434072-44ct ... Labels: app=pi job-name=pi Status: Succeeded ... Controlled By: Job/pi Containers: ... Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: ... Node-Selectors: cloud.google.com/gke-spot=true Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 4m3s default-scheduler Successfully assigned default/pi-kjbr9 to gke-cluster-2-spot-pool-fb434072-44ct Normal Pulling 4m2s kubelet Pulling image "perl:5.34.0" Normal Pulled 3m43s kubelet Successfully pulled image "perl:5.34.0" in 18.481761978s Normal Created 3m43s kubelet Created container pi Normal Started 3m43s kubelet Started container piLe champ
Nodeindique que GKE ne programme vos pods que sur les nœuds qui utilisent des VM Spot.
Utiliser des rejets et des tolérances pour les Spot VM
Il est recommandé de créer des clusters avec au moins un pool de nœuds sans VM Spot, sur lequel vous pouvez placer des charges de travail système telles que DNS. Vous pouvez utiliser des rejets de nœuds et les tolérances correspondantes pour indiquer à GKE d'éviter de placer certaines charges de travail sur des VM Spot.
Pour créer un pool de nœuds avec des nœuds qui utilisent des VM Spot et qui ont des rejets de nœuds, utilisez l'option
--node-taintslors de la création du pool de nœuds:gcloud container node-pools create POOL_NAME \ --node-taints=cloud.google.com/gke-spot="true":NoSchedule --spotPour ajouter la tolérance correspondante aux pods que vous souhaitez planifier sur des VM Spot, modifiez vos déploiements et ajoutez les éléments suivants à votre spécification de pod:
tolerations: - key: cloud.google.com/gke-spot operator: Equal value: "true" effect: NoScheduleGKE ne programme que les pods avec cette tolérance sur les Spot VM avec le rejet de nœud ajouté.
Étapes suivantes
- Découvrez comment exécuter une application GKE sur des VM Spot avec des nœuds à la demande en tant que remplacement.
- Apprenez-en plus sur les Spot VM dans GKE.
- Suivez un tutoriel sur le déploiement d'une charge de travail par lot à l'aide de Spot VM dans GKE.