Ce document explique comment créer des tâches exécutées sur des ressources réservées et comment empêcher les tâches d'utiliser des réservations.
Les réservations sont une fonctionnalité de Compute Engine. Une réservation offre un niveau très élevé d'assurance pour l'obtention de capacité pour une ou plusieurs VM avec la configuration matérielle spécifiée. Une réservation pour une VM entraîne les coûts de cette VM à partir de sa création jusqu'à sa suppression. Toutefois, lorsque vous utilisez cette VM, le coût total est équivalent à celui d'une VM sans réservation.
En règle générale, les réservations sont utiles lorsque la disponibilité de la capacité est d'une importance cruciale ou pour éviter les erreurs lors de l'obtention de ressources. Pour Batch en particulier, envisagez d'utiliser des réservations dédiées pour réduire le temps de planification des tâches ou essayez d'utiliser les réservations existantes lorsqu'elles ne sont pas utilisées. Si vous avez des réservations sous-utilisées (telles que les réservations requises pour les remises sur engagement d'utilisation), vous pouvez configurer des jobs pour essayer de les consommer lorsqu'elles ne sont pas utilisées afin d'optimiser les coûts encourus. Si vous souhaitez donner la priorité à la disponibilité des ressources pour d'autres charges de travail de votre projet, vous pouvez également bloquer explicitement une tâche pour qu'elle ne consomme pas de réservations.
Pour en savoir plus sur les réservations, consultez la documentation Compute Engine sur les réservations.
Avant de commencer
- Si vous n'avez jamais utilisé Batch, consultez Premiers pas avec Batch et activez Batch en remplissant les conditions préalables pour les projets et les utilisateurs.
- Assurez-vous de disposer des autorisations nécessaires pour créer une réservation ou afficher une réservation existante que les VM d'une tâche doivent utiliser si nécessaire.
-
Pour obtenir les autorisations nécessaires pour créer un job, demandez à votre administrateur de vous accorder les rôles IAM suivants:
-
Éditeur de tâches par lot (
roles/batch.jobsEditor
) sur le projet -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) sur le compte de service de la tâche, qui est par défaut le compte de service Compute Engine par défaut
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
-
Éditeur de tâches par lot (
Restrictions
Outre les restrictions générales concernant les réservations, les réservations groupées sont également soumises aux restrictions suivantes:
- Les VM d'une tâche ne peuvent pas consommer de réservations partagées.
- Les VM d'une tâche ne peuvent pas utiliser les réservations si elles spécifient une stratégie d'emplacement compact.
- Si vous créez une tâche à l'aide de la console Google Cloud, ses VM consomment automatiquement les réservations correspondantes. Pour utiliser une réservation spécifique ou empêcher les VM d'utiliser des réservations, vous devez définir le champ
reservation
lorsque vous créez une tâche à l'aide de la CLI gcloud ou de l'API Batch.
Conditions requises
Cette section résume les exigences à respecter pour que les VM d'une tâche consomment une réservation. Pour en savoir plus sur toutes les exigences, consultez les exigences générales concernant les réservations dans la documentation Compute Engine et la procédure de planification de votre configuration plus loin dans ce document.
Pour que les VM d'une tâche puissent généralement consommer une réservation, toutes les conditions suivantes doivent être remplies:
L'ordre et la réservation doivent spécifier des propriétés de VM qui correspondent exactement.
Vous devez respecter toutes les restrictions de ce document et toutes les autres exigences générales concernant les réservations.
Pour que chacune des VM d'une tâche puisse consommer une réservation, la réservation doit disposer d'une capacité inutilisée disponible pendant l'exécution de la VM.
La capacité inutilisée d'une réservation correspond à la différence entre le nombre de VM et le nombre de VM qui l'utilisent actuellement. Les VM tentent de consommer des réservations chaque fois que vous disposez d'une capacité de réservation inutilisée. Par conséquent, une VM peut commencer à consommer une réservation lors de sa création ou plus tard pendant son exécution. Une VM ne cesse pas de consommer une réservation tant qu'elle n'est pas arrêtée ou que la réservation n'est pas supprimée.
En fonction de votre capacité de réservation totale inutilisée, aucune, certaines ou toutes les VM d'une tâche peuvent utiliser des réservations, et le nombre de VM réservées peut varier pendant l'exécution de la tâche.
Créer et exécuter une tâche pouvant utiliser des VM réservées
Planifiez votre configuration. Pour vous assurer que votre tâche et votre réservation sont compatibles, procédez comme suit.
Si vous souhaitez utiliser une réservation existante, vous devez créer une tâche avec une configuration correspondante. Sinon, si vous prévoyez de créer une réservation, sélectionnez les options de configuration de votre choix.
Déterminer les propriétés de la réservation En raison des restrictions, le type de partage doit être single-project (projet unique), qui est l'option par défaut pour une réservation. Déterminez les valeurs que vous souhaitez utiliser pour les propriétés de réservation suivantes:
- Type de consommation*
- Nombre de VM†
*Le type de consommation de la réservation (ciblé spécifiquement ou consommé automatiquement) détermine les VM pouvant utiliser la réservation.
†Le nombre de VM représente la capacité totale d'une réservation. Lorsque vous choisissez cette valeur, tenez compte du nombre de VM de la tâche.
Déterminez les propriétés de la VM pour la tâche et la réservation. En raison des restrictions, ni la tâche ni la réservation ne peuvent spécifier une stratégie d'emplacement compact, qui est l'option par défaut pour les deux. Déterminez les valeurs que vous souhaitez utiliser pour les propriétés de VM suivantes, qui doivent correspondre exactement pour la réservation et la tâche:
- Projet
- Zone*
- Type de machine†
- Configuration minimale de la plate-forme de processeur† (le cas échéant‡)
- Type et nombre de GPU† (le cas échéant‡)
- Type et nombre de SSD locaux† (le cas échéant‡)
- Affinité de réservation†#
*Les VM de tâche doivent se trouver dans la même zone que les VM réservées. Vous devez inclure cette zone dans le champ
allowedLocations[]
de la tâche ou, si vous omettez le champallowedLocations[]
, définir l'emplacement de la tâche sur la région qui contient cette zone.†La tâche doit définir toutes ces propriétés à l'aide des sous-champs
policy
ou d'un modèle d'instance de VM. Une tâche ne peut pas spécifier une combinaison de sous-champspolicy
et d'un modèle.‡ Vous ne pouvez pas définir un champ facultatif pour une ressource et l'omettre pour l'autre. Définissez ou omettez le champ facultatif pour la réservation et la tâche. Si la tâche spécifie un modèle d'instance de VM, cela s'applique également aux champs du modèle spécifié.
#Le type de consommation de la réservation détermine l'affinité de réservation requise pour les VM de la tâche, que vous devez spécifier dans la tâche comme suit:
- Si la tâche utilise un modèle d'instance de VM, le modèle doit configurer l'affinité de réservation comme expliqué dans la documentation sur les réservations.
- Si la tâche n'utilise pas de modèle et que la réservation est spécifiquement ciblée, spécifiez le nom de la réservation dans le champ
reservation
de la tâche. - Sinon, si la tâche n'utilise pas de modèle et que la réservation est consommée automatiquement, omettez le champ
reservation
de la tâche.
Préparez la réservation. Si vous ne l'avez pas déjà fait, créez la réservation que vous souhaitez que les VM de la tâche utilisent. Assurez-vous que la réservation possède les propriétés que vous avez planifiées.
Créez et exécutez la tâche. Vous pouvez créer et exécuter une tâche qui consomme des VM à partir de la réservation préparée à l'aide de la CLI gcloud ou de l'API Batch:
gcloud
Créez un fichier JSON qui spécifie les détails de configuration de la tâche et qui définit les sous-champs de la ressource d'instance de VM (
instances[]
) pour qu'ils correspondent exactement aux propriétés de VM d'une réservation.Par exemple, pour créer une tâche de script de base qui consomme des VM à partir d'une réservation, créez un fichier JSON contenant le contenu suivant:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ] }, "taskCount": 3 } ], "allocationPolicy": { "instances": [ { VM_RESOURCES } ], }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Remplacez
VM_RESOURCES
par les ressources de VM correspondant à la réservation que vous souhaitez que la tâche consomme en spécifiant les sous-champsinstances[]
que vous avez planifiés aux étapes précédentes.Par exemple, commencez par la valeur suivante pour
VM_RESOURCES
:"installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "minCpuPlatform": "MIN_CPU_PLATFORM", "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ], "disks": [ { "newDisk": { "sizeGb": LOCAL_SSD_SIZE, "type": "local-ssd" }, "deviceName": "LOCAL_SSD_NAME" } ], "reservation": "SPECIFIC_RESERVATION_NAME" }
Pour utiliser cette valeur, apportez toutes les modifications suivantes:
Voulez-vous utiliser un modèle d'instance ?
Oui:remplacez le champ
policy
par le champinstanceTemplate
et spécifiez un modèle d'instance de VM existant correspondant à la réservation. Par exemple, consultez l'exemple de code pour utiliser un modèle d'instance de VM. Si la réservation utilise des GPU ou des SSD locaux, vous devez également configurer les champsinstallGpuDrivers
etvolumes[]
de la tâche, respectivement. Sinon, ignorez les autres modifications.Non:remplacez
MACHINE_TYPE
par le même type de machine que la réservation.
La réservation inclut-elle une plate-forme de processeur minimale ?
Oui:remplacez
MIN_CPU_PLATFORM
par la même plate-forme de processeur minimale.Non:supprimez le champ
minCpuPlatform
.
La réservation inclut-elle des GPU ?
Oui:remplacez
INSTALL_GPU_DRIVERS
,GPU_TYPE
etGPU_COUNT
pour qu'ils correspondent à la réservation. Consultez par exemple l'exemple de code pour utiliser des GPU.Non:supprimez le champ
installGpuDrivers
et le champaccelerators[]
.
La réservation inclut-elle des SSD locaux ?
Oui:remplacez
LOCAL_SSD_SIZE
etLOCAL_SSD_NAME
pour correspondre à la réservation, puis montez les SSD locaux en ajoutant le champvolumes[]
à la tâche. Par exemple, consultez l'exemple de code pour utiliser des SSD locaux.Non:supprimez le champ
disks[]
.
La réservation utilise-t-elle le type de consommation spécifiquement ciblé ?
Oui:remplacez
SPECIFIC_RESERVATION_NAME
par le nom de la réservation.Non:supprimez le champ
reservation
.
Par exemple, supposons que vous utilisiez une réservation consommée automatiquement pour des VM
n2-standard-32
qui ne spécifie aucune plate-forme de processeur minimale, aucun GPU ni aucun SSD local. De plus, vous ne souhaitez pas spécifier de modèle d'instance de VM. Dans ce cas, vous devez remplacerVM_RESOURCES
par la valeur suivante:"policy": { "machineType": "n2-standard-32" }
Pour créer et exécuter la tâche, utilisez la commande
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Remplacez les éléments suivants :
JOB_NAME
: nom de la tâche.LOCATION
: emplacement de la tâche. Sauf si la tâche spécifie le champallowedLocations[]
, il doit s'agir de la région contenant la zone de la réservation.JSON_CONFIGURATION_FILE
: chemin d'accès à un fichier JSON contenant les détails de configuration de la tâche.
API
Envoyez une requête
POST
à la méthodejobs.create
qui définit les sous-champs de la ressource d'instance de VM (instances[]
) pour qu'ils correspondent exactement aux propriétés de VM d'une réservation.Par exemple, pour créer une tâche de script de base qui consomme des VM à partir d'une réservation, envoyez la requête suivante:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME { "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ] }, "taskCount": 3 } ], "allocationPolicy": { "instances": [ { VM_RESOURCES } ], }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Remplacez les éléments suivants :
PROJECT_ID
: ID de projet de votre projet.LOCATION
: emplacement de la tâche. Sauf si la tâche spécifie le champallowedLocations[]
, il doit s'agir de la région contenant la zone de la réservation.JOB_NAME
: nom de la tâche.VM_RESOURCES
: les ressources de VM correspondant à la réservation que vous souhaitez que la tâche consomme en spécifiant les sous-champsinstances[]
que vous avez planifiés aux étapes précédentes.Par exemple, commencez par la valeur suivante pour
VM_RESOURCES
:"installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "minCpuPlatform": "MIN_CPU_PLATFORM", "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ], "disks": [ { "newDisk": { "sizeGb": LOCAL_SSD_SIZE, "type": "local-ssd" }, "deviceName": "LOCAL_SSD_NAME" } ], "reservation": "SPECIFIC_RESERVATION_NAME" }
Pour utiliser cette valeur, apportez toutes les modifications suivantes:
Voulez-vous utiliser un modèle d'instance ?
Oui:remplacez le champ
policy
par le champinstanceTemplate
et spécifiez un modèle d'instance de VM existant correspondant à la réservation. Par exemple, consultez l'exemple de code pour utiliser un modèle d'instance de VM. Si la réservation utilise des GPU ou des SSD locaux, vous devez également configurer les champsinstallGpuDrivers
etvolumes[]
de la tâche, respectivement. Sinon, ignorez les autres modifications.Non:remplacez
MACHINE_TYPE
par le même type de machine que la réservation.
La réservation inclut-elle une plate-forme de processeur minimale ?
Oui:remplacez
MIN_CPU_PLATFORM
par la même plate-forme de processeur minimale.Non:supprimez le champ
minCpuPlatform
.
La réservation inclut-elle des GPU ?
Oui:remplacez
INSTALL_GPU_DRIVERS
,GPU_TYPE
etGPU_COUNT
pour qu'ils correspondent à la réservation. Consultez par exemple l'exemple de code pour utiliser des GPU.Non:supprimez le champ
installGpuDrivers
et le champaccelerators[]
.
La réservation inclut-elle des SSD locaux ?
Oui:remplacez
LOCAL_SSD_SIZE
etLOCAL_SSD_NAME
pour correspondre à la réservation, puis montez les SSD locaux en ajoutant le champvolumes[]
à la tâche. Par exemple, consultez l'exemple de code pour utiliser des SSD locaux.Non:supprimez le champ
disks[]
.
La réservation utilise-t-elle le type de consommation spécifiquement ciblé ?
Oui:remplacez
SPECIFIC_RESERVATION_NAME
par le nom de la réservation.Non:supprimez le champ
reservation
.
Par exemple, supposons que vous utilisiez une réservation consommée automatiquement pour des VM
n2-standard-32
qui ne spécifie aucune plate-forme de processeur minimale, aucun GPU ni aucun SSD local. De plus, vous ne souhaitez pas spécifier de modèle d'instance de VM. Dans ce cas, vous devez remplacerVM_RESOURCES
par la valeur suivante:"policy": { "machineType": "n2-standard-32" }
Créer et exécuter une tâche qui ne peut pas utiliser de VM réservées
Pour empêcher une tâche de consommer des réservations, définissez le champ reservation
sur NO_RESERVATION
. Pour en savoir plus sur l'évitement de la consommation de réservations, consultez la section Créer des VM sans consommer de réservations dans la documentation de Compute Engine.
Vous pouvez créer et exécuter une tâche qui ne peut pas consommer de VM réservées à l'aide de la CLI gcloud ou de l'API Batch.
gcloud
Créez un fichier JSON qui spécifie les détails de configuration de la tâche et définit le champ
reservation
surNO_RESERVATION
.Par exemple, pour créer une tâche de script de base qui ne peut pas consommer de réservations, créez un fichier JSON contenant les éléments suivants:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ] }, "taskCount": 3 } ], "allocationPolicy": { "instances": [ { "policy": { "reservation": "NO_RESERVATION" } } ], }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Pour créer et exécuter la tâche, utilisez la commande
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Remplacez les éléments suivants :
JOB_NAME
: nom de la tâche.LOCATION
: emplacement de la tâche.JSON_CONFIGURATION_FILE
: chemin d'accès à un fichier JSON contenant les détails de configuration de la tâche.
API
Envoyez une requête POST
à la méthode jobs.create
qui définit le champ reservation
sur NO_RESERVATION
.
Par exemple, pour créer une tâche de script de base qui ne peut pas consommer de réservations, envoyez la requête suivante:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}"
}
}
]
},
"taskCount": 3
}
],
"allocationPolicy": {
"instances": [
{
"policy": {
"reservation": "NO_RESERVATION"
}
}
],
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Remplacez les éléments suivants :
PROJECT_ID
: ID de projet de votre projet.LOCATION
: emplacement de la tâche.JOB_NAME
: nom de la tâche.
Étape suivante
- Si vous rencontrez des difficultés pour créer ou exécuter une tâche, consultez la section Dépannage.
- Afficher les jobs et les tâches
- Découvrez d'autres options de création de tâches.