Cette page explique comment créer et gérer des VM Spot, et inclut les sections suivantes :
- Créer, démarrer et identifier des VM Spot
- Détecter, gérer et tester la préemption des VM Spot
- Bonnes pratiques pour les VM Spot
Les VM Spot sont des instances de machine virtuelle (VM) qui utilisent le modèle de provisionnement Spot. Les VM Spot sont disponibles avec une remise allant jusqu'à 60% sur le prix à la demande des VM standards. Pour en savoir plus, consultez la page des tarifs. Toutefois, Compute Engine peut récupérer les ressources en préemptant des VM Spot à tout moment. Les VM Spot ne sont recommandées que pour les charges de travail tolérantes aux pannes et capables de résister à la préemption de VM.
Avant de commencer
- En savoir plus sur les VM Spot, en particulier sur les limites
- Vérifiez que vous disposez d'un quota suffisant pour les ressources que vous souhaitez demander. Pour en savoir plus, consultez Quotas d'allocation.
-
Si ce n'est pas déjà fait, configurez l'authentification.
L'authentification permet de valider votre identité pour accéder aux services et aux API Cloud de Confiance by S3NS . Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine en sélectionnant l'une des options suivantes :
Sélectionnez l'onglet correspondant à la façon dont vous prévoyez d'utiliser les exemples de cette page :
Console
Lorsque vous utilisez la console Cloud de Confiance pour accéder aux services et aux API Cloud de Confiance by S3NS , vous n'avez pas besoin de configurer l'authentification.
gcloud
-
Installez la Google Cloud CLI, puis connectez-vous à la gcloud CLI avec votre identité fédérée. Après vous être connecté, initialisez la Google Cloud CLI en exécutant la commande suivante :
gcloud init
-
- Définissez une région et une zone par défaut.
-
Installez la Google Cloud CLI.
-
Configurez la gcloud CLI afin d'utiliser votre identité fédérée.
Pour en savoir plus, consultez Se connecter à la gcloud CLI avec votre identité fédérée.
-
Créez des identifiants d'authentification locaux pour votre compte utilisateur :
gcloud auth application-default login
Si une erreur d'authentification est renvoyée, vérifiez que vous vous êtes connecté à la gcloud CLI avec votre identité fédérée.
Terraform
Pour utiliser les exemples Terraform de cette page dans un environnement de développement local, installez et initialisez la gcloud CLI, puis configurez les Identifiants par défaut de l'application avec vos identifiants utilisateur.
Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
REST
Pour utiliser les exemples API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à la gcloud CLI.
Installez la Google Cloud CLI, puis connectez-vous à la gcloud CLI avec votre identité fédérée.
Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Cloud de Confiance .
Rôles requis
Pour obtenir les autorisations nécessaires à la création d'une VM Spot, demandez à votre administrateur de vous attribuer le rôle IAM Administrateur d'instances Compute (v1) (roles/compute.instanceAdmin.v1) sur le projet.
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Ce rôle prédéfini contient les autorisations requises pour créer une VM Spot. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Les autorisations suivantes sont requises pour créer une VM Spot :
compute.instances.createsur le projet-
Pour créer la VM à l'aide d'une image personnalisée :
compute.images.useReadOnlysur l'image -
Pour créer la VM à l'aide d'un instantané :
compute.snapshots.useReadOnlysur l'instantané -
Pour créer la VM à l'aide d'un modèle d'instance :
compute.instanceTemplates.useReadOnlysur le modèle d'instance -
Pour spécifier un sous-réseau pour la VM :
compute.subnetworks.usesur le projet ou sur le sous-réseau choisi -
Pour spécifier une adresse IP statique pour la VM :
compute.addresses.usesur le projet -
Pour attribuer une adresse IP externe à la VM en cas d'utilisation d'un réseau VPC :
compute.subnetworks.useExternalIpsur le projet ou sur le sous-réseau choisi -
Pour attribuer un ancien réseau à la VM :
compute.networks.usesur le projet -
Pour attribuer une adresse IP externe à la VM en cas d'utilisation d'un ancien réseau :
compute.networks.useExternalIpsur le projet -
Pour définir les métadonnées d'instance de VM pour la VM :
compute.instances.setMetadatasur le projet -
Pour définir des tags pour la VM :
compute.instances.setTagssur la VM -
Pour définir des étiquettes pour la VM :
compute.instances.setLabelssur la VM -
Pour définir un compte de service que doit utiliser la VM :
compute.instances.setServiceAccountsur la VM -
Pour créer un disque pour la VM :
compute.disks.createsur le projet -
Pour associer un disque existant en mode lecture seule ou en mode lecture-écriture :
compute.disks.usesur le disque -
Pour associer un disque existant en mode lecture seule :
compute.disks.useReadOnlysur le disque
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Se préparer à créer des VM Spot
Avant de créer des VM Spot pour une charge de travail, procédez comme suit :
Configurez votre charge de travail pour gérer la préemption. Plus précisément, nous vous recommandons de préparer un script pour gérer la préemption, qui s'exécute dans le cadre de votre charge de travail ou qui est un fichier que vous pouvez ajouter aux métadonnées de la VM pour qu'il s'exécute lors de l'arrêt. Pour obtenir des instructions, consultez Gérer la préemption des VM Spot.
Nous vous recommandons vivement de consulter les données des VM Spot pour vous aider à choisir un type de machine et un emplacement. En sélectionnant un type de machine et un emplacement avec une plus grande disponibilité des ressources, vous pouvez augmenter vos chances d'éviter les erreurs de disponibilité des ressources et de bénéficier d'une durée de disponibilité plus longue avant la préemption.
Pour obtenir des données historiques sur la préemption et les tarifs, qui sont particulièrement utiles pour planifier des charges de travail à long terme, consultez Afficher le taux de préemption et les données tarifaires pour les VM Spot.
Pour obtenir des données de disponibilité actuelles, qui sont particulièrement utiles juste avant de créer des VM Spot pour des charges de travail à court terme, consultez Afficher la disponibilité des VM Spot.
Sélectionnez une méthode pour créer des VM Spot. Nous vous recommandons de sélectionner une méthode comme suit :
Si vous n'avez jamais créé de VM Spot ou si vous avez une charge de travail petite et à court terme, consultez Créer une VM Spot.
Si vous avez déjà créé des VM Spot et que vous souhaitez en créer plusieurs, par exemple pour une charge de travail volumineuse et à long terme, consultez Créer un groupe d'instances géré (MIG) qui utilise des VM Spot.
Si vous souhaitez créer et gérer des VM Spot avec des TPU, consultez Demander des VM Spot TPU.
Pour en savoir plus sur les recommandations concernant la création de VM Spot, consultez les bonnes pratiques.
Créer une VM Spot
Après avoir préparé la création de VM Spot, vous pouvez en créer une à l'aide de l'une des méthodes suivantes.
Console
Accédez à la page Créer une instance dans la console Cloud de Confiance .
Dans le volet Configuration de la machine, qui est ouvert par défaut, procédez comme suit :
- Dans la section Modèle de provisionnement, sélectionnez Spot dans la liste Modèle de provisionnement de VM. La section Paramètres avancés du modèle de provisionnement de VM se développe.
Dans la liste Durée de la notification de préemption, sélectionnez une option en fonction de la façon dont vous souhaitez gérer la préemption.
Si vous sélectionnez 120 secondes, assurez-vous de gérer la préemption dans votre charge de travail avant de créer une VM Spot. Par exemple, vérifiez que votre charge de travail inclut un script permettant d'enregistrer votre progression et qui attend d'être exécuté jusqu'à ce qu'une préemption soit détectée.
Si vous sélectionnez 0 seconde (par défaut), assurez-vous de gérer la préemption à l'aide d'un script d'arrêt. Avant de créer une VM Spot, créez un fichier contenant un script d'arrêt qui enregistre votre progression lorsque l'arrêt est dû à la préemption. Associez ce script d'arrêt comme expliqué dans une étape ultérieure.
Facultatif : Pour choisir l'action de terminaison qui se produit lorsque Compute Engine préempte la VM, dans la liste À l'arrêt de la VM, sélectionnez l'une des options suivantes :
- Pour arrêter la VM pendant la préemption, sélectionnez Arrêter (sélection par défaut).
- Pour supprimer la VM pendant la préemption, sélectionnez Supprimer.
Pour ajouter un script d'arrêt, procédez comme suit. Si vous avez sélectionné 0 seconde (par défaut) pour la Durée de la notification de préemption, cette étape est nécessaire pour gérer la préemption. Sinon, si vous avez sélectionné 120 secondes, cette étape est facultative.
- Dans le menu de navigation, cliquez sur Avancé.
- Dans la section Métadonnées, cliquez sur Ajouter un élément.
- Dans le champ Clé, saisissez
shutdown-scriptcomme clé de métadonnées. - Dans le champ Valeur, ajoutez le contenu d'un script d'arrêt qui gère la préemption. Pour obtenir un exemple de script d'arrêt, consultez Exemple de gestion de la préemption dans ce document.
Facultatif : spécifiez d'autres options de configuration. Pour en savoir plus, consultez Options de configuration lors de la création d'une instance.
Pour créer et démarrer la VM, cliquez sur Créer.
gcloud
Pour créer une VM à l'aide de gcloud CLI, utilisez la commande gcloud compute instances create.
Chaque fois que vous créez une VM, nous vous recommandons de spécifier un type de machine, un emplacement et une image d'OS.
Pour créer une VM Spot, incluez l'option --provisioning-model=SPOT.
Pour spécifier la durée de la notification de préemption, incluez l'indicateur --preemption-notice-duration et, si nécessaire, un script d'arrêt.
Vous pouvez également spécifier une action d'arrêt pour les VM Spot en incluant l'option --instance-termination-action.
gcloud compute instances create VM_NAME \
--machine-type=MACHINE_TYPE \
--zone=ZONE \
--image-family=IMAGE_FAMILY \
--image-project=IMAGE_PROJECT \
--provisioning-model=SPOT \
--instance-termination-action=TERMINATION_ACTION \
--preemption-notice-duration=PREEMPTION_NOTICE_DURATION \
--metadata shutdown-script=SHUTDOWN_SCRIPT
Remplacez les éléments suivants :
VM_NAME: nom de la nouvelle VM.MACHINE_TYPE: type de machine prédéfini ou personnalisé pour la nouvelle VM.ZONE: zone dans laquelle créer la VM. La zone doit également accepter le type de machine à utiliser pour la nouvelle VM.IMAGE_FAMILY: famille d'images. Cela permet de spécifier l'image d'OS non obsolète la plus récente. Par exemple, si vous spécifiezdebian-13, la dernière version de la famille d'images Debian 13 est utilisée. Pour en savoir plus sur l'utilisation des familles d'images, consultez la page Bonnes pratiques concernant les familles d'images.IMAGE_PROJECT: projet contenant l'image. Par exemple, si vous spécifiezdebian-13comme famille d'images, spécifiezdebian-cloudcomme projet d'image.TERMINATION_ACTION(facultatif) : spécifiez l'action de terminaison à effectuer lorsque Compute Engine préempte la VM, soitSTOP(comportement par défaut) soitDELETE.PREEMPTION_NOTICE_DURATION: indique si une durée de préavis de préemption doit être activée. Pour gcloud CLI, la valeur doit être120sou0s.Si vous spécifiez
120s, gérez la préemption dans votre charge de travail. (Vous pouvez également spécifier un script d'arrêt.)Si vous spécifiez
0s(valeur par défaut), gérez la préemption dans un script d'arrêt.
SHUTDOWN_SCRIPT: script d'arrêt.Si vous définissez
PREEMPTION_NOTICE_DURATIONsur0s(valeur par défaut), vous devez spécifier un script d'arrêt pour gérer la préemption. Pour savoir comment mettre en forme et spécifier un script d'arrêt, consultez Exécuter des scripts d'arrêt.Sinon, si vous ne souhaitez pas spécifier de script d'arrêt, vous pouvez supprimer l'option
--metadata shutdown-script.
Terraform
Vous pouvez utiliser une ressource Terraform pour créer une VM Spot à l'aide du bloc scheduling, comme illustré dans l'exemple suivant.
Pour ajouter un script d'arrêt pour gérer la préemption, ajoutez également un bloc metadata, comme indiqué dans Exécuter des scripts d'arrêt.
Pour obtenir un exemple de script d'arrêt, consultez Gérer la préemption dans ce document.
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez Commandes Terraform de base.
REST
Pour créer une VM à l'aide de l'API Compute Engine, utilisez la méthode instances.insert.
Chaque fois que vous créez une VM, nous vous recommandons de spécifier un type de machine, un emplacement et une image d'OS.
Pour créer une VM Spot, vous devez inclure le champ "provisioningModel": "SPOT".
Pour spécifier la durée de la notification de préemption, incluez le champ preemptionNoticeDuration.
Vous pouvez également spécifier une action d'arrêt pour les VM Spot en incluant le champ instanceTerminationAction.
POST https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "disks": [ { "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot": true } ], "scheduling": { "provisioningModel": "SPOT", "instanceTerminationAction": "TERMINATION_ACTION", "preemptionNoticeDuration": { "seconds": PREEMPTION_NOTICE_DURATION } }, "metadata": { "items": [ { "key": "shutdown-script", "value": "SHUTDOWN_SCRIPT" } ] } }
Remplacez les éléments suivants :
PROJECT_ID: ID du projet dans lequel créer la VM.ZONE: zone dans laquelle créer la VM. La zone doit également accepter le type de machine à utiliser pour la nouvelle VM.MACHINE_TYPE: type de machine prédéfini ou personnalisé pour la nouvelle VM.VM_NAME: nom de la nouvelle VM.IMAGE_PROJECT: projet contenant l'image. Par exemple, si vous spécifiezfamily/debian-13comme famille d'images, spécifiezdebian-cloudcomme projet d'image.IMAGE: spécifiez l'une des options suivantes :- Version spécifique d'une image publique. Par exemple, une image spécifique est
"sourceImage": "projects/debian-cloud/global/images/debian-13-trixie-v20260908"oùdebian-cloudcorrespond àIMAGE_PROJECT. - Une famille d'images.
Cette action crée la VM à partir de l'image de l'OS la plus récente et non obsolète.
Par exemple, si vous spécifiez
"sourceImage": "projects/debian-cloud/global/images/family/debian-13"oùdebian-clouda la valeurIMAGE_PROJECT, Compute Engine crée une VM à partir de la dernière version de l'image de l'OS dans la famille d'images Debian 13.
- Version spécifique d'une image publique. Par exemple, une image spécifique est
TERMINATION_ACTION(facultatif) : spécifiez l'action de terminaison à effectuer lorsque Compute Engine préempte la VM, soitSTOP(comportement par défaut) soitDELETE.PREEMPTION_NOTICE_DURATION: indique si une durée de préavis de préemption doit être activée. Pour REST, la valeur doit être120ou0.Si vous spécifiez
120, gérez la préemption dans votre charge de travail. (Vous pouvez également spécifier un script d'arrêt.)Si vous spécifiez
0(valeur par défaut), gérez la préemption dans un script d'arrêt.
SHUTDOWN_SCRIPT: script d'arrêt.Si vous définissez
PREEMPTION_NOTICE_DURATIONsur0(valeur par défaut), vous devez spécifier un script d'arrêt pour gérer la préemption. Pour savoir comment mettre en forme et spécifier un script d'arrêt, consultez Exécuter des scripts d'arrêt. Pour obtenir un exemple de script d'arrêt, consultez Exemple de gestion de la préemption dans ce document.Sinon, si vous ne souhaitez pas spécifier de script d'arrêt, vous pouvez supprimer le champ
metadataet ses sous-champs.
Pour en savoir plus sur les options que vous pouvez spécifier lors de la création d'une VM, consultez Options de configuration lors de la création d'une instance.
Démarrer les VM Spot
Comme les autres VM, les VM Spot démarrent lors de la création. De même, si les VM Spot sont arrêtées, vous pouvez redémarrer les VM pour qu'elles reprennent l'état RUNNING.
Vous pouvez arrêter et redémarrer les VM Spot préemptées autant de fois que vous le souhaitez tant qu'elles disposent d'une capacité suffisante.
Pour en savoir plus, consultez la page Cycle de vie des instances de VM.
Si Compute Engine arrête une ou plusieurs VM Spot dans un groupe d'instances géré soumis à l'autoscaling ou dans un cluster Google Kubernetes Engine (GKE), le groupe redémarre les VM lorsque les ressources sont à nouveau disponibles.
Identifier le modèle de provisionnement et l'action d'arrêt d'une VM
Identifiez le modèle de provisionnement d'une VM pour vérifier s'il s'agit d'une VM standard, d'une VM spot ou d'une VM préemptive. Pour une VM Spot, vous pouvez également identifier l'action d'arrêt. Vous pouvez identifier le modèle de provisionnement et l'action d'arrêt d'une VM en utilisant la consoleCloud de Confiance , gcloud CLI ou l'API Compute Engine.
Console
Accédez à la page Instances de VM.
Cliquez sur le nom de la VM que vous souhaitez modifier. La page Détails de l'instance de VM s'affiche.
Accédez à la section Gestion en bas de la page. Dans la sous-section Règles de disponibilité, vérifiez les options suivantes :
- Si le modèle de provisionnement de VM est défini sur Spot, alors la VM est une VM Spot.
- Le champ À l'arrêt de la VM indique l'action à effectuer lorsque Compute Engine préempte la VM, soit arrêter la VM, soit la supprimer.
- Sinon, si le modèle de provisionnement de VM est défini sur Standard ou — :
- Si l'option Préemption est définie sur Activé, alors la VM est une VM préemptive.
- Sinon, il s'agit d'une VM standard.
- Si le modèle de provisionnement de VM est défini sur Spot, alors la VM est une VM Spot.
gcloud
Pour décrire une VM à partir de la CLI gcloud, utilisez la commande gcloud compute instances describe :
gcloud compute instances describe VM_NAME
où VM_NAME est le nom de la VM à vérifier.
Dans la sortie, vérifiez le champ scheduling afin d'identifier la VM :
Si la sortie inclut le champ
provisioningModeldéfini surSPOT, comme ci-après, alors la VM est une VM Spot.... scheduling: ... provisioningModel: SPOT instanceTerminationAction: TERMINATION_ACTION ...
Où
TERMINATION_ACTIONindique l'action à effectuer lorsque Compute Engine préempte la VM, soit l'arrêter (STOP), soit la supprimer (DELETE). Si le champinstanceTerminationActionn'est pas renseigné, la valeur par défaut estSTOP.Dans le cas contraire, si la sortie inclut le champ
provisioningModeldéfini surstandardou si le champprovisioningModely est omis :- Si la sortie inclut le champ
preemptibledéfini surtrue, alors la VM est une VM préemptive. - Sinon, il s'agit d'une VM standard.
- Si la sortie inclut le champ
REST
Pour décrire une VM à partir de l'API Compute Engine, utilisez la méthode instances.get :
GET https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Remplacez les éléments suivants :
PROJECT_ID: ID du projet dans lequel se trouve la VM.ZONE: zone où se trouve la VM.VM_NAME: nom de la VM que vous souhaitez vérifier.
Dans la sortie, vérifiez le champ scheduling afin d'identifier la VM :
Si la sortie inclut le champ
provisioningModeldéfini surSPOT, comme ci-après, alors la VM est une VM Spot.{ ... "scheduling": { ... "provisioningModel": "SPOT", "instanceTerminationAction": "TERMINATION_ACTION" ... }, ... }Où
TERMINATION_ACTIONindique l'action à effectuer lorsque Compute Engine préempte la VM, soit l'arrêter (STOP), soit la supprimer (DELETE). Si le champinstanceTerminationActionn'est pas renseigné, la valeur par défaut estSTOP.Dans le cas contraire, si la sortie inclut le champ
provisioningModeldéfini surstandardou si le champprovisioningModely est omis :- Si la sortie inclut le champ
preemptibledéfini surtrue, alors la VM est une VM préemptive. - Sinon, il s'agit d'une VM standard.
- Si la sortie inclut le champ
Go
Java
Python
Gérer la préemption des VM Spot
Pour savoir comment gérer la préemption des VM Spot, consultez les sections suivantes :
Gérer la préemption
Lorsque Compute Engine commence à préempter une VM Spot, vous pouvez essayer d'effectuer des actions de nettoyage avant que la VM ne s'arrête complètement. La gestion de la préemption peut inclure l'arrêt progressif d'un processus en cours d'exécution et le transfert de l'état de votre charge de travail.
Vous pouvez utiliser les méthodes suivantes pour gérer la préemption d'une VM Spot. Pour savoir comment choisir où gérer la préemption pour votre charge de travail, consultez la définition de la durée de l'avis de préemption.
- Gérez la préemption dans votre charge de travail. Nous recommandons cette méthode pour les VM Spot avec une durée de notification de préemption de 120 secondes. Plus précisément, dans votre charge de travail, configurez le code pour gérer la préemption afin qu'il attende le début de la préemption pour s'exécuter, comme expliqué dans Détecter la préemption dans une VM. Votre code de gestion de la préemption s'exécute ensuite pendant la durée de la notification de préemption. (Ces VM peuvent également spécifier un script d'arrêt, qui s'exécute pendant une période d'arrêt.)
- Gérez la préemption dans un script d'arrêt. Nous recommandons cette méthode pour les VM spot sans durée de préemption, qui est la configuration par défaut. Plus précisément, configurez votre code pour gérer la préemption dans un script d'arrêt, comme indiqué dans l'exemple suivant. Le script d'arrêt s'exécute automatiquement pendant 30 secondes maximum au cours de la période d'arrêt optimale pour tout type d'arrêt. Par conséquent, vous pouvez configurer le code de gestion de la préemption pour qu'il ne s'exécute que si la VM est préemptée, comme expliqué dans Détecter la préemption dans une VM.
Exemple de gestion de la préemption
L'exemple de script suivant montre comment gérer la préemption en important un fichier de point de contrôle dans un bucket Cloud Storage. Vous pouvez exécuter ce script dans votre charge de travail ou le configurer en tant que script d'arrêt. Une fois qu'il a arrêté de manière optimale le programme spécifié, le script effectue un téléchargement parallèle d'un fichier de point de contrôle dans un bucket Cloud Storage.
Une fois le script terminé ou arrivé à expiration, la commande kill normale du système d'exploitation arrête tous les processus restants.
#!/bin/bash
MY_PROGRAM="PROGRAM_NAME" # For example, "apache2" or "nginx"
MY_USER="LOCAL_USER"
CHECKPOINT="/home/$MY_USER/checkpoint.out"
BUCKET_NAME="BUCKET_NAME" # For example, "my-checkpoint-files" (without gs://)
echo "Shutting down! Seeing if ${MY_PROGRAM} is running."
# Find the newest copy of $MY_PROGRAM
PID="$(pgrep -n "$MY_PROGRAM")"
if [[ "$?" -ne 0 ]]; then
echo "${MY_PROGRAM} not running, shutting down immediately."
exit 0
fi
echo "Sending SIGINT to $PID"
kill -2 "$PID"
# Portable waitpid equivalent
while kill -0 "$PID"; do
sleep 1
done
echo "$PID is done, copying ${CHECKPOINT} to gs://${BUCKET_NAME} as ${MY_USER}"
su "${MY_USER}" -c "gcloud storage cp $CHECKPOINT gs://${BUCKET_NAME}/"
echo "Done uploading, shutting down."
Ce script suppose que les conditions suivantes sont remplies :
La VM a été créée avec au moins un accès en lecture ou en écriture à Cloud Storage. Pour savoir comment créer une VM avec les champs d'application appropriés, consultez la documentation sur l'authentification.
Vous disposez d'un bucket Cloud Storage et de l'autorisation d'y écrire.
Pour ajouter ce script à une VM, configurez-le pour qu'il fonctionne avec la charge de travail sur votre VM, puis ajoutez le script à votre charge de travail ou aux métadonnées de la VM.
Copiez ou téléchargez l'exemple de script :
Copiez le script précédent après avoir remplacé les éléments suivants :
PROGRAM_NAME: nom du processus ou du programme que vous souhaitez arrêter. Par exemple,apache2ounginx.LOCAL_USER: nom d'utilisateur avec lequel vous êtes connecté à la machine virtuelle.BUCKET_NAME: nom du bucket Cloud Storage dans lequel vous souhaitez enregistrer le fichier de point de contrôle du programme. Notez que dans ce cas, le nom du bucket ne commence pas pargs://.
Téléchargez l'exemple de script sur votre poste de travail local. Remplacez ensuite les variables suivantes dans le fichier :
PROGRAM_NAME: nom du processus ou du programme que vous souhaitez arrêter. Par exemple,apache2ounginx.LOCAL_USER: nom d'utilisateur avec lequel vous êtes connecté à la machine virtuelle.BUCKET_NAME: nom du bucket Cloud Storage dans lequel vous souhaitez enregistrer le fichier de point de contrôle du programme. Notez que dans ce cas, le nom du bucket ne commence pas pargs://.
Configurez la détection de préemption et ajoutez le script en fonction de l'endroit où vous prévoyez de gérer la préemption, soit dans votre charge de travail, soit dans un script d'arrêt. Pour savoir comment choisir où gérer la préemption pour votre charge de travail, consultez la définition de la durée de l'avis de préemption.
Gérez la préemption dans votre charge de travail : procédez comme suit.
Configurez le script pour qu'il attende le début de la préemption, comme expliqué dans Détecter la préemption dans une VM.
Ajoutez le script à votre charge de travail.
Gérez la préemption dans un script d'arrêt : procédez comme suit.
Nous vous recommandons de configurer le script pour qu'il ne s'exécute que lorsque l'arrêt est dû à une préemption, comme expliqué dans Détecter la préemption dans une VM. Par exemple, vous n'avez pas besoin d'importer de fichier de point de contrôle lorsque votre VM s'arrête parce que votre charge de travail est terminée.
Ajoutez le script d'arrêt à une nouvelle VM ou à une VM existante.
Détecter la préemption des VM Spot
Les sections suivantes expliquent les méthodes que vous pouvez utiliser pour détecter la préemption des VM Spot.
- Détecter la préemption dans une VM : par exemple, utilisez cette méthode pour vérifier la préemption dans un script d'arrêt ou pour déclencher la gestion de la préemption pour les VM spot avec une durée de notification de préemption de 120 secondes.
- Afficher les opérations de préemption : par exemple, utilisez cette méthode lorsque vous souhaitez déterminer pourquoi les VM Spot s'arrêtent.
Détecter la préemption dans une VM
Pour détecter si une VM est préemptée depuis la VM elle-même, vérifiez la valeur preempted dans les métadonnées par défaut de votre VM sur le serveur de métadonnées. Par exemple, utilisez une ou plusieurs des méthodes suivantes en fonction de l'endroit où vous prévoyez de gérer la préemption.
Si vous gérez la préemption dans un script d'arrêt, vérifiez la valeur actuelle de
preempted. Vous pouvez exécuter la commandecurlsuivante depuis votre VM pour obtenir la valeur actuelle depreempted:curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted" -H "Metadata-Flavor: Google" TRUESi cette valeur est
TRUE, la VM a été préemptée par Compute Engine. Sinon, elle estFALSE. Par exemple, utilisez cette commande dans un script d'arrêt pour effectuer différentes actions selon que l'arrêt a été causé par une préemption ou non.Si vous gérez la préemption dans votre charge de travail, attendez que
preemptedsoitTRUE. Pour attendre quepreemptedsoitTRUE, vous pouvez ajouter le paramètre de requête?wait_for_change=trueà l'URL de la commande précédente. Avec ce paramètre de requête, la commande effectue une requête HTTP GET suspendue qui ne renvoie les résultats que si les métadonnées ont été modifiées et que la VM a été préemptée.curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted?wait_for_change=true" -H "Metadata-Flavor: Google" TRUECette commande est utile lorsque vous souhaitez déclencher la gestion de la préemption en dehors d'un script d'arrêt. Par exemple, utilisez cette méthode pour déclencher la gestion de la préemption pour les VM Spot avec une durée de préavis de préemption de 120 secondes.
Afficher les opérations de préemption
Vous pouvez afficher les opérations de préemption de Compute Engine à l'aide deCloud de Confiance console, de gcloud CLI ou de l'API Compute Engine.
Console
Vous pouvez vérifier si une VM a été préemptée en consultant les journaux d'activité du système.
Dans la console Cloud de Confiance , accédez à la page Journaux.
Sélectionnez le projet et cliquez sur Continuer.
Ajoutez
compute.instances.preemptedau champ filtre par libellé ou recherche textuelle.Vous pouvez également saisir un nom de VM pour consulter les opérations de préemption d'une VM spécifique.
Appuyez sur Entrée pour appliquer les filtres spécifiés. La console Cloud de Confiance met à jour la liste des journaux pour n'afficher que les opérations au cours desquelles une VM a été préemptée.
Sélectionnez une opération dans la liste pour voir les détails de la VM qui a été préemptée.
gcloud
Utilisez la commande gcloud compute operations list avec un paramètre de filtre pour obtenir la liste des événements de préemption de votre projet.
gcloud compute operations list \
--filter="operationType=compute.instances.preempted"
Vous pouvez éventuellement utiliser des paramètres de filtre supplémentaires pour affiner davantage les résultats. Par exemple, pour n'afficher que les événements de préemption associés aux instances appartenant à un groupe d'instances géré, exécutez la commande suivante :
gcloud compute operations list \
--filter="operationType=compute.instances.preempted AND targetLink:instances/BASE_INSTANCE_NAME"
où BASE_INSTANCE_NAME est le nom de base spécifié en tant que préfixe pour les noms de toutes les VM de ce groupe d'instances géré.
Le résultat ressemble à ce qui suit :
NAME TYPE TARGET HTTP_STATUS STATUS TIMESTAMP systemevent-yyyyyyyy compute.instances.preempted us-central1-f/instances/example-instance-yyy 200 DONE 2015-04-02T12:12:10.881-07:00
Le type d'opération compute.instances.preempted indique que l'instance de VM a été préemptée. Vous pouvez utiliser la commande gcloud compute operations describe pour obtenir plus d'informations sur une opération de préemption spécifique.
gcloud compute operations describe SYSTEM_EVENT \
--zone=ZONE
Remplacez les éléments suivants :
SYSTEM_EVENT: événement système issu de la sortie de la commandegcloud compute operations list(par exemple,systemevent-yyyyyyyy).ZONE: zone de l'événement système, par exempleus-central1-f
Le résultat ressemble à ce qui suit :
... operationType: compute.instances.preempted progress: 100 selfLink: https://compute.s3nsapis.fr/compute/v1/projects/my-project/zones/us-central1-f/operations/systemevent-yyyyyyyy startTime: '2015-04-02T12:12:10.881-07:00' status: DONE statusMessage: Instance was preempted. ...
REST
Pour obtenir la liste des opérations système récentes pour un projet et une zone spécifiques, utilisez la méthode zoneOperations.get.
GET https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/operations
Remplacez les éléments suivants :
PROJECT_ID: ID du projet.ZONE: zone.
Pour n'afficher que les opérations de préemption, vous pouvez ajouter un filtre à votre requête API :
operationType="compute.instances.preempted"
Sinon, pour afficher les opérations de préemption pour une VM spécifique, ajoutez un paramètre targetLink au filtre :
operationType="compute.instances.preempted" AND targetLink="https://www.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Remplacez ce qui suit :
+ PROJECT_ID : ID du projet.
+ ZONE : zone.
+ VM_NAME : nom d'une VM spécifique dans cette zone et ce projet.
La réponse contient la liste des opérations récentes. Par exemple, une préemption se présente comme suit :
{
"kind": "compute#operation",
"id": "15041793718812375371",
"name": "systemevent-yyyyyyyy",
"zone": "https://www.s3nsapis.fr/compute/v1/projects/my-project/zones/us-central1-f",
"operationType": "compute.instances.preempted",
"targetLink": "https://www.s3nsapis.fr/compute/v1/projects/my-project/zones/us-central1-f/instances/example-instance",
"targetId": "12820389800990687210",
"status": "DONE",
"statusMessage": "Instance was preempted.",
...
}
Tester les paramètres de préemption
Vous pouvez simuler des événements de maintenance sur vos VM Spot pour forcer la préemption. Utilisez cette fonctionnalité pour tester la manière dont vos charges de travail détectent et gèrent la préemption. Pour savoir comment tester les événements de maintenance sur vos instances, consultez Simuler un événement de maintenance de l'hôte.
Bonnes pratiques
Voici quelques bonnes pratiques pour vous aider à tirer le meilleur parti des VM Spot.
Consultez la disponibilité des ressources. Avant de créer des VM Spot, ou si vous essayez de créer des VM Spot, mais que vous rencontrez sans cesse des erreurs de disponibilité des ressources, vous pouvez consulter la disponibilité d'un type de machine dans une région ou une zone spécifique. Vérifier la disponibilité des ressources permet d'augmenter vos chances de créer des VM Spot. Pour obtenir des instructions, consultez Afficher la disponibilité des VM Spot.
Affichez les données historiques. Avant de créer des VM Spot, vous pouvez consulter le taux de préemption historique et les tarifs historiques des types de machines que vous souhaitez que vos VM Spot utilisent. Ces informations vous aident à comparer et à choisir le type de machine qui correspond le mieux à vos besoins en termes de charge de travail et de coûts. Pour obtenir des instructions, consultez Afficher le taux de préemption et les tarifs des VM Spot.
Utilisez des modèles d'instance. Plutôt que de créer des VM Spot une par une, vous pouvez utiliser des modèles d'instance pour créer plusieurs VM Spot avec les mêmes propriétés. Les modèles d'instance sont requis pour utiliser les MIG. Vous pouvez également créer plusieurs VM Spot à l'aide de l'API d'instances groupées.
Utilisez des MIG pour améliorer la disponibilité des ressources et recréer automatiquement les VM Spot. Utilisez les MIG pour rendre les charges de travail sur les VM Spot plus flexibles et résilientes. Par exemple, pour éviter les erreurs de disponibilité des ressources, vous pouvez rendre votre charge de travail plus flexible en autorisant les éléments suivants :
- Autorisez plusieurs emplacements à l'aide de MIG régionaux.
- Autorisez plusieurs types de machines en utilisant la flexibilité des instances.
De plus, les MIG peuvent réparer les VM Spot préemptées en les recréant automatiquement.
Choisissez des types de machines plus petits. Les ressources des VM Spot proviennent de la capacité excédentaire et de sauvegarde Cloud de Confiance by S3NS . La capacité des VM Spot est souvent plus facile à obtenir pour des types de machines plus petits, c'est-à-dire qui disposent de moins de ressources, comme les vCPU (processeurs virtuels) et la mémoire. Vous pouvez augmenter la capacité des VM Spot en sélectionnant un type de machine personnalisé plus petit, mais la probabilité d'obtention de capacité est encore plus élevée en optant pour des types de machines prédéfinis plus petits. Par exemple, par rapport à la capacité du type de machine prédéfini
n2-standard-32, la capacité du type de machine personnalisén2-custom-24-96présente certes une bonne probabilité, mais celle associée à la capacité du type de machine prédéfinin2-standard-16est encore plus élevée.Exécutez les grands clusters de VM Spot pendant les heures creuses. La charge sur les centres de données Cloud de Confiance by S3NS varie en fonction de la zone géographique et de l'heure de la journée, mais elle est généralement plus faible la nuit et le week-end. Par conséquent, la nuit et le week-end sont les meilleurs moments pour exécuter de grands clusters de VM Spot.
Concevez vos charges de travail pour qu'elles soient tolérantes aux pannes et aux préemptions. Il est important de prévoir que des changements se produisent dans les schémas de préemption à différents moments. Par exemple, en cas de panne partielle d'une zone, un grand nombre de VM Spot peuvent être préemptées pour libérer de l'espace pour les VM standards à déplacer dans le cadre de la reprise. Dans ce petit intervalle de temps, le taux de préemption sera très différent de celui d'un autre jour. Si votre charge de travail suppose que les préemptions sont toujours effectuées par petits groupes, vous ne serez peut-être pas préparé à un tel événement.
Réessayez de créer des VM Spot qui ont été préemptées. Si vos VM Spot ont été préemptées, il est conseillé de réessayer de créer une ou deux fois des VM Spot avant de revenir aux VM standards. Selon vos besoins, il peut être judicieux de combiner des VM standards et des VM Spot dans vos clusters pour vous assurer que le travail se déroule à la cadence appropriée.
Enregistrez votre progression pour atténuer la préemption. Gérez les notifications d'arrêt et de préemption en enregistrant la progression de votre charge de travail pour pouvoir la reprendre là où elle s'était arrêtée, plutôt que de tout recommencer à zéro. Par exemple, enregistrez la progression chaque fois qu'une préemption est détectée, comme expliqué dans Gérer la préemption des VM Spot. Pour une résilience accrue, pensez également à enregistrer la progression à intervalles réguliers, et pas seulement lorsque la préemption est détectée.
Étape suivante
- Connectez-vous à votre instance de VM.
- Apprenez-en plus sur les scripts d'arrêt.
- Découvrez comment limiter l'environnement d'exécution d'une VM.
- Apprenez-en plus sur les modèles d'instance.
- Apprenez-en plus sur les MIG.