Créer une réservation partagée

Ce document explique comment créer des réservations partagées et gérer quels projets de votre organisation sont autorisés à créer des réservations partagées.

Les réservations offrent un niveau très élevé d'assurance pour l'obtention de la capacité des ressources zonales Compute Engine. Une réservation partagée peut être utilisée par le projet qui a créé la réservation (projet propriétaire) et par les projets avec lesquels la réservation est partagée (projets consommateurs). Utilisez les réservations partagées si votre organisation dispose de plusieurs projets nécessitant des instances de machine virtuelle (VM) avec les mêmes propriétés d'instance réservées. Les réservations partagées vous permettent d'améliorer l'utilisation de vos réservations et de réduire le nombre de réservations que vous devez créer et gérer. Pour en savoir plus, consultez la section Réservations pour les ressources zonales Compute Engine.

Si vous souhaitez créer une réservation utilisable uniquement par le projet qui l'a créée, consultez la section Créer des réservations pour un seul projet.

Avant de commencer

Bonnes pratiques

Les bonnes pratiques suivantes sont recommandées lors de la création de réservations partagées. En suivant ces recommandations, vous pouvez optimiser la gestion et l'utilisation des réservations partagées dans votre organisation tout en atténuant les limites des réservations partagées.

  • Minimisez le nombre de projets dans votre organisation que vous autorisez à créer des réservations partagées. Pour ce faire, vous pouvez utiliser la contrainte de règle d'administration des projets propriétaires de réservations partagées (compute.sharedReservationsOwnerProjects).
    • Vous ne pouvez répertorier que les réservations créées par chaque projet. Cela signifie que les réservations partagées ne sont répertoriées que dans le projet propriétaire. Vous ne pouvez pas répertorier les réservations partagées avec chaque projet ni répertorier toutes les réservations partagées dans chaque organisation. Limiter le nombre de projets propriétaires facilite la surveillance et la gestion de vos réservations partagées.
    • Les projets sont facturés par quota de création et de consommation de la réservation partagée. Limiter la création à quelques projets peut donc vous permettre de gérer plus facilement vos quotas de ressources.
    • Pour en savoir plus, consultez la section Autoriser et restreindre la création et la modification de réservations partagées pour des projets.
  • Réduisez le nombre de réservations partagées distinctes avec des propriétés d'instance identiques.
    • Une organisation peut avoir jusqu'à 100 réservations partagées pour chaque combinaison unique de propriétés d'instance. Par conséquent, réduire le nombre de réservations partagées que vous créez avec des propriétés d'instance identiques créez permet d'atténuer cette limite.
    • Un nombre réduit de réservations partagées facilite la gestion.
  • Ne partagez les réservations qu'entre des projets associés au même compte de facturation.
    • En limitant chaque réservation partagée à des projets personnels ayant le même compte de facturation que le projet propriétaire, il est plus facile de savoir si une réservation a été utilisée (et donc facturée) ou non.
    • Si vous avez des remises sur engagement d'utilisation pour un compte de facturation, limiter vos réservations partagées à ce compte de facturation permet de maintenir une facturation cohérente entre les projets qui créent et consomment des réservations partagées.

Autoriser et restreindre la création et la modification de réservations partagées pour des projets

Par défaut, aucun projet n'est autorisé à créer ou à modifier des réservations partagées dans une organisation. Ajoutez des projets à la contrainte de règle d'administration des projets propriétaires de réservations partagées (compute.sharedReservationsOwnerProjects) pour les autoriser à créer et modifier des réservations partagées. Pour en savoir plus sur les contraintes liées aux règles d'administration, consultez la section Présentation du service de règles d'administration.

Procédez comme suit pour afficher et modifier la contrainte de règle d'administration des projets propriétaires de réservations partagées (compute.sharedReservationsOwnerProjects).

Afficher la contrainte de règle d'administration des réservations partagées

Pour savoir quels projets sont autorisés à créer et modifier des réservations partagées, utilisez Cloud Console ou l'outil gcloud.

Console

Suivez les étapes pour Afficher les règles d'administration à l'aide de la contrainte Projets propriétaire de réservations partagées.

gcloud

Pour afficher les projets que la contrainte compute.sharedReservationsOwnerProjects autorise à créer et modifier des réservations partagées, procédez comme suit:

  1. Téléchargez la règle de votre organisation sous la forme d'un fichier nommé policy.yaml, à l'aide de la commande gcloud resource-manager org-policies describe :

    gcloud resource-manager org-policies describe compute.sharedReservationsOwnerProjects --organization=ORGANIZATION_ID > policy.yaml
    

    Remplacez ORGANIZATION_ID par l'ID de votre organisation.

  2. Utilisez un éditeur de texte pour ouvrir le fichier policy.yaml et afficher la contrainte compute.sharedReservationsOwnerProjects. Les projets autorisés à créer et à modifier des réservations partagées sont répertoriés sous sa propriété allowedValues :

    ...
    constraint: constraints/compute.sharedReservationsOwnerProjects
    listPolicy:
      allowedValues:
      - projects/PROJECT_NUMBER_1
      - projects/PROJECT_NUMBER_2
      - projects/PROJECT_NUMBER_3
    ...
    

    PROJECT_NUMBER_1, PROJECT_NUMBER_2 et PROJECT_NUMBER_3 sont les numéros de projets des seuls projets de votre organisation autorisés à créer des réservations partagées.

  3. Facultatif : supprimez le fichier policy.yaml.

    rm policy.yaml
    

Modifier la contrainte de règle d'administration des réservations partagées

Pour savoir quels projets sont autorisés à créer et modifier des réservations partagées, utilisez Cloud Console ou l'outil gcloud.

Console

Suivez les étapes décrites dans la section Personnaliser les règles pour les contraintes de liste à l'aide de la contrainte Projets propriétaires de réservations partagées.

gcloud

Pour modifier les projets que la contrainte compute.sharedReservationsOwnerProjects autorise à créer et modifier des réservations partagées, utilisez l'une des méthodes suivantes:

  • Pour autoriser un seul projet à créer et modifier des réservations partagées, utilisez la commande gcloud resource-manager org-policies allow. Vous pouvez répéter cette commande pour chaque projet auquel vous souhaitez accorder cette autorisation.

    gcloud resource-manager org-policies allow compute.sharedReservationsOwnerProjects projects/PROJECT_NUMBER \
        --organization=ORGANIZATION_ID
    

    Remplacez les éléments suivants :

  • Pour accorder ou révoquer les autorisations de création et modification des réservations partagées pour plusieurs projets, remplacez la contrainte de règle d'administration :

    1. Pour télécharger la règle de votre organisation sous la forme d'un fichier nommé policy.yaml, utilisez la commande gcloud resource-manager org-policies describe :

      gcloud resource-manager org-policies describe compute.sharedReservationsOwnerProjects --organization=ORGANIZATION_ID > policy.yaml
      

      Remplacez ORGANIZATION_ID par l'ID de votre organisation.

    2. À l'aide d'un éditeur de texte, modifiez le fichier policy.yaml afin que la contrainte compute.sharedReservationsOwnerProjects ne répertorie que les projets pour lesquels vous souhaitez autoriser la création et la modification de réservations partagées sous allowedValues.

      • Pour chaque projet que vous souhaitez autoriser à créer et à modifier des réservations partagées, ajoutez une ligne dessous pour ce projet sous allowedValues.
      • Pour chaque projet pour lequel vous souhaitez révoquer l'autorisation de créer et de modifier des réservations partagées, supprimez la ligne pour ce projet.

      Lorsque vous avez terminé, assurez-vous que le fichier policy.yaml ressemble à ce qui suit :

      ...
      constraint: constraints/compute.sharedReservationsOwnerProjects
      listPolicy:
        allowedValues:
        - projects/PROJECT_NUMBER_1
        - projects/PROJECT_NUMBER_2
        - projects/PROJECT_NUMBER_3
      ...
      

      PROJECT_NUMBER_1, PROJECT_NUMBER_2 et PROJECT_NUMBER_3 sont les numéros de projet des seuls projets de votre organisation que vous souhaitez autoriser à créer et à modifier des réservations partagées.

    3. Enregistrez le fichier policy.yaml et fermez l'éditeur.

    4. Pour mettre à jour la règle de votre organisation avec vos modifications, utilisez la commande gcloud resource-manager org-policies set-policy :

      gcloud resource-manager org-policies set-policy --organization=ORGANIZATION_ID policy.yaml
      

      Remplacez ORGANIZATION_ID par l'ID de votre organisation.

    5. Facultatif : supprimez le fichier policy.yaml.

      rm policy.yaml
      

Créer une réservation partagée

Créez une réservation partagée pour des instances de VM à l'aide de l'outil gcloud ou de l'API Compute Engine. La réservation partagée ne peut être modifiée que par le projet propriétaire, mais les ressources d'une réservation partagée peuvent être utilisées par le projet propriétaire ou par tout projet client.

Une instance de VM ne peut consommer une réservation que si ses propriétés correspondent exactement à celles de la réservation :

  • Zone
  • Type de machine (famille de machines, processeurs virtuels et mémoire)
  • Configuration minimale de la plate-forme du processeur
  • Type de GPU
  • Nombre de GPU
  • Interface des disques SSD locaux
  • Taille des disques SSD locaux

Par défaut, une réservation partagée est automatiquement utilisée par toutes les instances de VM correspondantes créées dans le projet propriétaire ou dans un projet client. Pour créer une réservation qui n'est pas consommée automatiquement, utilisez l'option specificReservationRequired lors de la création de la réservation ou créez une instance sans consommer de réservation.

Il n'est pas nécessaire de créer un engagement pour réserver des ressources. Toutefois, si vous souhaitez obtenir des remises sur engagement d'utilisation pour les GPU et les SSD locaux, vous devez créer une réservation incluant ces ressources lors de la souscription de l'engagement. Pour en savoir plus, consultez la section Combiner les réservations et les remises sur engagement d'utilisation.

Pour créer une réservation partagée, utilisez l'outil gcloud ou l'API Compute Engine.

gcloud

Exécutez la commande gcloud beta compute reservations create avec les options --share-setting=projects et --share-with :

gcloud beta compute reservations create RESERVATION_NAME \
    --machine-type=MACHINE_TYPE \
    --min-cpu-platform=MINIMUM_CPU_PLATFORM \
    --vm-count=NUMBER_OF_VMS \
    --accelerator=count=NUMBER_OF_ACCELERATORS,type=ACCELERATOR_TYPE \
    --local-ssd=size=375,interface=INTERFACE_1 \
    --local-ssd=size=375,interface=INTERFACE_2 \
    --zone=ZONE \
    --project=OWNER_PROJECT_ID \
    --share-setting=projects \
    --share-with=CONSUMER_PROJECT_IDS
    

Remplacez les éléments suivants :

  • RESERVATION_NAME : le nom de la réservation à créer.
  • MACHINE_TYPE : un type de machine prédéfini ou personnalisé.

    • Pour les types de machines prédéfinis, utilisez le format MACHINE_FAMILY-standard-CPUS (par exemple, n2-standard-4).
    • Pour les types de machines personnalisés, utilisez le format MACHINE_FAMILY-custom-CPUS-MEMORY (par exemple, n2-custom-4-5120). Pour afficher la liste complète des restrictions, lisez les spécifications qui s'appliquent aux types de machines personnalisés.

    Remplacez les éléments suivants :

    • MACHINE_FAMILY : la famille de types de machines. Par exemple, spécifiez n2 pour les VM N2.
    • CPUS : le nombre de processeurs virtuels.
    • MEMORY : la mémoire totale de cette instance. La mémoire doit être un multiple de 256 Mo et doit être exprimée en Mo. Par exemple, pour créer une VM N2 avec 4 processeurs virtuels et 5 Go de mémoire (soit 5 120 Mo), utilisez n2-custom-4-5120.
  • MINIMUM_CPU_PLATFORM : la configuration minimale du processeur à utiliser pour chaque instance.

  • NUMBER_OF_VMS : le nombre d'instances de VM à réserver.

  • NUMBER_OF_ACCELERATORS : le nombre de GPU à ajouter, par instance.

  • ACCELERATOR_TYPE : le type d'accélérateur.

  • INTERFACE_1 et INTERFACE_2 : le type d'interface que les disques SSD locaux doivent utiliser pour chaque instance. Les options valides sont : scsi et nvme. La capacité de chaque disque SSD local est de 375 Go. Répétez l'option --local-ssd pour chaque disque SSD local que vous souhaitez ajouter, avec un maximum de 24 disques SSD locaux par instance.

  • ZONE : la zone dans laquelle vous devez réserver des ressources.

  • OWNER_PROJECT_ID (facultatif) : l'ID du projet pour lequel vous souhaitez créer cette réservation partagée. Si vous omettez l'option --project, le projet actuel est utilisé par défaut comme projet propriétaire.

  • CONSUMER_PROJECT_IDS : liste des identifiants des projets avec lesquels vous souhaitez partager cette réservation, séparés par une virgule (par exemple, project-1,project-2). Vous pouvez inclure entre 1 et 100 projets clients. Ces projets doivent appartenir à la même organisation que le projet propriétaire. N'incluez pas la valeur OWNER_PROJECT_ID, qui est déjà par défaut autorisée à utiliser cette réservation.

Vous devez inclure l'option --share-setting=projects pour partager cette réservation avec d'autres projets.

Vous pouvez également ajouter l'option --require-specific-reservation pour indiquer que seules les instances de VM qui ciblent explicitement cette réservation peuvent l'utiliser.

Par exemple, pour effectuer une réservation partagée dans us-central1-a qui n'est utilisable que lorsque cette réservation est spécifiquement ciblée, utilisez une commande semblable à la suivante. Cet exemple réserve 10 machines personnalisées, chacune dotée de huit processeurs virtuels Intel Haswell (ou plus récents), de 10 Go de mémoire, de deux GPU V100 et d'un disque SSD local de 375 Go. L'exemple de réservation partagée est créé dans le projet my-owner-project et peut être utilisé par my-owner-project, project-1 ou project-2.

gcloud beta compute reservations create my-reservation \
    --machine-type=custom-8-10240 \
    --min-cpu-platform="Intel Haswell" \
    --vm-count=10 \
    --accelerator=count=2,type=nvidia-tesla-v100 \
    --local-ssd=size=375,interface=scsi \
    --zone=us-central1-c \
    --project=my-owner-project \
    --share-setting=projects \
    --share-with=project-1,project-2 \
    --require-specific-reservation
 

API

Envoyez une requête POST à la méthode bêta reservations.insert et incluez le champ shareSetting. Définissez le champ "shareType" sur "SPECIFIC_PROJECTS" et le champ "projects" sur une liste d'ID de projet séparés par des virgules.

POST https://compute.googleapis.com/compute/beta/projects/OWNER_PROJECT_ID/zones/ZONE/reservations

{
  "name":"RESERVATION_NAME",
  "specificReservation":{
    "count":"NUMBER_OF_VMS",
    "instanceProperties":{
      "machineType":"MACHINE_TYPE",
      "minCpuPlatform": "MINIMUM_CPU_PLATFORM",
      "guestAccelerators":[
        {
          "acceleratorCount":"NUMBER_OF_ACCELERATORS",
          "acceleratorType":"ACCELERATOR_TYPE"
        }
      ],
      "localSsds":[
        {
          "diskSizeGb":"375",
          "interface":"INTERFACE_1"
        },
        {
          "diskSizeGb":"375",
          "interface":"INTERFACE_2"
        }
      ]
    }
  },
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projects": ["CONSUMER_PROJECT_ID_1", "CONSUMER_PROJECT_ID_2"],
  }
}

Remplacez les éléments suivants :

  • OWNER_PROJECT_ID: ID du projet que vous souhaitez définir comme propriétaire et qui crée cette réservation.
  • ZONE : la zone dans laquelle vous devez réserver des ressources.
  • RESERVATION_NAME : le nom de la réservation à créer.
  • NUMBER_OF_VMS : le nombre d'instances de VM à réserver.
  • MACHINE_TYPE : un type de machine prédéfini ou personnalisé.

    • Pour les types de machines prédéfinis, utilisez le format MACHINE_FAMILY-standard-CPUS (par exemple, n2-standard-4).
    • Pour les types de machines personnalisés, utilisez le format MACHINE_FAMILY-custom-CPUS-MEMORY (par exemple, n2-custom-4-5120). Pour afficher la liste complète des restrictions, lisez les spécifications qui s'appliquent aux types de machines personnalisés.

    Remplacez les éléments suivants :

    • MACHINE_FAMILY : la famille de types de machines. Par exemple, spécifiez n2 pour les VM N2.
    • CPUS : le nombre de processeurs virtuels.
    • MEMORY : la mémoire totale de cette instance. La mémoire doit être un multiple de 256 Mo et doit être exprimée en Mo. Par exemple, pour créer une VM N2 avec 4 processeurs virtuels et 5 Go de mémoire (soit 5 120 Mo), utilisez n2-custom-4-5120.
  • MINIMUM_CPU_PLATFORM : la configuration minimale du processeur à utiliser pour chaque instance.

  • NUMBER_OF_ACCELERATORS : le nombre de GPU à ajouter, par instance.

  • ACCELERATOR_TYPE : le type d'accélérateur.

  • INTERFACE_1 et INTERFACE_2 : le type d'interface que les disques SSD locaux doivent utiliser pour chaque instance. Les options valides sont : scsi et nvme. La capacité de chaque disque SSD local est de 375 Go. Répétez les champs localSsds.diskSizeGb et localSsds.interface pour chaque disque SSD local que vous souhaitez ajouter, avec un maximum de 24 disques SSD locaux par instance.

  • CONSUMER_PROJECT_ID_1 et CONSUMER_PROJECT_ID_2 : identifiants des projets que vous souhaitez partager avec cette réservation, entourés de guillemets, dans une liste d'éléments séparés par une virgule (par exemple, "project-1", "project-2"). Vous pouvez inclure entre 1 et 100 projets clients. Ces projets doivent appartenir à la même organisation que le projet propriétaire. N'incluez pas la valeur OWNER_PROJECT_ID, qui est déjà par défaut autorisée à utiliser cette réservation.

Vous pouvez également ajouter le champ "specificReservationRequired": true, comme illustré dans l'exemple suivant, pour indiquer que seules les instances de VM ciblant explicitement cette réservation peuvent l'utiliser.

Par exemple, pour effectuer une réservation partagée dans us-central1-a qui n'est utilisable que lorsque cette réservation est spécifiquement ciblée, utilisez une commande semblable à la suivante. Cet exemple réserve 10 machines personnalisées, chacune dotée de huit processeurs virtuels Intel Haswell (ou plus récents), de 10 Go de mémoire, de deux GPU V100 et d'un disque SSD local de 375 Go. L'exemple de réservation partagée est créé par le projet my-owner-project et peut être utilisé par my-owner-project, project-1 ou project-2.

POST https://compute.googleapis.com/compute/beta/projects/my-owner-project/zones/us-central1-a/reservations

{
  "name": "reservation-1",
  "specificReservation":
  {
    "count": "10",
    "instanceProperties":
    {
      "machineType": "custom-8-10240",
      "minCpuPlatform": "Intel Haswell",
      "guestAccelerators":
      [
        {
          "acceleratorCount": 2,
          "acceleratorType": "nvidia-tesla-v100"
        }
      ],
      "localSsds":
      [
        {
          "diskSizeGb": "375",
          "interface": "SCSI"
        }
      ]
    }
  },
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projects": ["project-1", "project-2"],
  }
  "specificReservationRequired": true
}

Pour afficher votre réservation créée, par exemple pour vérifier si elle a été consommée automatiquement par des instances, décrivez la réservation.

Si cette réservation ne consomme pas d'instances contrairement à ce que vous attendiez, consultez la section Garantir l'utilisation des réservations.

Étape suivante