Crea un nuevo volumen de Hyperdisk


Puedes usar un volumen de Hyperdisk Extreme o Hyperdisk Throughput con una VM si completas las siguientes tareas:

  • Crea un volumen de Hyperdisk zonal en blanco, que no sea de arranque y conéctalo a la VM como parte de la creación de la VM o como tareas separadas.
  • Formatea y activa el volumen para proporcionar acceso a un sistema de datos o de archivos.

El proceso es el mismo para los volúmenes de Hyperdisk Balanced, excepto que también puedes crear discos de arranque de tipo Hyperdisk Balanced.

Para obtener información general sobre Hyperdisk, consulta Acerca de Hyperdisk.

Antes de comenzar

  • Consulta las limitaciones de Hyperdisk antes de agregar un volumen de Hiperdiscos a tu VM.
  • Si aún no lo hiciste, configura la autenticación. 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 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. 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 agregar un volumen de Hyperdisk a tu VM, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:

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 agregar un volumen de Hyperdisk a tu VM. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para agregar un volumen de Hyperdisk a tu VM:

  • Para crear y adjuntar un volumen de Hyperdisk, sigue estos pasos:
    • compute.disks.create en el proyecto
    • compute.instances.attachDisk en la VM
    • compute.disks.use en el volumen que deseas conectar a la VM
  • Para formatear y activar el volumen adjunto, usa compute.instances.setMetadata en la VM

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

Valores admitidos para volúmenes de Hyperdisk

Los valores que usas cuando modificas un volumen de Hyperdisk deben estar dentro del rango de valores máximos y mínimos descritos en Límites de Hyperdisks por disco.

Si modificas el tamaño de un volumen de Hyperdisk conectado a una VM, los valores nuevos no pueden exceder los límites de Hyperdisks por VM.

Las IOPS y la capacidad de procesamiento aprovisionadas para un volumen de Hyperdisk deben seguir las reglas que se describen en Información acerca del aprovisionamiento de IOPS y capacidad de procesamiento para Hyperdisk.

Agrega un volumen de Hyperdisk a tu VM

Puedes crear y adjuntar un volumen de Hyperdisk a través de la consola de Google Cloud, Google Cloud CLI o REST.

El tamaño, la capacidad de procesamiento y las IOPS que especifiques cuando crees un volumen de Hyperdisk deben estar dentro del rango de valores admitidos.

Cuando creas un volumen de Hyperdisk Balanced o Hyperdisk Balanced High Availability (versión preliminar), puedes permitir de forma opcional que varias VMs accedan al disco creando el disco en modo de varios escritores.

Console

  1. Ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el nombre de la VM en la que deseas agregar un disco.

  3. En la página Detalles de la instancia de VM, haz clic en Editar.

  4. En el encabezado Discos adicionales, haz clic en Agregar disco nuevo.

  5. Especifica un nombre para el disco y, de forma opcional, agrega una descripción. Selecciona Disco en blanco como el Tipo de fuente de disco.

  6. En Configuración de disco, elige un tipo de disco de la siguiente lista. Los valores que especifiques deben estar en el rango de los valores admitidos.

    1. Hyperdisk Balanced. También puedes cambiar la configuración predeterminada de Tamaño, IOPS aprovisionadas y Capacidad de procesamiento aprovisionada del disco.
    2. Hiperdisco extremo. También puedes cambiar la configuración predeterminada del Tamaño y las IOPS aprovisionadas del disco.
    3. Hyperdisk ML También puedes cambiar la configuración predeterminada del Tamaño y la capacidad de procesamiento aprovisionada del disco.
    4. Capacidad de procesamiento de Hyperdisk.También puedes cambiar la configuración predeterminada del tamaño y la capacidad de procesamiento aprovisionada.
  7. Opcional: En el caso de los volúmenes de Hyperdisk Balanced o Hyperdisk Balanced High Availability (versión preliminar), puedes habilitar la conexión del disco a varias VMs si lo creas en modo de varios escritores. En Modo de acceso, selecciona Lectura y escritura en varias VMs.

  8. Haz clic en Guardar.

  9. Para aplicar los cambios a la VM, haz clic en Guardar.

gcloud

  1. Usa el comando gcloud compute disks create para crear el volumen de Hyperdisk.

    gcloud compute disks create DISK_NAME \
       --zone=ZONE \
       --size=DISK_SIZE \
       --type=DISK_TYPE \
       --provisioned-iops=IOPS_LIMIT
       --provisioned-throughput=THROUGHPUT_LIMIT
       --access-mode=DISK_ACCESS_MODE
    

    Reemplaza lo siguiente:

    • DISK_NAME: Es el nombre del disco nuevo.
    • ZONE: el nombre de la zona en la que se crea el disco nuevo.
    • DISK_SIZE: Opcional: Es el tamaño del disco nuevo. El valor debe ser un número entero seguido de una unidad de tamaño de GB para gigabyte o TB para tebibyte. Si no se especifica ninguna unidad de tamaño, se usa 100 GB como valor predeterminado. Los valores aceptados para el tamaño del disco son los siguientes:
      • Hyperdisk Balanced: de 4 GiB a 64 TiB, inclusive, en incrementos de 1 GiB
      • Hyperdisk Extreme: de 64 GiB a 64 TiB, inclusive, en incrementos de 1 GiB.
      • Hyperdisk ML: de 4 GiB a 64 TiB, inclusive, en incrementos de 1 GiB
      • Hyperdisk Throughput: de 2 TiB a 32 TiB, inclusive, en incrementos de 1 GiB.
    • DISK_TYPE: el tipo de disco. Usa uno de los siguientes valores: hyperdisk-balanced, hyperdisk-extreme, hyperdisk-ml o hyperdisk-throughput.
    • IOPS_LIMIT: Opcional: En el caso de Hyperdisk Balanced o Hyperdisk Extreme, esta es la cantidad de operaciones de E/S por segundo (IOPS) que el disco puede controlar.
    • THROUGHPUT_LIMIT: Opcional: En el caso de los volúmenes Hyperdisk Balanced, Hyperdisk ML o Hyperdisk Throughput, este es un número entero que representa la capacidad de procesamiento, medida en MiB por segundo, que el disco puede controlar.
    • DISK_ACCESS_MODE: Opcional: Indica cómo pueden las VMs acceder a los datos del disco. Los valores admitidos son los que se detallan a continuación:

      • READ_WRITE_SINGLE, para el acceso de lectura/escritura desde una VM. Esta es la opción predeterminada.
      • READ_WRITE_MANY, para el acceso de lectura/escritura desde varias VMs.
      • READ_ONLY_MANY, para el acceso de solo lectura desde varias VMs.

      Puedes establecer el modo de acceso para los siguientes tipos de discos:

      • Hiperdisco balanceado
      • Hyperdisk ML
      • Hyperdisk Balanced High Availability (versión preliminar)
  2. Opcional: Usa el comando gcloud compute disks describe DISK_NAME para ver una descripción del disco.

  3. Después de crear el disco, puedes conectarlo a una VM.

REST

  1. Formula una solicitud POST para crear un Hyperdisk zonal con el método disks.insert. Incluye las propiedades name, sizeGb, type, provisionedIops y provisionedThroughput Para crear este disco como un disco vacío sin formato y que no sea de arranque, no especifiques una imagen ni una instantánea de origen.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks
    {
       "name": "DISK_NAME",
       "sizeGb": "DISK_SIZE",
       "type": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE",
       "provisionedIops": "IOPS_LIMIT",
       "provisionedThroughput": "THROUGHPUT_LIMIT",
       "accessMode": "DISK_ACCESS_MODE"
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID de tu proyecto
    • ZONE: la zona en la que se encuentran la VM y el disco nuevo
    • DISK_NAME: Es el nombre del disco nuevo.
    • DISK_SIZE: Opcional: Es el tamaño del disco nuevo. El valor debe ser un número entero seguido de una unidad de tamaño de GB para gigabyte o TB para tebibyte.
    • DISK_TYPE: el tipo de disco. Para crear un volumen de Hyperdisk, usa uno de los siguientes valores: hyperdisk-balanced, hyperdisk-extreme, hyperdisk-ml o hyperdisk-throughput.
    • IOPS_LIMIT: Opcional: En el caso de Hyperdisk Balanced y de Hyperdisk Extreme, esta es la cantidad de operaciones de E/S por segundo que el disco puede controlar.
    • THROUGHPUT_LIMIT: Opcional: En el caso de los volúmenes Hyperdisk Balanced, Hyperdisk ML o Hyperdisk Throughput, este es un número entero que representa la capacidad de procesamiento, medida en MiB por segundo, que el disco puede controlar.
    • DISK_ACCESS_MODE: Cómo pueden las VMs acceder a los datos del disco Los valores admitidos son los que se detallan a continuación:

      • READ_WRITE_SINGLE, para el acceso de lectura/escritura desde una VM. Esta es la opción predeterminada.
      • READ_WRITE_MANY, para el acceso de lectura/escritura desde varias VMs.
      • READ_ONLY_MANY, para el acceso de solo lectura desde varias VMs.

      Puedes establecer el modo de acceso para los siguientes tipos de discos:

      • Hiperdisco balanceado
      • Hyperdisk ML
      • Hyperdisk Balanced High Availability (versión preliminar)
  2. Opcional: Usa el método compute.disks.get para ver una descripción del disco.

  3. Después de crear el disco, puedes conectarlo a cualquier VM en ejecución o detenida.

Go

// createHyperdisk creates a new Hyperdisk in the specified project and zone.
func createHyperdisk(w io.Writer, projectId, zone, diskName string) error {
	//   projectID := "your_project_id"
	//   zone := "europe-central2-b"
	//   diskName := "your_disk_name"

	ctx := context.Background()
	client, err := compute.NewDisksRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewDisksRESTClient: %v", err)
	}
	defer client.Close()

	// use format "zones/{zone}/diskTypes/(hyperdisk-balanced|hyperdisk-throughput)".
	diskType := fmt.Sprintf("zones/%s/diskTypes/hyperdisk-balanced", zone)

	// Create the disk
	disk := &computepb.Disk{
		Name:   proto.String(diskName),
		Type:   proto.String(diskType),
		SizeGb: proto.Int64(10),
		Zone:   proto.String(zone),
	}

	req := &computepb.InsertDiskRequest{
		Project:      projectId,
		Zone:         zone,
		DiskResource: disk,
	}

	op, err := client.Insert(ctx, req)
	if err != nil {
		return fmt.Errorf("Insert disk request failed: %v", err)
	}

	// Wait for the insert disk operation to complete
	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Hyperdisk created: %v\n", diskName)
	return nil
}

Java


import com.google.cloud.compute.v1.Disk;
import com.google.cloud.compute.v1.DisksClient;
import com.google.cloud.compute.v1.InsertDiskRequest;
import com.google.cloud.compute.v1.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateHyperdisk {
  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 disk.
    String zone = "europe-central2-b";
    // Name of the disk you want to create.
    String diskName = "YOUR_DISK_NAME";
    // The type of disk you want to create. This value uses the following format:
    // "zones/{zone}/diskTypes/(hyperdisk-balanced|hyperdisk-extreme|hyperdisk-throughput)".
    // For example: "zones/us-west3-b/diskTypes/hyperdisk-balanced"
    String diskType = String.format("zones/%s/diskTypes/hyperdisk-balanced", zone);
    // Size of the new disk in gigabytes.
    long diskSizeGb = 10;
    // Optional: For Hyperdisk Balanced or Hyperdisk Extreme disks,
    // this is the number of I/O operations per second (IOPS) that the disk can handle
    long provisionedIops = 3000;
    // Optional: For Hyperdisk Balanced or Hyperdisk Throughput volumes,
    // this is an integer that represents the throughput,
    // measured in MiB per second, that the disk can handle.
    long provisionedThroughput = 140;

    createHyperdisk(projectId, zone, diskName, diskType, diskSizeGb,
            provisionedIops, provisionedThroughput);
  }

  // Creates a hyperdisk in a project
  public static Disk createHyperdisk(String projectId, String zone, String diskName,
                                     String diskType, long diskSizeGb, long provisionedIops,
                                     long provisionedThroughput)
          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 (DisksClient client = DisksClient.create()) {
      // Create a disk.
      Disk disk = Disk.newBuilder()
              .setZone(zone)
              .setName(diskName)
              .setType(diskType)
              .setSizeGb(diskSizeGb)
              .setProvisionedIops(provisionedIops)
              .setProvisionedThroughput(provisionedThroughput)
              .build();

      InsertDiskRequest request = InsertDiskRequest.newBuilder()
              .setProject(projectId)
              .setZone(zone)
              .setDiskResource(disk)
              .build();

      // Wait for the insert disk operation to complete.
      Operation operation = client.insertAsync(request).get(1, TimeUnit.MINUTES);

      if (operation.hasError()) {
        System.out.println("Disk creation failed!");
        throw new Error(operation.getError().toString());
      }

      // Wait for server update
      TimeUnit.SECONDS.sleep(10);

      Disk hyperdisk = client.get(projectId, zone, diskName);

      System.out.printf("Hyperdisk '%s' has been created successfully", hyperdisk.getName());

      return hyperdisk;
    }
  }
}

Node.js

// Import the Compute library
const computeLib = require('@google-cloud/compute');
const compute = computeLib.protos.google.cloud.compute.v1;

// Instantiate a diskClient
const disksClient = new computeLib.DisksClient();
// 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 disksClient.getProjectId();

// The zone where your VM and new disk are located.
// zone = 'europe-central2-b';

// The name of the new disk
// diskName = 'disk-name';

// The type of disk. This value uses the following format:
// "zones/{zone}/diskTypes/(hyperdisk-balanced|hyperdisk-extreme|hyperdisk-ml|hyperdisk-throughput)".
// For example: "zones/us-west3-b/diskTypes/hyperdisk-balanced"
const diskType = `zones/${zone}/diskTypes/hyperdisk-balanced`;
// Size of the new disk in gigabytes.
const diskSizeGb = 10;
// Optional: For Hyperdisk Balanced or Hyperdisk Extreme disks,
// this is the number of I/O operations per second (IOPS) that the disk can handle.
const provisionedIops = 3000;
// Optional: For Hyperdisk Balanced or Hyperdisk Throughput volumes,
// this is an integer that represents the throughput,
// measured in MiB per second, that the disk can handle.
const provisionedThroughput = 140;

async function callCreateComputeHyperdisk() {
  // Create a disk
  const disk = new compute.Disk({
    sizeGb: diskSizeGb,
    name: diskName,
    zone,
    type: diskType,
    provisionedIops,
    provisionedThroughput,
  });

  const [response] = await disksClient.insert({
    project: projectId,
    zone,
    diskResource: disk,
  });

  let operation = response.latestResponse;

  // Wait for the create disk operation to complete.
  while (operation.status !== 'DONE') {
    [operation] = await zoneOperationsClient.wait({
      operation: operation.name,
      project: projectId,
      zone: operation.zone.split('/').pop(),
    });
  }

  console.log(`Disk: ${diskName} created.`);
}

await callCreateComputeHyperdisk();

Después de crear el disco, puedes conectarlo a cualquier VM en ejecución o detenida.

Formatea y activa el disco

Después de crear y conectar el disco nuevo a una VM, debes formatearlo y activarlo para que el sistema operativo pueda usar el espacio de almacenamiento disponible.

¿Qué sigue?