Crea grupos de almacenamiento de Hyperdisk


Los grupos de almacenamiento de Hyperdisk son un nuevo recurso de almacenamiento en bloque que te ayuda a administrar el almacenamiento en bloque de Hyperdisk de forma conjunta. Los grupos de almacenamiento de Hyperdisk están disponibles en las variantes de grupo de almacenamiento de Hyperdisk Throughput y grupo de almacenamiento de Hyperdisk Balanced.

Debes especificar las siguientes propiedades cuando creas un grupo de almacenamiento:

  • Zona
  • Tipo de grupo de almacenamiento
  • Tipo de aprovisionamiento de capacidad
  • Capacidad aprovisionada de los grupos
  • Tipo de aprovisionamiento de rendimiento
  • IOPS y capacidad de procesamiento aprovisionadas en el grupo

Puedes usar los tipos de aprovisionamiento de capacidad estándar, capacidad avanzada, rendimiento estándar o rendimiento avanzado con los grupos de almacenamiento de Hyperdisk:

  • Capacidad estándar: La capacidad aprovisionada para cada disco creado en el grupo de almacenamiento se deduce de la capacidad aprovisionada total del grupo de almacenamiento.
  • Capacidad avanzada: El grupo de almacenamiento se beneficia del aprovisionamiento delgado y la reducción de datos. Solo la cantidad de datos escritos reales se deduce de la capacidad aprovisionada total del grupo de almacenamiento.
  • Rendimiento estándar: El rendimiento aprovisionado para cada disco creado en el grupo de almacenamiento se deduce del rendimiento total aprovisionado del grupo de almacenamiento.
  • Rendimiento avanzado: El rendimiento aprovisionado para cada disco se beneficia del aprovisionamiento delgado. Solo la cantidad de rendimiento que usa un disco se deduce del rendimiento total aprovisionado del grupo de almacenamiento.

    Antes de comenzar

    • Configura la autenticación si aún no lo hiciste. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

      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

        Para usar las muestras de Go de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

        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.

        Para obtener más información, consulta Set up authentication for a local development environment.

        Java

        Para usar las muestras de Java de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

        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.

        Para obtener más información, consulta Set up authentication for a local development environment.

        Node.js

        Para usar las muestras de Node.js de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

        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.

        Para obtener más información, consulta Set up authentication for a local development environment.

        REST

        Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

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

          gcloud init

        Si deseas obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud.

    Roles y permisos requeridos

    Para obtener los permisos que necesitas para crear un grupo de almacenamiento, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:

    • Administrador de instancias de Compute (v1) (roles/compute.instanceAdmin.v1)
    • Para conectarte a una instancia de VM que pueda ejecutarse como una cuenta de servicio: Usuario de cuenta de servicio (v1) (rol roles/iam.serviceAccountUser)

    Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

    Estos roles predefinidos contienen los permisos necesarios para crear un grupo de almacenamiento. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

    Permisos necesarios

    Se requieren los siguientes permisos para crear un grupo de almacenamiento:

    • compute.storagePools.create en el proyecto
    • compute.storagePools.setLabels en el proyecto

    También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

    Limitaciones

    Ten en cuenta las siguientes limitaciones cuando crees grupos de almacenamiento de Hyperdisk:

    Límites de recursos:

    • Puedes crear un grupo de almacenamiento de Hyperdisk con hasta 1 PiB de capacidad aprovisionada.
    • Puedes crear un máximo de 5 grupos de almacenamiento por hora.
    • Puedes crear un máximo de 10 grupos de almacenamiento por día.
    • Puedes crear como máximo 10 grupos de almacenamiento por proyecto.
    • No puedes cambiar el modelo de aprovisionamiento de un grupo; no puedes cambiar un grupo de almacenamiento de capacidad estándar a un grupo de almacenamiento de capacidad avanzada ni un grupo de almacenamiento de rendimiento avanzado a un grupo de almacenamiento de rendimiento estándar.
    • Los grupos de almacenamiento son un recurso zonal.
    • Puedes crear hasta 1,000 discos en un grupo de almacenamiento.
    • Puedes usar los grupos de almacenamiento de Hyperdisk solo con Compute Engine. Las instancias de Cloud SQL no pueden usar grupos de almacenamiento de Hyperdisk.
    • Puedes cambiar la capacidad aprovisionada o el rendimiento aprovisionado de un grupo de almacenamiento como máximo dos veces en un período de 24 horas.

    Límites de discos en un grupo de almacenamiento:

    • Solo se pueden crear discos nuevos en el mismo proyecto y zona en un grupo de almacenamiento.
    • No se permite mover discos dentro o fuera de un grupo de almacenamiento. Para mover un disco dentro o fuera de un grupo de almacenamiento, debes volver a crear el disco a partir de una instantánea. Para obtener más información, consulta Cambia el tipo de disco.
    • Para crear discos de arranque en un grupo de almacenamiento, debes usar un grupo de almacenamiento balanceado de Hyperdisk
    • Los grupos de almacenamiento no admiten discos regionales.
    • No puedes clonar, crear instantáneas inmediatas ni configurar la replicación asíncrona de Persistent Disk para los discos en un grupo de almacenamiento.
    • Los discos Hyperdisk balanceados en un grupo de almacenamiento no se pueden conectar a varias instancias de procesamiento.

    Rangos de capacidad y límites de rendimiento aprovisionados

    Cuando se crea un grupo de almacenamiento, la capacidad aprovisionada, IOPS y capacidad de procesamiento están sujetas a los límites descritos en Límites de los grupos de almacenamiento.

    Crea un grupo de almacenamiento de Hyperdisk

    Para crear un nuevo grupo de almacenamiento de Hyperdisk, usa la consola de Google Cloud, Google Cloud CLI o REST.

    Console

    1. Ve a la página Crear un grupo de almacenamiento en la consola de Google Cloud.
      Ir a la página Crear grupo de almacenamiento
    2. En el campo Nombre, ingresa un nombre único para el grupo de almacenamiento.
    3. Opcional: En el campo Descripción, ingresa una descripción para el grupo de almacenamiento.
    4. Selecciona la región y la zona en las que deseas crear el grupo de almacenamiento.
    5. Elige un valor para el tipo de grupo de almacenamiento.
    6. Elige un tipo de aprovisionamiento en el campo Tipo de capacidad y especifica la capacidad para aprovisionar del grupo de almacenamiento en el campo Capacidad del grupo de almacenamiento. Puedes especificar un tamaño de 10 TiB a 1 PiB.

      Para crear un grupo de almacenamiento con gran capacidad, es posible que debas solicitar una cuota más alta.

    7. Elige un tipo de aprovisionamiento en el campo Tipo de rendimiento.

    8. Para los grupos de almacenamiento de Hyperdisk Balanced, en el campo IOPS aprovisionadas, ingresa las IOPS que se aprovisionarán para el grupo de almacenamiento.

    9. En el caso de un grupo de almacenamiento de Hyperdisk Throughput o un grupo de almacenamiento de Hyperdisk Balanced, en el campo Capacidad de procesamiento aprovisionada, ingresa la capacidad de procesamiento que se aprovisionará para el grupo de almacenamiento.

    10. Haz clic en Enviar para crear el grupo de almacenamiento.

    gcloud

    Para crear un grupo de almacenamiento de Hyperdisk, usa el 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
    

    Reemplaza lo siguiente:

    • NAME: el nombre único del grupo de almacenamiento.
    • ZONE: Es la zona en la que se creará el grupo de almacenamiento, por ejemplo, us-central1-a.
    • STORAGE_POOL_TYPE: Es el tipo de disco que se almacenará en el grupo de almacenamiento. Los valores permitidos son hyperdisk-throughput y hyperdisk-balanced.
    • CAPACITY_TYPE: Opcional: el tipo de aprovisionamiento de capacidad del grupo de almacenamiento. Los valores permitidos son advanced y standard. Si no se especifica, se usa el valor advanced.
    • POOL_CAPACITY: es la capacidad total que se aprovisionará para el grupo de almacenamiento nuevo, especificada en GiB de forma predeterminada.
    • PERFORMANCE_TYPE: Opcional: el tipo de aprovisionamiento de rendimiento del grupo de almacenamiento. Los valores permitidos son advanced y standard. Si no se especifica, se usa el valor advanced.
    • IOPS: Son las IOPS que se aprovisionarán para el grupo de almacenamiento. Puedes usar esta marca solo con grupos de almacenamiento de Hyperdisk Balanced.
    • THROUGHPUT: la capacidad de procesamiento en MBps que se aprovisionará para el grupo de almacenamiento.
    • DESCRIPTION: Opcional: es una cadena de texto que describe el grupo de almacenamiento.

    REST

    Realiza una solicitud POST para crear un grupo de almacenamiento de Hyperdisk mediante el método 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"
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID del proyecto
    • ZONE: Es la zona en la que se creará el grupo de almacenamiento, por ejemplo, us-central1-a.
    • NAME: es un nombre único para el grupo de almacenamiento.
    • DESCRIPTION: Opcional: es una cadena de texto que describe el grupo de almacenamiento.
    • POOL_CAPACITY: es la capacidad total que se aprovisionará para el grupo de almacenamiento nuevo, especificada en GiB de forma predeterminada.
    • STORAGE_POOL_TYPE: Es el tipo de disco que se almacenará en el grupo de almacenamiento. Los valores permitidos son hyperdisk-throughput y hyperdisk-balanced.
    • IOPS: Opcional: Son las IOPS que se aprovisionarán para el grupo de almacenamiento. Puedes usar esta marca solo con grupos de almacenamiento de Hyperdisk Balanced.
    • THROUGHPUT: Opcional: La capacidad de procesamiento en MBps que se aprovisionará para el grupo de almacenamiento.
    • CAPACITY_TYPE: Opcional: el tipo de aprovisionamiento de capacidad del grupo de almacenamiento. Los valores permitidos son advanced y standard. Si no se especifica, se usa el valor advanced.
    • PERFORMANCE_TYPE: Opcional: el tipo de aprovisionamiento de rendimiento del grupo de almacenamiento. Los valores permitidos son advanced y standard. Si no se especifica, se usa el valor advanced.

    Go

    
    // 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 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.
    const 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;
    
    async function callCreateComputeHyperdiskPool() {
      // Create a storagePool.
      const storagePool = new compute.StoragePool({
        name: storagePoolName,
        poolProvisionedCapacityGb: provisionedCapacity,
        poolProvisionedIops: provisionedIops,
        poolProvisionedThroughput: provisionedThroughput,
        storagePoolType,
        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(),
        });
      }
    
      const createdStoragePool = (
        await storagePoolClient.get({
          project: projectId,
          zone,
          storagePool: storagePoolName,
        })
      )[0];
    
      console.log(JSON.stringify(createdStoragePool));
    }
    
    await callCreateComputeHyperdiskPool();

    Próximos pasos