Créer des VM de manière groupée avec la flexibilité des instances

Ce document explique comment spécifier la flexibilité des instances lorsque vous créez des machines virtuelles (VM) de manière groupée. Lorsque vous effectuez cette spécification, vous indiquez une liste de types de machines adaptés aux VM. Compute Engine provisionne les VM en utilisant l'un des types de machines spécifiés en fonction de la capacité et de la disponibilité des quotas dans une région.

Pour en savoir plus sur la flexibilité des instances pour les VM créées de manière groupée, consultez À propos de la flexibilité des instances pour les VM créées de manière groupée.

Avant de commencer

Rôles requis

Pour obtenir les autorisations nécessaires à la création de VM de manière groupée, 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 des VM de manière groupée. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour créer des VM de manière groupée :

  • compute.instances.create sur le projet
  • Pour créer la VM à l'aide d'une image personnalisée : compute.images.useReadOnly sur l'image
  • Pour créer la VM à l'aide d'un instantané : compute.snapshots.useReadOnly sur l'instantané
  • Pour créer la VM à l'aide d'un modèle d'instance : compute.instanceTemplates.useReadOnly sur le modèle d'instance
  • Pour spécifier un sous-réseau pour la VM : compute.subnetworks.use sur le projet ou sur le sous-réseau choisi
  • Pour spécifier une adresse IP statique pour la VM : compute.addresses.use sur le projet
  • Pour attribuer une adresse IP externe à la VM en cas d'utilisation d'un réseau VPC : compute.subnetworks.useExternalIp sur le projet ou sur le sous-réseau choisi
  • Pour attribuer un ancien réseau à la VM : compute.networks.use sur le projet
  • Pour attribuer une adresse IP externe à la VM en cas d'utilisation d'un ancien réseau : compute.networks.useExternalIp sur le projet
  • Pour définir les métadonnées d'instance de VM pour la VM : compute.instances.setMetadata sur le projet
  • Pour définir des tags pour la VM : compute.instances.setTags sur la VM
  • Pour définir des étiquettes pour la VM : compute.instances.setLabels sur la VM
  • Pour définir un compte de service que doit utiliser la VM : compute.instances.setServiceAccount sur la VM
  • Pour créer un disque pour la VM : compute.disks.create sur le projet
  • Pour associer un disque existant en mode lecture seule ou en mode lecture-écriture : compute.disks.use sur le disque
  • Pour associer un disque existant en mode lecture seule : compute.disks.useReadOnly sur le disque

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Créer des VM avec plusieurs types de machines de préférence égale

Si votre charge de travail peut fonctionner sur plusieurs types de machines différents, vous pouvez spécifier une liste de tous les types de machines compatibles dans une seule sélection d'instance. Les exemples suivants montrent comment spécifier plusieurs types de machines de préférence égale.

gcloud

Pour créer des VM de manière groupée avec une sélection d'instance unique, utilisez la commande gcloud compute instances bulk create avec l'option --instance-selection-machine-types.

gcloud compute instances bulk create \
    --name-pattern=NAME_PATTERN \
    --region=REGION \
    --count=COUNT \
    --instance-selection-machine-types=MACHINE_TYPE_1,MACHINE_TYPE_2

Remplacez les éléments suivants :

  • COUNT : nombre de VM à créer
  • NAME_PATTERN : modèle de nom des VM
  • MACHINE_TYPE_1, MACHINE_TYPE_2 : types de machines à utiliser pour les VM
  • REGION : région dans laquelle créer les VM

Exemple

gcloud compute instances bulk create \
    --name-pattern=test-bulk-# \
    --region=us-central1 \
    --count=10 \
    --instance-selection-machine-types=c3-standard-8,n2-standard-8,c2-standard-8

REST

Dans l'API Compute Engine, envoyez une requête POST à la méthode regionInstances.bulkInsert. Dans le corps de la requête, incluez instanceFlexibilityPolicy avec une entrée instanceSelections qui liste les types de machines.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
  "count": COUNT,
  "namePattern": "NAME_PATTERN",
  "instanceProperties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "networkInterfaces": [{}]
  },
  "instanceFlexibilityPolicy": {
    "instanceSelections": {
      "selection-1": {
        "machineTypes": [
          "MACHINE_TYPE_1",
          "MACHINE_TYPE_2"
        ]
      }
    }
  }
}

Remplacez les éléments suivants :

  • COUNT : nombre de VM à créer
  • NAME_PATTERN : modèle de nom des VM
  • MACHINE_TYPE_1, MACHINE_TYPE_2 : types de machines à utiliser pour les VM
  • IMAGE_PROJECT : projet contenant l'image
  • IMAGE : nom de l'image ou de la famille d'images à utiliser
  • PROJECT_ID : ID de votre projet
  • REGION : région dans laquelle créer les VM

Exemple

POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1/instances/bulkInsert
{
  "count": 10,
  "namePattern": "test-bulk-#",
  "instanceProperties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/debian-12"
        }
      }
    ],
    "networkInterfaces": [{}]
  },
  "instanceFlexibilityPolicy": {
    "instanceSelections": {
      "selection-1": {
        "machineTypes": [
          "c3-standard-8",
          "n2-standard-8",
          "c2-standard-8"
        ]
      }
    }
  }
}

Créer des VM avec plusieurs types de machines classés par préférence

Si vous souhaitez que Compute Engine choisisse les types de machines dans un ordre spécifique, vous pouvez configurer plusieurs sélections d'instances. Chaque sélection d'instance inclut une liste de types de machines et un classement, qui est un entier définissant la préférence pour les types de machines. Un rang inférieur indique une préférence plus élevée. Compute Engine tente de créer des VM à l'aide de types de machines ayant une préférence plus élevée (classement inférieur). Si ces types de machines ne sont pas disponibles, Compute Engine utilise des types de machines avec une préférence inférieure (rang supérieur).

Les exemples suivants montrent comment spécifier plusieurs sélections d'instances avec des rangs.

gcloud

Pour créer des VM de manière groupée avec plusieurs sélections d'instances, utilisez la commande gcloud compute instances bulk create et spécifiez l'option --instance-selection plusieurs fois.

gcloud compute instances bulk create \
    --name-pattern=NAME_PATTERN \
    --region=REGION \
    --count=COUNT \
    --instance-selection "name=INSTANCE_SELECTION_1,rank=0,machine-type=MACHINE_TYPE_1,machine-type=MACHINE_TYPE_2" \
    --instance-selection "name=INSTANCE_SELECTION_2,rank=1,machine-type=MACHINE_TYPE_3,machine-type=MACHINE_TYPE_4"

Remplacez les éléments suivants :

  • COUNT : nombre de VM à créer
  • NAME_PATTERN : modèle de nom des VM
  • INSTANCE_SELECTION_1 : nom de la première sélection d'instances
  • INSTANCE_SELECTION_2 : nom de la deuxième sélection d'instances
  • MACHINE_TYPE_1, MACHINE_TYPE_2 : types de machines pour la première sélection d'instances
  • MACHINE_TYPE_3, MACHINE_TYPE_4 : types de machine pour la deuxième sélection d'instance
  • REGION : région dans laquelle créer les VM

Exemple

gcloud compute instances bulk create \
    --name-pattern=test-bulk-# \
    --region=us-central1 \
    --count=10 \
    --instance-selection "name=most-preferred,rank=0,machine-type=c3-standard-16,machine-type=n2-standard-16, machine-type=c2-standard-16" \
    --instance-selection "name=least-preferred,rank=1,machine-type=c3-standard-8,machine-type=n2-standard-8, machine-type=c2-standard-8"

REST

Dans l'API Compute Engine, envoyez une requête POST à la méthode regionInstances.bulkInsert. Dans le corps de la requête, incluez instanceFlexibilityPolicy et spécifiez plusieurs entrées dans instanceSelections, chacune avec une liste de types de machines et un rank.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
  "count": COUNT,
  "namePattern": "NAME_PATTERN",
  "instanceProperties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "networkInterfaces": [{}]
  },
  "instanceFlexibilityPolicy": {
    "instanceSelections": {
      "INSTANCE_SELECTION_1": {
        "machineTypes": [
          "MACHINE_TYPE_1",
          "MACHINE_TYPE_2"
        ],
        "rank": 1
      },
      "INSTANCE_SELECTION_2": {
        "machineTypes": [
          "MACHINE_TYPE_3",
          "MACHINE_TYPE_4"
        ],
        "rank": 2
      }
    }
  }
}

Remplacez les éléments suivants :

  • COUNT : nombre de VM à créer
  • NAME_PATTERN : modèle de nommage des VM
  • INSTANCE_SELECTION_1 : nom de la première sélection d'instances
  • INSTANCE_SELECTION_2 : nom de la deuxième sélection d'instances
  • MACHINE_TYPE_1, MACHINE_TYPE_2 : types de machines pour la première sélection d'instances
  • MACHINE_TYPE_3, MACHINE_TYPE_4 : types de machine pour la deuxième sélection d'instance
  • IMAGE_PROJECT : projet contenant l'image
  • IMAGE : nom de l'image ou de la famille d'images à utiliser
  • PROJECT_ID : ID de votre projet
  • REGION : région dans laquelle créer les VM

Exemple

POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1/instances/bulkInsert
{
  "count": 10,
  "namePattern": "test-bulk-#",
  "instanceProperties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/debian-12"
        }
      }
    ],
    "networkInterfaces": [{}]
  },
  "instanceFlexibilityPolicy": {
    "instanceSelections": {
      "most-preferred": {
        "machineTypes": [
          "c3-standard-16",
          "c2-standard-16"
        ],
        "rank": 1
      },
      "least-preferred": {
        "machineTypes": [
          "n2-standard-16",
          "c3-standard-8",
          "n2-standard-8",
          "c2-standard-8"
        ],
        "rank": 2
      }
    }
  }
}

Spécifier des remplacements de disque dans les sélections d'instances

Par défaut, les VM créées par une requête groupée utilisent la configuration de disque de instanceProperties. Toutefois, vous pouvez spécifier des configurations de disque dans une sélection d'instances. Si vous spécifiez des disques dans une sélection d'instances, cette configuration de disque remplace celle de instanceProperties pour les VM qui utilisent cette sélection d'instances.

L'exemple suivant montre comment spécifier des disques dans les sélections d'instances.

REST

Dans l'API Compute Engine, envoyez une requête POST à la méthode regionInstances.bulkInsert. Dans le corps de la requête, incluez instanceFlexibilityPolicy et, pour toute entrée instanceSelections, incluez le champ disks pour remplacer instanceProperties.disks.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
  "count": COUNT,
  "namePattern": "NAME_PATTERN",
  "instanceProperties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "networkInterfaces": [{}]
  },
  "instanceFlexibilityPolicy": {
    "instanceSelections": {
      "INSTANCE_SELECTION_1": {
        "machineTypes": [
          "MACHINE_TYPE_1",
          "MACHINE_TYPE_2"
        ],
        "disks": [
          {
            "type": "PERSISTENT",
            "initializeParams": {
              "diskType": "pd-ssd",
              "diskSizeGb": 50,
              "sourceImage": "projects/IMAGE_PROJECT_1/global/images/IMAGE_1"
            },
            "boot": true
          },
          {
            "type": "SCRATCH",
            "initializeParams": {
              "diskType": "local-ssd"
            }
          }
        ]
      },
      "INSTANCE_SELECTION_2": {
        "machineTypes": [
          "MACHINE_TYPE_3"
        ],
        "disks": [
          {
            "type": "PERSISTENT",
            "initializeParams": {
              "diskType": "hyperdisk-balanced",
              "diskSizeGb": 50,
              "sourceImage": "projects/IMAGE_PROJECT_2/global/images/IMAGE_2"
            },
            "boot": true
          },
          {
            "type": "PERSISTENT",
            "initializeParams": {
              "diskType": "hyperdisk-balanced",
              "diskSizeGb": 128,
              "sourceImage": "projects/IMAGE_PROJECT_3/global/images/IMAGE_1"
            }
          }
        ]
      }
    }
  }
}

Remplacez les éléments suivants :

  • COUNT : nombre de VM à créer
  • NAME_PATTERN : modèle de nommage des VM
  • INSTANCE_SELECTION_1 : nom de la première sélection d'instances
  • INSTANCE_SELECTION_2 : nom de la deuxième sélection d'instances
  • MACHINE_TYPE_1, MACHINE_TYPE_2, MACHINE_TYPE_3 : types de machines à utiliser pour les VM
  • IMAGE_PROJECT : projet contenant l'image
  • IMAGE : nom de l'image ou de la famille d'images à utiliser
  • PROJECT_ID : ID de votre projet
  • REGION : région dans laquelle créer les VM