Crea un grupo de Hyperdisk

En este documento, se describe cómo crear grupos de Hyperdisk. Los grupos de Hyperdisk son recursos de almacenamiento en bloque que te ayudan a administrar tus recursos de almacenamiento en bloque de Hyperdisk de forma conjunta. Los grupos de Hyperdisk están disponibles en las siguientes variantes:

  • Grupos de almacenamiento de Hyperdisk: Se recomiendan para la mayoría de las cargas de trabajo
  • Hyperdisk Exapools: Se recomienda para cargas de trabajo muy grandes que requieren más de 100 GiB/s de rendimiento simultáneo.

Para obtener información sobre los diferentes tipos de grupos de Hyperdisk, consulta la descripción general de los grupos de Hyperdisk.

Antes de comenzar

  • Si aún no lo hiciste, configura la autenticación. La autenticación verifica tu identidad para acceder a los servicios y las APIs de Google Cloud . Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Selecciona la pestaña que corresponda a la forma en que planeas usar las muestras de esta página:

    Console

    Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud , no necesitas configurar la autenticación.

    gcloud

    1. Instala Google Cloud CLI. Después de la instalación, inicializa Google Cloud CLI con el siguiente comando:

      gcloud init

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  • Configura una región y una zona predeterminadas.
  • Go

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

    1. Instala Google Cloud CLI.

    2. Si usas un proveedor de identidad (IdP) externo, primero debes acceder a gcloud CLI con tu identidad federada.

    3. Si usas una shell local, crea credenciales de autenticación locales para tu cuenta de usuario:

      gcloud auth application-default login

      No es necesario que lo hagas si usas Cloud Shell.

      Si se devuelve un error de autenticación y usas un proveedor de identidad (IdP) externo, confirma que accediste a la gcloud CLI con tu identidad federada.

    Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

    Java

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

    1. Instala Google Cloud CLI.

    2. Si usas un proveedor de identidad (IdP) externo, primero debes acceder a gcloud CLI con tu identidad federada.

    3. Si usas una shell local, crea credenciales de autenticación locales para tu cuenta de usuario:

      gcloud auth application-default login

      No es necesario que lo hagas si usas Cloud Shell.

      Si se devuelve un error de autenticación y usas un proveedor de identidad (IdP) externo, confirma que accediste a la gcloud CLI con tu identidad federada.

    Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

    Node.js

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

    1. Instala Google Cloud CLI.

    2. Si usas un proveedor de identidad (IdP) externo, primero debes acceder a gcloud CLI con tu identidad federada.

    3. Si usas una shell local, crea credenciales de autenticación locales para tu cuenta de usuario:

      gcloud auth application-default login

      No es necesario que lo hagas si usas Cloud Shell.

      Si se devuelve un error de autenticación y usas un proveedor de identidad (IdP) externo, confirma que accediste a la gcloud CLI con tu identidad federada.

    Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

    REST

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

      Instala Google Cloud CLI.

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

    Para obtener más información, consulta Autentícate 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 Hyperdisk, 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 puede 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 Hyperdisk. 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 Hyperdisk:

  • 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

Se aplican las siguientes limitaciones cuando creas grupos de almacenamiento de Hyperdisk:

Límites de recursos:

  • Puedes crear un Hyperdisk Storage Pool con hasta 5 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 20 grupos de almacenamiento por proyecto y por región. Este límite se comparte entre los grupos de almacenamiento de Hyperdisk Balanced y los grupos de almacenamiento de Hyperdisk Throughput de un proyecto que se encuentran en la misma región.
  • No puedes cambiar el modelo de aprovisionamiento de un grupo. Por ejemplo, no puedes cambiar un Storage Pool de capacidad estándar a un Storage Pool de capacidad avanzada ni un Storage Pool de rendimiento avanzado a un Storage Pool de rendimiento estándar.
  • Los grupos son un recurso zonal.
  • Puedes crear hasta 10,000 discos en un Storage Pool.
  • 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 de un Storage Pool como máximo dos veces en un período de 24 horas.
  • Solo puedes crear discos de Hyperdisk Balanced en un grupo de Hyperdisk Balanced, y solo puedes crear discos de Hyperdisk Throughput en un grupo de Hyperdisk Throughput.
  • Debes comunicarte con tu equipo de cuentas para cambiar la capacidad aprovisionada, las IOPS o la capacidad de procesamiento de un Exapool.
  • Debes comunicarte con tu equipo de cuentas para borrar un Exapool.

Límites de discos en un Storage Pool:

  • Solo se pueden crear discos nuevos en el mismo proyecto y zona en un grupo.
  • No puedes mover discos dentro o fuera de un grupo. Para mover un disco dentro o fuera de un grupo, 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, debes usar un grupo de almacenamiento de Hyperdisk Balanced o un Exapool de Hyperdisk Balanced.
  • Los grupos no admiten discos regionales.
  • No puedes clonar, crear instantáneas inmediatas ni configurar la replicación asíncrona para los discos en un grupo.

Rangos de capacidad y límites de rendimiento aprovisionados

Cuando creas un Storage Pool, la capacidad aprovisionada, las IOPS y la capacidad de procesamiento no pueden exceder los límites descritos en Límites para grupos.

Crea un grupo de almacenamiento de Hyperdisk

Para crear un nuevo Hyperdisk Storage Pool, usa la Google Cloud consola, Google Cloud CLI o REST. Debes especificar las siguientes propiedades cuando creas un Storage Pool:

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

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 Storage Pool.
  3. Opcional: En el campo Descripción, ingresa una descripción para el Storage Pool.
  4. Selecciona la región y la zona en las que deseas crear el Storage Pool.
  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 Storage Pool en el campo Capacidad del Storage Pool. 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 un ajuste de cuota.

  7. Elige un tipo de aprovisionamiento en el campo Tipo de rendimiento. Puedes usar los siguientes tipos de aprovisionamiento con grupos de almacenamiento de Hyperdisk:

    • Capacidad estándar: La capacidad aprovisionada para cada disco creado en el Storage Pool se deduce de la capacidad aprovisionada total del Storage Pool.
    • Capacidad avanzada: El Storage Pool 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 Storage Pool.
    • Rendimiento estándar: El rendimiento aprovisionado para cada disco creado en el Storage Pool se deduce del rendimiento aprovisionado total del Storage Pool.
    • Rendimiento avanzado: El rendimiento aprovisionado para cada disco se beneficia del aprovisionamiento ligero. Solo la cantidad de rendimiento que usa un disco se deduce del rendimiento total aprovisionado del grupo de almacenamiento.
  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 Storage Pool.

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: Es el nombre único del Storage Pool.
  • 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 Storage Pool. Los valores permitidos son hyperdisk-throughput y hyperdisk-balanced.
  • CAPACITY_TYPE: Opcional: Es el tipo de aprovisionamiento de capacidad del Storage Pool. 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 nuevo Storage Pool, especificada en GiB de forma predeterminada.
  • PERFORMANCE_TYPE: Opcional: Es el tipo de aprovisionamiento de rendimiento del Storage Pool. 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: Es la capacidad de procesamiento en MBps que se aprovisionará para el grupo de almacenamiento.
  • DESCRIPTION: Opcional: Es una cadena de texto que describe el Storage Pool.

REST

Realiza una solicitud POST para crear un Hyperdisk Storage Pool con 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: Es 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 Storage Pool.
  • POOL_CAPACITY: Es la capacidad total que se aprovisionará para el nuevo Storage Pool, especificada en GiB de forma predeterminada.
  • STORAGE_POOL_TYPE: Es el tipo de disco que se almacenará en el Storage Pool. Los valores permitidos son hyperdisk-throughput y hyperdisk-balanced.
  • IOPS: Opcional: Son las IOPS que se aprovisionarán para el Storage Pool. Puedes usar esta marca solo con grupos de almacenamiento de Hyperdisk Balanced.
  • THROUGHPUT: Opcional: Es la capacidad de procesamiento en MBps que se aprovisionará para el grupo de almacenamiento.
  • CAPACITY_TYPE: Opcional: Es el tipo de aprovisionamiento de capacidad del Storage Pool. Los valores permitidos son advanced y standard. Si no se especifica, se usa el valor advanced.
  • PERFORMANCE_TYPE: Opcional: Es el tipo de aprovisionamiento de rendimiento del Storage Pool. 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 = "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();

Crea un Exapool de Hyperdisk

Los Hyperdisk Exapools están disponibles de forma general con una lista de entidades permitidas. Para crear un Exapool de Hyperdisk, comunícate con tu equipo de cuentas.

Próximos pasos