Créer un volume Hyperdisk


Vous pouvez utiliser un volume Hyperdisk Extreme ou Hyperdisk Throughput avec votre VM en effectuant les tâches suivantes:

  • Créez un volume Hyperdisk vide, non amorçable et zonal, puis associez-le à votre VM lors de sa création ou dans des tâches distinctes.
  • Formatez et installez le volume pour fournir l'accès à un système de données ou de fichiers.

Le processus est le même pour les volumes Hyperdisk Balanced, sauf que vous pouvez également créer des disques de démarrage de type Hyperdisk Balanced.

Pour obtenir des informations générales sur l'Hyperdisk, consultez la page À propos de l'Hyperdisk.

Avant de commencer

  • Passez en revue les limites de l'Hyperdisk avant d'ajouter un volume d'Hyperdisk à votre VM.
  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification est le processus permettant de valider votre identité pour accéder aux services et aux API Google Cloud. 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:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Go

      Pour utiliser les exemples Go de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Pour en savoir plus, consultez Set up authentication for a local development environment.

      Java

      Pour utiliser les exemples Java de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Pour en savoir plus, consultez Set up authentication for a local development environment.

      Node.js

      Pour utiliser les exemples Node.js de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Pour en savoir plus, consultez Set up authentication for a local development environment.

      REST

      Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Google Cloud.

Rôles et autorisations requis

Pour obtenir les autorisations nécessaires pour ajouter un volume Hyperdisk à votre VM, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet:

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.

Ces rôles prédéfinis contiennent les autorisations requises pour ajouter un volume Hyperdisk à votre VM. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Vous devez disposer des autorisations suivantes pour ajouter un volume Hyperdisk à votre VM :

  • Pour créer et associer un volume Hyperdisk, procédez comme suit :
    • compute.disks.create sur le projet
    • compute.instances.attachDisk sur la VM.
    • compute.disks.use sur le volume que vous souhaitez associer à la VM.
  • Pour formater et installer le volume associé : compute.instances.setMetadata sur la VM

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

Valeurs acceptées pour les volumes hyperdisques

Les valeurs que vous utilisez lors de la création ou de la modification d'un volume Hyperdisk doivent se trouver dans la plage de valeurs maximales et minimales décrite dans la section Limites Hyperdisk par disque.

Si vous modifiez la taille d'un volume Hyperdisk associé à une VM, les nouvelles valeurs ne doivent pas dépasser les limites Hyperdisk par VM.

Les IOPS et le débit provisionnés pour un volume Hyperdisk doivent respecter les règles décrites dans la section À propos du provisionnement des IOPS et du débit pour Hyperdisk.

Ajouter un volume Hyperdisk à votre VM

Vous pouvez créer et associer un volume Hyperdisk à l'aide de la console Google Cloud, de la Google Cloud CLI ou de REST.

La taille, le débit et les IOPS que vous spécifiez lors de la création d'un volume Hyperdisk doivent se trouver dans la plage des valeurs acceptées.

Lorsque vous créez un volume Hyperdisk équilibré ou Hyperdisk équilibré à haute disponibilité (preview), vous pouvez autoriser plusieurs VM à accéder au disque en le créant en mode écriture simultanée.

Console

  1. Accédez à la page Instances de VM.

    Accéder à la page "Instances de VM"

  2. Cliquez sur le nom de la VM à laquelle vous souhaitez ajouter un disque.

  3. Sur la page Informations sur l'instance de VM, cliquez sur Modifier.

  4. Dans l'en-tête Disques supplémentaires, cliquez sur Ajouter un disque.

  5. Spécifiez un nom pour le disque et ajoutez éventuellement une description. Sélectionnez Disque vide comme Type de source du disque.

  6. Sous Paramètres du disque, choisissez un type de disque dans la liste suivante. Les valeurs que vous spécifiez doivent être comprises dans la plage des valeurs acceptées.

    1. Hyperdisk équilibré. Vous pouvez également modifier les paramètres par défaut pour la Taille, les IOPS provisionnées et le Débit provisionné du disque.
    2. Hyperdisk Extreme. Vous pouvez également modifier les paramètres par défaut de taille et d'IOPS provisionnées du disque.
    3. Hyperdisk ML. Vous pouvez également modifier les paramètres par défaut de taille et de débit provisionné du disque.
    4. Hyperdisk Throughput. Vous pouvez également modifier les paramètres par défaut de taille et de débit provisionné du disque.
  7. Facultatif: pour les volumes Hyperdisk équilibré ou Hyperdisk équilibré à haute disponibilité (preview), vous pouvez activer l'association du disque à plusieurs VM en créant le disque en mode écriture simultanée. Sous Mode d'accès, sélectionnez Plusieurs VM en lecture/écriture.

  8. Cliquez sur Enregistrer.

  9. Pour appliquer vos modifications à la VM, cliquez sur Enregistrer.

gcloud

  1. Utilisez la commande gcloud compute disks create pour créer le volume hyperdisque.

    gcloud compute disks create DISK_NAME \
       --zone=ZONE \
       --size=DISK_SIZE \
       --type=DISK_TYPE \
       --provisioned-iops=IOPS_LIMIT
       --provisioned-throughput=THROUGHPUT_LIMIT
       --access-mode=DISK_ACCESS_MODE
    

    Remplacez les éléments suivants :

    • DISK_NAME : le nom du nouveau disque.
    • ZONE : le nom de la zone dans laquelle le disque est en cours de création.
    • DISK_SIZE : Facultatif : taille du nouveau disque. La valeur doit être un nombre entier suivi d'une unité de taille (Go pour des gibioctets, To pour des tébioctets). Si aucune unité de taille n'est spécifiée, la valeur par défaut est 100 Go. Les valeurs acceptées pour la taille du disque sont les suivantes :
      • Hyperdisk Balanced : de 4 Gio à 64 Tio inclus, par incréments de 1 Gio.
      • Hyperdisk Extreme : de 64 Gio à 64 Tio inclus, par incréments de 1 Gio.
      • Hyperdisk ML: de 4 Gio à 64 Tio inclus, par incréments de 1 Gio.
      • Hyperdisk Throughput : de 2 Tio à 32 Tio inclus, par incréments de 1 Gio.
    • DISK_TYPE : le type de disque. Utilisez l'une des valeurs suivantes: hyperdisk-balanced, hyperdisk-extreme, hyperdisk-ml ou hyperdisk-throughput.
    • IOPS_LIMIT : Facultatif : Pour les disques Hyperdisk Balanced ou Hyperdisk Extreme, il s'agit du nombre d'opérations d'E/S par seconde (IOPS) que le disque peut gérer.
    • THROUGHPUT_LIMIT: Facultatif: pour les volumes Hyperdisk Balanced, Hyperdisk ML ou Hyperdisk Throughput, il s'agit d'un entier représentant le débit, mesuré en Mio par seconde, que le disque peut gérer.
    • DISK_ACCESS_MODE : (facultatif) Comment les VM peuvent accéder aux données du disque. Les valeurs compatibles sont :

      • READ_WRITE_SINGLE, pour un accès en lecture/écriture à partir d'une VM. Il s'agit de la valeur par défaut.
      • READ_WRITE_MANY, pour un accès en lecture/écriture à partir de plusieurs VM.
      • READ_ONLY_MANY, pour un accès en lecture seule à partir de plusieurs VM.

      Vous pouvez définir le mode d'accès pour les types de disques suivants:

  2. Facultatif : Utilisez la commande gcloud compute disks describe DISK_NAME pour afficher la description de votre disque.

  3. Après avoir créé le disque, vous pouvez l'associer à une VM.

REST

  1. Envoyez une requête POST pour créer un Hyperdisk zonal à l'aide de la méthode disks.insert. Incluez les propriétés name, sizeGb, type, provisionedIops et provisionedThroughput. Pour créer un disque non amorçable vide et non formaté, ne spécifiez pas d'image source, ni d'instantané source.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks
    {
       "name": "DISK_NAME",
       "sizeGb": "DISK_SIZE",
       "type": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE",
       "provisionedIops": "IOPS_LIMIT",
       "provisionedThroughput": "THROUGHPUT_LIMIT",
       "accessMode": "DISK_ACCESS_MODE"
    }
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • ZONE : la zone dans laquelle se trouvent l'instance et le disque.
    • DISK_NAME : le nom du nouveau disque
    • DISK_SIZE (facultatif) : taille du nouveau disque. La valeur doit être un nombre entier suivi d'une unité de taille (GB pour des gibioctets, TB pour des tébioctets).
    • DISK_TYPE : le type de disque. Pour créer un volume Hyperdisk, utilisez l'une des valeurs suivantes : hyperdisk-balanced, hyperdisk-extreme, hyperdisk-ml ou hyperdisk-throughput.
    • IOPS_LIMIT (facultatif) : pour les volumes Hyperdisk Balanced et Hyperdisk Extreme, il s'agit du nombre d'opérations d'E/S par seconde que le disque peut gérer.
    • THROUGHPUT_LIMIT: Facultatif: pour les volumes Hyperdisk Balanced, Hyperdisk ML ou Hyperdisk Throughput, il s'agit d'un entier représentant le débit, mesuré en Mio par seconde, que le disque peut gérer.
    • DISK_ACCESS_MODE : le mode d'accès des VM aux données du disque. Les valeurs compatibles sont :

      • READ_WRITE_SINGLE, pour un accès en lecture/écriture à partir d'une VM. Il s'agit de la valeur par défaut.
      • READ_WRITE_MANY, pour un accès en lecture/écriture à partir de plusieurs VM.
      • READ_ONLY_MANY, pour un accès en lecture seule à partir de plusieurs VM.

      Vous pouvez définir le mode d'accès pour les types de disques suivants:

  2. Facultatif : Utilisez la méthode compute.disks.get pour afficher la description de votre disque

  3. Après avoir créé le disque, vous pouvez l'associer à n'importe quelle VM en cours d'exécution ou arrêtée.

Go

// createHyperdisk creates a new Hyperdisk in the specified project and zone.
func createHyperdisk(w io.Writer, projectId, zone, diskName string) error {
	//   projectID := "your_project_id"
	//   zone := "europe-central2-b"
	//   diskName := "your_disk_name"

	ctx := context.Background()
	client, err := compute.NewDisksRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewDisksRESTClient: %v", err)
	}
	defer client.Close()

	// use format "zones/{zone}/diskTypes/(hyperdisk-balanced|hyperdisk-throughput)".
	diskType := fmt.Sprintf("zones/%s/diskTypes/hyperdisk-balanced", zone)

	// Create the disk
	disk := &computepb.Disk{
		Name:   proto.String(diskName),
		Type:   proto.String(diskType),
		SizeGb: proto.Int64(10),
		Zone:   proto.String(zone),
	}

	req := &computepb.InsertDiskRequest{
		Project:      projectId,
		Zone:         zone,
		DiskResource: disk,
	}

	op, err := client.Insert(ctx, req)
	if err != nil {
		return fmt.Errorf("Insert disk request failed: %v", err)
	}

	// Wait for the insert disk operation to complete
	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Hyperdisk created: %v\n", diskName)
	return nil
}

Java


import com.google.cloud.compute.v1.Disk;
import com.google.cloud.compute.v1.DisksClient;
import com.google.cloud.compute.v1.InsertDiskRequest;
import com.google.cloud.compute.v1.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateHyperdisk {
  public static void main(String[] args)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project you want to use.
    String projectId = "YOUR_PROJECT_ID";
    // Name of the zone in which you want to create the disk.
    String zone = "europe-central2-b";
    // Name of the disk you want to create.
    String diskName = "YOUR_DISK_NAME";
    // The type of disk you want to create. This value uses the following format:
    // "zones/{zone}/diskTypes/(hyperdisk-balanced|hyperdisk-extreme|hyperdisk-throughput)".
    // For example: "zones/us-west3-b/diskTypes/hyperdisk-balanced"
    String diskType = String.format("zones/%s/diskTypes/hyperdisk-balanced", zone);
    // Size of the new disk in gigabytes.
    long diskSizeGb = 10;
    // Optional: For Hyperdisk Balanced or Hyperdisk Extreme disks,
    // this is the number of I/O operations per second (IOPS) that the disk can handle
    long provisionedIops = 3000;
    // Optional: For Hyperdisk Balanced or Hyperdisk Throughput volumes,
    // this is an integer that represents the throughput,
    // measured in MiB per second, that the disk can handle.
    long provisionedThroughput = 140;

    createHyperdisk(projectId, zone, diskName, diskType, diskSizeGb,
            provisionedIops, provisionedThroughput);
  }

  // Creates a hyperdisk in a project
  public static Disk createHyperdisk(String projectId, String zone, String diskName,
                                     String diskType, long diskSizeGb, long provisionedIops,
                                     long provisionedThroughput)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (DisksClient client = DisksClient.create()) {
      // Create a disk.
      Disk disk = Disk.newBuilder()
              .setZone(zone)
              .setName(diskName)
              .setType(diskType)
              .setSizeGb(diskSizeGb)
              .setProvisionedIops(provisionedIops)
              .setProvisionedThroughput(provisionedThroughput)
              .build();

      InsertDiskRequest request = InsertDiskRequest.newBuilder()
              .setProject(projectId)
              .setZone(zone)
              .setDiskResource(disk)
              .build();

      // Wait for the insert disk operation to complete.
      Operation operation = client.insertAsync(request).get(1, TimeUnit.MINUTES);

      if (operation.hasError()) {
        System.out.println("Disk creation failed!");
        throw new Error(operation.getError().toString());
      }

      // Wait for server update
      TimeUnit.SECONDS.sleep(10);

      Disk hyperdisk = client.get(projectId, zone, diskName);

      System.out.printf("Hyperdisk '%s' has been created successfully", hyperdisk.getName());

      return hyperdisk;
    }
  }
}

Node.js

// Import the Compute library
const computeLib = require('@google-cloud/compute');
const compute = computeLib.protos.google.cloud.compute.v1;

// Instantiate a diskClient
const disksClient = new computeLib.DisksClient();
// Instantiate a zoneOperationsClient
const zoneOperationsClient = new computeLib.ZoneOperationsClient();

/**
 * TODO(developer): Update/uncomment these variables before running the sample.
 */
// Project ID or project number of the Google Cloud project you want to use.
const projectId = await disksClient.getProjectId();

// The zone where your VM and new disk are located.
// zone = 'europe-central2-b';

// The name of the new disk
// diskName = 'disk-name';

// The type of disk. This value uses the following format:
// "zones/{zone}/diskTypes/(hyperdisk-balanced|hyperdisk-extreme|hyperdisk-ml|hyperdisk-throughput)".
// For example: "zones/us-west3-b/diskTypes/hyperdisk-balanced"
const diskType = `zones/${zone}/diskTypes/hyperdisk-balanced`;
// Size of the new disk in gigabytes.
const diskSizeGb = 10;
// Optional: For Hyperdisk Balanced or Hyperdisk Extreme disks,
// this is the number of I/O operations per second (IOPS) that the disk can handle.
const provisionedIops = 3000;
// Optional: For Hyperdisk Balanced or Hyperdisk Throughput volumes,
// this is an integer that represents the throughput,
// measured in MiB per second, that the disk can handle.
const provisionedThroughput = 140;

async function callCreateComputeHyperdisk() {
  // Create a disk
  const disk = new compute.Disk({
    sizeGb: diskSizeGb,
    name: diskName,
    zone,
    type: diskType,
    provisionedIops,
    provisionedThroughput,
  });

  const [response] = await disksClient.insert({
    project: projectId,
    zone,
    diskResource: disk,
  });

  let operation = response.latestResponse;

  // Wait for the create disk operation to complete.
  while (operation.status !== 'DONE') {
    [operation] = await zoneOperationsClient.wait({
      operation: operation.name,
      project: projectId,
      zone: operation.zone.split('/').pop(),
    });
  }

  console.log(`Disk: ${diskName} created.`);
}

await callCreateComputeHyperdisk();

Après avoir créé le disque, vous pouvez l'associer à n'importe quelle VM en cours d'exécution ou arrêtée.

Formater et installer le disque

Après avoir créé et associé le disque à une VM, vous devez le formater et l'installer afin que le système d'exploitation puisse utiliser l'espace de stockage disponible.

Étapes suivantes