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:

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

    2. Set a default region and zone.

    Go

    Para usar las muestras de Go incluidas en 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.

      Instala Google Cloud CLI.

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

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

    Java

    Para usar las muestras de Java incluidas en 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.

      Instala Google Cloud CLI.

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

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

    Node.js

    Para usar las muestras de Node.js incluidas en 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.

      Instala Google Cloud CLI.

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

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    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 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 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 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 grupo de almacenamiento de Hyperdisk 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 10 grupos de almacenamiento por proyecto.
  • No puedes cambiar el modelo de aprovisionamiento de un grupo. Por ejemplo, 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 son un recurso zonal.
  • Puedes crear hasta 10,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 o el rendimiento aprovisionados de un grupo de almacenamiento 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, las IOPS o el procesamiento aprovisionados de un Exapool.
  • Debes comunicarte con tu equipo de cuentas para borrar un Exapool.

Límites de discos en un grupo de almacenamiento:

  • 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 grupo de almacenamiento, 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 grupo de almacenamiento de Hyperdisk, usa la Google Cloud consola, Google Cloud CLI o REST. Debes especificar las siguientes propiedades cuando creas un grupo de almacenamiento:

  • 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 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 un ajuste de cuota.

  7. Elige un tipo de aprovisionamiento en el campo Tipo de rendimiento. Puedes usar los siguientes tipos de aprovisionamiento 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 aprovisionado total del grupo de almacenamiento.
    • 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 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: Es 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: Es 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 nuevo grupo de almacenamiento, especificada en GiB de forma predeterminada.
  • PERFORMANCE_TYPE: Opcional: Es 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: 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 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: 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 grupo de almacenamiento.
  • POOL_CAPACITY: Es la capacidad total que se aprovisionará para el nuevo grupo de almacenamiento, 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: 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 grupo de almacenamiento. 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 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 = "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