Crear grupos de almacenamiento de Hyperdisk


Los grupos de almacenamiento de Hyperdisk son un nuevo recurso de almacenamiento en bloques que te ayuda a gestionar tu almacenamiento en bloques de Hyperdisk de forma agregada. Los grupos de almacenamiento de Hyperdisk están disponibles en las variantes de grupo de almacenamiento de Hyperdisk con rendimiento y grupo de almacenamiento de Hyperdisk equilibrado.

Debe especificar las siguientes propiedades al crear un pool de almacenamiento:

  • Zona
  • Tipo de grupo de almacenamiento
  • Tipo de aprovisionamiento de capacidad
  • Capacidad aprovisionada del grupo
  • Tipo de aprovisionamiento de rendimiento
  • IOPS y rendimiento aprovisionados del grupo

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

  • Capacidad estándar: la capacidad aprovisionada para cada disco creado en el grupo de almacenamiento se deduce de la capacidad total aprovisionada del grupo de almacenamiento.
  • Capacidad avanzada: el grupo de almacenamiento se beneficia del aprovisionamiento ligero y la reducción de datos. Solo se deduce del total de la capacidad aprovisionada del grupo de almacenamiento la cantidad de datos escritos.
  • Rendimiento estándar: el rendimiento aprovisionado de 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 ligero. Solo se deduce del rendimiento total aprovisionado del pool de almacenamiento la cantidad de rendimiento utilizada por un disco.

Antes de empezar

  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos 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 la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    Go

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

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud 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 Java muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud 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 Node.js muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud 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 REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Roles y permisos necesarios

Para obtener los permisos que necesitas para crear un pool de almacenamiento, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en el proyecto:

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

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar 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 se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para crear un grupo de almacenamiento, se necesitan los siguientes permisos:

  • compute.storagePools.create del proyecto
  • compute.storagePools.setLabels del proyecto

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

Limitaciones

Ten en cuenta las siguientes limitaciones al crear 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 al día.
  • Puede crear un máximo de 10 grupos de almacenamiento por proyecto.
  • No puedes cambiar el modelo de aprovisionamiento de un grupo. Tampoco puedes cambiar un grupo de almacenamiento de capacidad estándar a uno de capacidad avanzada, ni un grupo de almacenamiento de rendimiento avanzado a uno de rendimiento estándar.
  • Los grupos de almacenamiento son recursos de zona.
  • Puedes crear hasta 1000 discos en un grupo de almacenamiento.
  • Solo puedes usar grupos de almacenamiento de Hyperdisk 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 grupo de almacenamiento como máximo dos veces en un periodo de 24 horas.

Límites de los discos de un grupo de almacenamiento:

  • Solo se pueden crear discos nuevos en el mismo proyecto y zona en un grupo de almacenamiento.
  • No se pueden mover discos dentro ni fuera de un grupo de almacenamiento. Para mover un disco a un grupo de almacenamiento o sacarlo de él, tienes que volver a crear el disco a partir de una instantánea. Para obtener más información, consulta Cambiar el tipo de disco.
  • Para crear discos de arranque en un grupo de almacenamiento, debes usar un grupo de almacenamiento equilibrado de Hyperdisk.
  • Los grupos de almacenamiento no admiten discos regionales.
  • No puedes clonar, crear capturas instantáneas ni configurar la replicación asíncrona de discos en un pool de almacenamiento.

Intervalos de capacidad y límites de rendimiento aprovisionado

Al crear un grupo de almacenamiento, la capacidad, las IOPS y el rendimiento aprovisionados están sujetos a los límites descritos en Límites de los grupos de almacenamiento.

Crear un grupo de almacenamiento de Hyperdisk

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

Consola

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

    Para crear un grupo de almacenamiento con una capacidad grande, es posible que tengas que solicitar un ajuste de cuota.

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

  8. En el caso de los grupos de almacenamiento Hyperdisk Balanced, en el campo IOPS aprovisionadas, introduce las IOPS que quieras aprovisionar para el grupo de almacenamiento.

  9. En el caso de un grupo de almacenamiento de Hyperdisk con rendimiento o un grupo de almacenamiento de Hyperdisk equilibrado, en el campo Rendimiento aprovisionado, introduce el rendimiento que quieres 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

Haz los cambios siguientes:

  • NAME: el nombre único del grupo de almacenamiento.
  • ZONE: la zona en la que se va a crear el grupo de almacenamiento. Por ejemplo, us-central1-a.
  • STORAGE_POOL_TYPE: el tipo de disco que se va a 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: capacidad total que se va a aprovisionar para el nuevo grupo de almacenamiento. Se especifica 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: el número de IOPS que se aprovisionarán para el grupo de almacenamiento. Solo puedes usar esta marca con los grupos de almacenamiento equilibrados de Hyperdisk.
  • THROUGHPUT: el rendimiento en MBps que se va a aprovisionar para el grupo de almacenamiento.
  • DESCRIPTION: opcional, cadena de texto que describe el grupo de almacenamiento.

REST

Crea una solicitud POST para crear un grupo de almacenamiento de Hyperdisk 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"
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto
  • ZONE: la zona en la que se va a crear el grupo de almacenamiento. Por ejemplo, us-central1-a.
  • NAME: un nombre único para el grupo de almacenamiento .
  • DESCRIPTION: opcional, cadena de texto que describe el grupo de almacenamiento.
  • POOL_CAPACITY: la capacidad total que se va a aprovisionar para el nuevo grupo de almacenamiento, especificada en GiB de forma predeterminada.
  • STORAGE_POOL_TYPE: el tipo de disco que se va a almacenar en el grupo de almacenamiento. Los valores permitidos son hyperdisk-throughput y hyperdisk-balanced.
  • IOPS: opcional: IOPS que se aprovisionarán para el grupo de almacenamiento. Solo puedes usar esta marca con los grupos de almacenamiento equilibrados de Hyperdisk.
  • THROUGHPUT: opcional. El rendimiento en MB/s que se va a aprovisionar para el pool 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 = "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();

Siguientes pasos