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 VM Spot 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 VM Spot dans GKE, consultez VM Spot.
Les VM Spot 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 VM Spot.
Limites
- Les VM Spot 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
- Pour utiliser Google Cloud CLI pour cette tâche, installez puis 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.
- Consultez la disponibilité des VM Spot avant de provisionner des ressources pour réduire le risque de rencontrer des erreurs de disponibilité des ressources.
Provisionner des VM Spot dans GKE
Vous pouvez provisionner des VM Spot en créant un cluster qui utilise des VM Spot pour le pool de nœuds par défaut. Vous pouvez également créer un pool de nœuds qui utilise des VM Spot.
Utilisez la console Google Cloud ou Google Cloud CLI pour définir les paramètres de l'arrêt progressif des VM Spot. Pour en savoir plus sur la possibilité de définir les paramètres d'arrêt progressif, consultez Arrêt et arrêt progressif des VM Spot.
Créer un cluster avec des VM Spot
Vous pouvez créer un cluster à l'aide de VM Spot avec la Google Cloud CLI ou la console Google Cloud .
Console
Pour créer un cluster avec un pool de nœuds à l'aide de VM Spot, procédez comme suit:
Dans la console Google Cloud , 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.
Pour Modèle de provisionnement, sélectionnez VM Spot.
Facultatif : pour configurer le délai de grâce avant l'arrêt des pods exécutés sur les nœuds de ce pool de nœuds, sélectionnez une valeur dans le menu déroulant Délai de grâce avant l'arrêt et, le cas échéant, saisissez une valeur dans le champ Délai de grâce avant l'arrêt des pods critiques (secondes). Si elles sont configurées, les valeurs sont stockées dans la configuration du système de nœuds, où vous pourrez les modifier ultérieurement, si nécessaire. Pour en savoir plus, consultez Arrêt et arrêt progressif des VM Spot.
Configurez le cluster selon vos besoins, puis cliquez sur Créer.
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 pour le pool de nœuds par défaut, remplacez SYSTEM_CONFIG_PATH par le chemin d'accès au fichier contenant votre configuration kubelet. Pour en savoir plus, consultez Arrêt progressif des VM Spot 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.
Créer un pool de nœuds avec des VM Spot
Vous pouvez créer des pools de nœuds à l'aide de VM Spot avec gcloud CLI ou la console Google Cloud . 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.
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 console Google Cloud .
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.
Pour Modèle de provisionnement, sélectionnez VM Spot.
Facultatif : Pour configurer la période d'arrêt progressif des pods s'exécutant sur les nœuds de ce pool de nœuds, sélectionnez une valeur dans le menu déroulant Période d'arrêt progressif et, le cas échéant, saisissez une valeur dans le champ Période d'arrêt progressif des pods critiques (en secondes). Si elles sont configurées, les valeurs sont stockées dans la configuration du système de nœuds, où vous pourrez les modifier ultérieurement, si nécessaire. Pour en savoir plus, consultez Arrêt et arrêt progressif des VM Spot.
Configurez le pool de nœuds selon vos besoins, puis cliquez sur Créer un pool de nœuds.
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 les éléments suivants :
POOL_NAME: nom du nouveau pool de nœuds.CLUSTER_NAME: nom du cluster
Si vous souhaitez définir les paramètres d'arrêt progressif, remplacez SYSTEM_CONFIG_PATH par le chemin d'accès au fichier contenant votre configuration kubelet. Pour en savoir plus, consultez Arrêt progressif des VM Spot 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.
Planifier des charges de travail sur des VM Spot
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 VM Spot. Vous déployez ensuite une application nginx sans état sur les VM Spot, 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 \ --cluster=CLUSTER_NAME \ --num-nodes=1 \ --spotRemplacez les éléments suivants :
POOL_NAME: nom du nouveau pool de nœuds.CLUSTER_NAME: nom du cluster
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 VM Spot.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 VM Spot
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 \ --cluster=CLUSTER_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 planifie que les pods avec cette tolérance sur les VM Spot 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 VM Spot dans GKE.
- Suivez un tutoriel sur le déploiement d'une charge de travail par lot à l'aide de VM Spot dans GKE.