Crea pool di archiviazione Hyperdisk


I pool di archiviazione Hyperdisk sono una nuova risorsa di archiviazione a blocchi che consente di gestire Archiviazione a blocchi Hyperdisk in forma aggregata. 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 velocità effettiva sottoposte a provisioning del pool

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

  • Capacità standard: la capacità di cui è stato eseguito il provisioning per ogni disco creato nella viene detratto dalla capacità totale di cui è stato eseguito il provisioning pool di archiviazione.
  • Capacità avanzata: il pool di archiviazione trae vantaggio dal thin provisioning e dai dati e la riduzione del traffico. 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 nella viene detratto dalle prestazioni totali di cui è stato eseguito il provisioning 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 detratto dalle prestazioni totali di cui è stato eseguito il provisioning del pool di archiviazione.

    Prima di iniziare

    • Se non l'hai già fatto, configura l'autenticazione. Autenticazione è Il processo di verifica dell'identità per l'accesso ai servizi e alle API di Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine come segue.

      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 a riga di comando gcloud, 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 a riga di comando gcloud, 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 una località dell'ambiente di sviluppo, installare e inizializzare gcloud CLI quindi configura 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, vedi 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, vedi Esegui 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

    Prendi nota delle seguenti limitazioni durante la creazione di pool di archiviazione Hyperdisk:

    Limiti delle 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 modificare Da un pool di archiviazione con capacità standard a un pool di capacità avanzata o a un Da un pool di archiviazione a prestazioni avanzate a uno Standard.
    • I pool di archiviazione sono una risorsa a livello 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 devi ricreare il disco 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.

    Crea 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 file. rispetto al pool di archiviazione.
    5. Scegli un valore per Tipo di pool di archiviazione.
    6. Scegli un tipo di provisioning nel campo Tipo di capacità e specifica la capacità di eseguire il provisioning del pool 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 Hyperdisk Balanced, nel campo IOPS sottoposte a provisioning, inserisci le IOPS da eseguire il provisioning per il pool di archiviazione.

    9. Per un pool di archiviazione per la velocità effettiva Hyperdisk o un pool di archiviazione bilanciato Hyperdisk, nel campo Velocità effettiva sottoposta a provisioning: inserire la velocità effettiva per il provisioning del 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 rendimento dal tipo di provisioning 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à effettiva in MBps di cui 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 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: tipo di disco in cui archiviare rispetto al pool di archiviazione. I valori consentiti sono hyperdisk-throughput e hyperdisk-balanced.
    • IOPS: facoltativo: le IOPS di cui eseguire il provisioning per pool di archiviazione. Puoi utilizzare questo flag solo con i pool di archiviazione bilanciati Hyperdisk.
    • THROUGHPUT: (facoltativo) la velocità effettiva in MBps di cui 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 rendimento dal tipo di provisioning 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 = "europe-central2-b";
        // Name of the storagePool you want to create.
        String storagePoolName = "YOUR_STORAGE_POOL_NAME";
        // The type of disk you want to create. This value uses the following format:
        // "projects/%s/zones/%s/storagePoolTypes/hyperdisk-throughput|hyperdisk-balanced"
        String storagePoolType = "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.
        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;
    
        createHyperdiskStoragePool(projectId, zone, storagePoolName, storagePoolType,
                capacityProvisioningType, provisionedCapacity, provisionedIops, provisionedThroughput);
      }
    
      // 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)
              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)
                  .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