Creare pool di archiviazione Hyperdisk


I pool di archiviazione Hyperdisk sono una nuova risorsa di archiviazione a blocchi che ti consente di gestire lo spazio di archiviazione a blocchi Hyperdisk in modo aggregato. I pool di archiviazione Hyperdisk sono disponibili nelle varianti Hyperdisk Throughput Storage Pool e Hyperdisk Balanced Storage Pool.

Quando crei un pool di archiviazione, devi specificare le seguenti proprietà:

  • Zona
  • Tipo di pool di archiviazione
  • Tipo di provisioning della capacità
  • Capacità sottoposta a provisioning del pool
  • Tipo provisioning prestazioni
  • IOPS e throughput riservati del pool

Puoi utilizzare i tipi di provisioning Capacità standard, Capacità avanzata, Prestazioni standard o Prestazioni avanzate con i pool di archiviazione Hyperdisk:

  • Capacità standard: la capacità allocata per ogni disco creato nel pool di archiviazione viene detratta dalla capacità totale allocata del pool di archiviazione.
  • Capacità avanzata: il pool di archiviazione trae vantaggio dal thin provisioning e dalla riduzione dei dati. Solo la quantità di dati effettivamente scritti viene detratta dalla capacità totale sottoposta a provisioning del pool di archiviazione.
  • Prestazioni standard: le prestazioni di cui è stato eseguito il provisioning per ogni disco creato nel pool di archiviazione vengono detratte dalle prestazioni totali di cui è stato eseguito il provisioning del pool di archiviazione.
  • Prestazioni avanzate: le prestazioni di cui è stato eseguito il provisioning per ogni disco beneficiano del provisioning a livello ridotto. Solo la quantità di prestazioni utilizzata da un disco viene detratta dal rendimento totale riservato del pool di archiviazione.

    Prima di iniziare

    • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è la procedura mediante la quale la tua identità viene verificata per l'accesso alle API e ai servizi Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

      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. Vai

        Per utilizzare gli Go esempi in questa pagina in un ambiente di sviluppo locale, installa e inizializza l'interfaccia alla gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

        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.

        Per ulteriori informazioni, consulta Set up authentication for a local development environment.

        Java

        Per utilizzare gli Java esempi in questa pagina in un ambiente di sviluppo locale, installa e inizializza l'interfaccia alla gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

        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.

        Per ulteriori informazioni, consulta Set up authentication for a local development environment.

        Node.js

        Per utilizzare gli Node.js esempi in questa pagina in un ambiente di sviluppo locale, installa e inizializza l'interfaccia alla gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

        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.

        Per ulteriori informazioni, consulta Set up authentication for a local development environment.

        REST

        Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.

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

          gcloud init

        Per ulteriori informazioni, consulta Eseguire l'autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.

    Ruoli e autorizzazioni richiesti

    Per ottenere le autorizzazioni necessarie per creare un pool di archiviazione, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

    • Amministratore istanze Compute (v1) (roles/compute.instanceAdmin.v1)
    • Per connetterti a un'istanza VM che può essere eseguita come account di servizio: Utente account di servizio (v1) (ruolo roles/iam.serviceAccountUser)

    Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

    Questi ruoli predefiniti contengono le autorizzazioni necessarie per creare un pool di archiviazione. Per visualizzare le autorizzazioni esatte richieste, espandi la sezione Autorizzazioni richieste:

    Autorizzazioni obbligatorie

    Per creare un pool di archiviazione sono necessarie le seguenti autorizzazioni:

    • compute.storagePools.create sul progetto
    • compute.storagePools.setLabels sul progetto

    Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

    Limitazioni

    Tieni presente le seguenti limitazioni durante la creazione di pool di archiviazione Hyperdisk:

    Limiti di risorse:

    • Puoi creare un pool di archiviazione Hyperdisk con una capacità di provisioning massima di 1 PiB.
    • Puoi creare un massimo di 5 pool di archiviazione all'ora.
    • Puoi creare un massimo di 10 pool di archiviazione al giorno.
    • Puoi creare al massimo 10 pool di archiviazione per progetto.
    • Non puoi modificare il modello di provisioning per un pool; non puoi cambiare un pool di archiviazione con capacità standard in un pool di archiviazione con capacità avanzata o da un pool di archiviazione con capacità avanzata in pool di archiviazione per prestazioni standard.
    • I pool di archiviazione sono una risorsa di zona.
    • Puoi creare fino a 1000 dischi in un pool di archiviazione.
    • Puoi utilizzare i pool di archiviazione Hyperdisk solo con Compute Engine. Le istanze Cloud SQL non possono utilizzare i pool di archiviazione Hyperdisk.
    • Puoi modificare la capacità o le prestazioni di un pool di archiviazione al massimo due volte in un periodo di 24 ore.

    Limiti per i dischi in un pool di archiviazione:

    • In un pool di archiviazione è possibile creare solo nuovi dischi nella stessa zona e nello stesso progetto.
    • Non è consentito spostare i dischi all'interno o all'esterno di un pool di archiviazione. Per spostare un disco all'interno o all'esterno di un pool di archiviazione, devi ricrearlo da uno snapshot. Per ulteriori informazioni, consulta Modificare il tipo di disco.
    • Per creare dischi di avvio in un pool di archiviazione, devi utilizzare un pool di archiviazione bilanciato Hyperdisk.
    • I pool di archiviazione non supportano i dischi regionali.
    • Non puoi clonare, creare snapshot istantanei o configurare la replica asincrona dei dischi permanenti per i dischi in un pool di archiviazione.
    • I dischi Hyperdisk bilanciati in un pool di archiviazione non possono essere collegati a più istanze di calcolo.

    Intervalli di capacità e limiti di prestazioni di cui è stato eseguito il provisioning

    Quando crei un pool di archiviazione, la capacità di provisioning, le IOPS e la velocità effettiva sono soggette ai limiti descritti in Limiti per i pool di archiviazione.

    Creare un pool di archiviazione Hyperdisk

    Per creare un nuovo pool di archiviazione Hyperdisk, utilizza la console Google Cloud, Google Cloud CLI o REST.

    Console

    1. Vai alla pagina Crea un pool di archiviazione nella console Google Cloud.
      Vai alla pagina Crea pool di archiviazione
    2. Nel campo Nome, inserisci un nome univoco per il pool di archiviazione.
    3. (Facoltativo) Nel campo Descrizione, inserisci una descrizione per il pool di archiviazione.
    4. Seleziona la Regione e la Zona in cui creare il pool di archiviazione.
    5. Scegli un valore per il Tipo di pool di archiviazione.
    6. Scegli un tipo di provisioning nel campo Tipo di capacità e specifica la capacità da eseguire il provisioning per il pool di archiviazione nel campo Capacità del pool di archiviazione. Puoi specificare una dimensione da 10 TiB a 1 PiB.

      Per creare un pool di archiviazione di grande capacità, potresti dover richiedere una quota più alta.

    7. Scegli un tipo di provisioning nel campo Tipo di prestazioni.

    8. Per i pool di archiviazione bilanciati Hyperdisk, nel campo IOPS sottoposte a provisioning, inserisci le IOPS da eseguire il provisioning per il pool di archiviazione.

    9. Per un pool di archiviazione Hyperdisk Throughput o Hyperdisk Balanced, nel campo Throughput riservato, inserisci il throughput da eseguire il provisioning per il pool di archiviazione.

    10. Fai clic su Invia per creare il pool di archiviazione.

    gcloud

    Per creare un pool di archiviazione Hyperdisk, utilizza il comando gcloud compute storage-pools create.

    gcloud compute storage-pools create NAME  \
        --zone=ZONE   \
        --storage-pool-type=STORAGE_POOL_TYPE   \
        --capacity-provisioning-type=CAPACITY_TYPE \
        --provisioned-capacity=POOL_CAPACITY   \
        --performance-provisioning-type=PERFORMANCE_TYPE \
        --provisioned-iops=IOPS   \
        --provisioned-throughput=THROUGHPUT   \
        --description=DESCRIPTION
    

    Sostituisci quanto segue:

    • NAME: il nome univoco del pool di archiviazione.
    • ZONE: la zona in cui creare il pool di archiviazione, ad esempio us-central1-a.
    • STORAGE_POOL_TYPE: il tipo di disco da archiviare nel pool di archiviazione. I valori consentiti sono hyperdisk-throughput e hyperdisk-balanced.
    • CAPACITY_TYPE: facoltativo, il tipo di provisioning della capacità del pool di archiviazione. I valori consentiti sono advanced e standard. Se non specificato, viene utilizzato il valore advanced.
    • POOL_CAPACITY: la capacità totale da eseguire il provisioning per il nuovo pool di archiviazione, specificata in GiB per impostazione predefinita.
    • PERFORMANCE_TYPE: facoltativo, il tipo di provisioning per le prestazioni del pool di archiviazione. I valori consentiti sono advanced e standard. Se non specificato, viene utilizzato il valore advanced.
    • IOPS: le IOPS da eseguire il provisioning per il pool di archiviazione. Puoi utilizzare questo flag solo con i pool di archiviazione Hyperdisk Balanced.
    • THROUGHPUT: la velocità in MB/s da eseguire il provisioning per il pool di archiviazione.
    • DESCRIPTION: facoltativo, una stringa di testo che descrive il pool di archiviazione.

    REST

    Crea una richiesta POST per creare un pool di archiviazione Hyperdisk utilizzando il metodo storagePools.insert.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/storagePools
    
    {
        "name": "NAME",
        "description": "DESCRIPTION",
        "poolProvisionedCapacityGb": "POOL_CAPACITY",
        "storagePoolType": "projects/PROJECT_ID/zones/ZONE/storagePoolTypes/STORAGE_POOL_TYPE",
        "poolProvisionedIops": "IOPS",
        "poolProvisionedThroughput": "THROUGHPUT",
        "capacityProvisioningType": "CAPACITY_TYPE",
        "performanceProvisioningType": "PERFORMANCE_TYPE"
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto
    • ZONE: la zona in cui creare il pool di archiviazione, ad esempio us-central1-a.
    • NAME: un nome univoco per il pool di archiviazione .
    • DESCRIPTION: facoltativo, una stringa di testo che descrive il pool di archiviazione.
    • POOL_CAPACITY: la capacità totale da eseguire il provisioning per il nuovo pool di archiviazione, specificata in GiB per impostazione predefinita.
    • STORAGE_POOL_TYPE: il tipo di disco da archiviare nel pool di archiviazione. I valori consentiti sono hyperdisk-throughput e hyperdisk-balanced.
    • IOPS: facoltativo, le IOPS da eseguire il provisioning per il pool di archiviazione. Puoi utilizzare questo flag solo con i pool di archiviazione Hyperdisk Balanced.
    • THROUGHPUT: facoltativo. La portata in MBps da eseguire il provisioning per il pool di archiviazione.
    • CAPACITY_TYPE: facoltativo, il tipo di provisioning della capacità del pool di archiviazione. I valori consentiti sono advanced e standard. Se non specificato, viene utilizzato il valore advanced.
    • PERFORMANCE_TYPE: facoltativo, il tipo di provisioning per le prestazioni del pool di archiviazione. I valori consentiti sono advanced e standard. Se non specificato, viene utilizzato il valore advanced.

    Vai

    
    // createHyperdiskStoragePool creates a new Hyperdisk storage pool in the specified project and zone.
    func createHyperdiskStoragePool(w io.Writer, projectId, zone, storagePoolName, storagePoolType string) error {
    	// projectID := "your_project_id"
    	// zone := "europe-west4-b"
    	// storagePoolName := "your_storage_pool_name"
    	// storagePoolType := "projects/**your_project_id**/zones/europe-west4-b/diskTypes/hyperdisk-balanced"
    
    	ctx := context.Background()
    	client, err := compute.NewStoragePoolsRESTClient(ctx)
    	if err != nil {
    		return fmt.Errorf("NewStoragePoolsRESTClient: %v", err)
    	}
    	defer client.Close()
    
    	// Create the storage pool resource
    	resource := &computepb.StoragePool{
    		Name:                        proto.String(storagePoolName),
    		Zone:                        proto.String(zone),
    		StoragePoolType:             proto.String(storagePoolType),
    		CapacityProvisioningType:    proto.String("advanced"),
    		PerformanceProvisioningType: proto.String("advanced"),
    		PoolProvisionedCapacityGb:   proto.Int64(10240),
    		PoolProvisionedIops:         proto.Int64(10000),
    		PoolProvisionedThroughput:   proto.Int64(1024),
    	}
    
    	// Create the insert storage pool request
    	req := &computepb.InsertStoragePoolRequest{
    		Project:             projectId,
    		Zone:                zone,
    		StoragePoolResource: resource,
    	}
    
    	// Send the insert storage pool request
    	op, err := client.Insert(ctx, req)
    	if err != nil {
    		return fmt.Errorf("Insert storage pool request failed: %v", err)
    	}
    
    	// Wait for the insert storage pool operation to complete
    	if err = op.Wait(ctx); err != nil {
    		return fmt.Errorf("unable to wait for the operation: %w", err)
    	}
    
    	// Retrieve and return the created storage pool
    	storagePool, err := client.Get(ctx, &computepb.GetStoragePoolRequest{
    		Project:     projectId,
    		Zone:        zone,
    		StoragePool: storagePoolName,
    	})
    	if err != nil {
    		return fmt.Errorf("Get storage pool request failed: %v", err)
    	}
    
    	fmt.Fprintf(w, "Hyperdisk Storage Pool created: %v\n", storagePool.GetName())
    	return nil
    }
    

    Java

    import com.google.cloud.compute.v1.InsertStoragePoolRequest;
    import com.google.cloud.compute.v1.Operation;
    import com.google.cloud.compute.v1.StoragePool;
    import com.google.cloud.compute.v1.StoragePoolsClient;
    import java.io.IOException;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.TimeUnit;
    import java.util.concurrent.TimeoutException;
    
    public class CreateHyperdiskStoragePool {
      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 storagePool.
        String zone = "us-central1-a";
        // Name of the storagePool you want to create.
        String storagePoolName = "YOUR_STORAGE_POOL_NAME";
        // The type of disk you want to create.
        // Storage types can be "hyperdisk-throughput" or "hyperdisk-balanced"
        String storagePoolType = String.format(
            "projects/%s/zones/%s/storagePoolTypes/hyperdisk-balanced", projectId, zone);
        // Optional: the capacity provisioning type of the storage pool.
        // The allowed values are advanced and standard. If not specified, the value advanced is used.
        String capacityProvisioningType = "advanced";
        // The total capacity to provision for the new storage pool, specified in GiB by default.
        long provisionedCapacity = 128;
        // the IOPS to provision for the storage pool.
        // You can use this flag only with Hyperdisk Balanced Storage Pools.
        long provisionedIops = 3000;
        // the throughput in MBps to provision for the storage pool.
        long provisionedThroughput = 140;
        // The allowed values are low-casing strings "advanced" and "standard".
        // If not specified, "advanced" is used.
        String performanceProvisioningType = "advanced";
    
        createHyperdiskStoragePool(projectId, zone, storagePoolName, storagePoolType,
                capacityProvisioningType, provisionedCapacity, provisionedIops,
            provisionedThroughput, performanceProvisioningType);
      }
    
      // Creates a hyperdisk storagePool in a project
      public static StoragePool createHyperdiskStoragePool(String projectId, String zone,
            String storagePoolName, String storagePoolType, String capacityProvisioningType,
            long capacity, long iops, long throughput, String performanceProvisioningType)
              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 (StoragePoolsClient client = StoragePoolsClient.create()) {
          // Create a storagePool.
          StoragePool resource = StoragePool.newBuilder()
                  .setZone(zone)
                  .setName(storagePoolName)
                  .setStoragePoolType(storagePoolType)
                  .setCapacityProvisioningType(capacityProvisioningType)
                  .setPoolProvisionedCapacityGb(capacity)
                  .setPoolProvisionedIops(iops)
                  .setPoolProvisionedThroughput(throughput)
                  .setPerformanceProvisioningType(performanceProvisioningType)
                  .build();
    
          InsertStoragePoolRequest request = InsertStoragePoolRequest.newBuilder()
                  .setProject(projectId)
                  .setZone(zone)
                  .setStoragePoolResource(resource)
                  .build();
    
          // Wait for the insert disk operation to complete.
          Operation operation = client.insertAsync(request).get(1, TimeUnit.MINUTES);
    
          if (operation.hasError()) {
            System.out.println("StoragePool creation failed!");
            throw new Error(operation.getError().toString());
          }
    
          // Wait for server update
          TimeUnit.SECONDS.sleep(10);
    
          StoragePool storagePool = client.get(projectId, zone, storagePoolName);
    
          System.out.printf("Storage pool '%s' has been created successfully", storagePool.getName());
    
          return storagePool;
        }
      }
    }

    Node.js

    // Import the Compute library
    const computeLib = require('@google-cloud/compute');
    const compute = computeLib.protos.google.cloud.compute.v1;
    
    // Instantiate a storagePoolClient
    const storagePoolClient = new computeLib.StoragePoolsClient();
    // 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 storagePoolClient.getProjectId();
    // Name of the zone in which you want to create the storagePool.
    const zone = 'us-central1-a';
    // Name of the storagePool you want to create.
    // storagePoolName = 'storage-pool-name';
    // The type of disk you want to create. This value uses the following format:
    // "projects/{projectId}/zones/{zone}/storagePoolTypes/(hyperdisk-throughput|hyperdisk-balanced)"
    const storagePoolType = `projects/${projectId}/zones/${zone}/storagePoolTypes/hyperdisk-balanced`;
    // Optional: The capacity provisioning type of the storage pool.
    // The allowed values are advanced and standard. If not specified, the value advanced is used.
    const capacityProvisioningType = 'advanced';
    // The total capacity to provision for the new storage pool, specified in GiB by default.
    const provisionedCapacity = 10240;
    // The IOPS to provision for the storage pool.
    // You can use this flag only with Hyperdisk Balanced Storage Pools.
    const provisionedIops = 10000;
    // The throughput in MBps to provision for the storage pool.
    const provisionedThroughput = 1024;
    // Optional: The performance provisioning type of the storage pool.
    // The allowed values are advanced and standard. If not specified, the value advanced is used.
    const performanceProvisioningType = 'advanced';
    
    async function callCreateComputeHyperdiskPool() {
      // Create a storagePool.
      const storagePool = new compute.StoragePool({
        name: storagePoolName,
        poolProvisionedCapacityGb: provisionedCapacity,
        poolProvisionedIops: provisionedIops,
        poolProvisionedThroughput: provisionedThroughput,
        storagePoolType,
        performanceProvisioningType,
        capacityProvisioningType,
        zone,
      });
    
      const [response] = await storagePoolClient.insert({
        project: projectId,
        storagePoolResource: storagePool,
        zone,
      });
    
      let operation = response.latestResponse;
    
      // Wait for the create storage pool operation to complete.
      while (operation.status !== 'DONE') {
        [operation] = await zoneOperationsClient.wait({
          operation: operation.name,
          project: projectId,
          zone: operation.zone.split('/').pop(),
        });
      }
    
      console.log(`Storage pool: ${storagePoolName} created.`);
    }
    
    await callCreateComputeHyperdiskPool();

    Passaggi successivi