Membuat Penyimpanan Gabungan Hyperdisk


Penyimpanan Gabungan Hyperdisk adalah resource block storage baru yang membantu Anda mengelola block storage Hyperdisk secara agregat. Penyimpanan Gabungan Hyperdisk tersedia dalam varian Hyperdisk Throughput Storage Pool dan Hyperdisk Balanced Storage Pool.

Anda harus menentukan properti berikut saat membuat pool penyimpanan:

  • Zona
  • Jenis kumpulan penyimpanan
  • Jenis penyediaan kapasitas
  • Kapasitas yang disediakan gabungan
  • Jenis penyediaan performa
  • IOPS dan throughput yang disediakan pool

Anda dapat menggunakan jenis penyediaan kapasitas Standar, kapasitas Lanjutan, performa Standar, atau performa Lanjutan dengan Hyperdisk Storage Pool:

  • Kapasitas standar: Kapasitas yang disediakan untuk setiap disk yang dibuat di kumpulan penyimpanan dikurangi dari total kapasitas yang disediakan untuk kumpulan penyimpanan.
  • Kapasitas lanjutan: Kumpulan penyimpanan mendapatkan manfaat dari penyediaan virtual dan pengurangan data. Hanya jumlah data yang benar-benar ditulis yang dikurangi dari total kapasitas yang disediakan untuk kumpulan penyimpanan.
  • Performa standar: Performa yang disediakan untuk setiap disk yang dibuat di kumpulan penyimpanan dikurangi dari total performa yang disediakan untuk kumpulan penyimpanan.
  • Performa lanjutan: Performa yang disediakan untuk setiap disk diuntungkan dari penyediaan tipis. Hanya jumlah performa yang digunakan oleh disk yang dikurangi dari total performa yang disediakan untuk kumpulan penyimpanan.

Sebelum memulai

  • Jika Anda belum melakukannya, siapkan autentikasi. Autentikasi adalah proses yang digunakan untuk memverifikasi identitas Anda untuk mengakses Google Cloud layanan dan API. Untuk menjalankan kode atau sampel dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine dengan memilih salah satu opsi berikut:

    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. Menginstal Google Cloud CLI. Setelah penginstalan, lakukan inisialisasi Google Cloud CLI dengan menjalankan perintah berikut:

      gcloud init

      Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

    2. Set a default region and zone.

    Go

    Untuk menggunakan contoh Go di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      Menginstal Google Cloud CLI.

      Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

      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.

    Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

    Java

    Untuk menggunakan contoh Java di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      Menginstal Google Cloud CLI.

      Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

      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.

    Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

    Node.js

    Untuk menggunakan contoh Node.js di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      Menginstal Google Cloud CLI.

      Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

      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.

    Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

    REST

    Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, Anda menggunakan kredensial yang Anda berikan ke gcloud CLI.

      Menginstal Google Cloud CLI.

      Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

    Untuk mengetahui informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud .

Peran dan izin yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk membuat pool penyimpanan, minta administrator untuk memberi Anda peran IAM berikut pada project:

  • Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1)
  • Untuk terhubung ke instance VM yang dapat dijalankan sebagai akun layanan: Service Account User (v1) (peran roles/iam.serviceAccountUser)

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk membuat pool penyimpanan. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk membuat pool penyimpanan:

  • compute.storagePools.create di project
  • compute.storagePools.setLabels di project

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Batasan

Perhatikan batasan berikut saat membuat Gabungan Penyimpanan Hyperdisk:

Batas resource:

  • Anda dapat membuat Hyperdisk Storage Pool dengan kapasitas yang disediakan hingga 5 PiB.
  • Anda dapat membuat maksimum 5 kumpulan penyimpanan per jam.
  • Anda dapat membuat maksimal 10 kumpulan penyimpanan per hari.
  • Anda dapat membuat maksimal 10 kumpulan penyimpanan per project.
  • Anda tidak dapat mengubah model penyediaan untuk pool; Anda tidak dapat mengubah pool penyimpanan berkapasitas Standar menjadi pool penyimpanan berkapasitas Lanjutan atau pool penyimpanan berperforma Lanjutan menjadi pool penyimpanan berperforma Standar.
  • Kumpulan penyimpanan adalah resource zona.
  • Anda dapat membuat hingga 1.000 disk di kumpulan penyimpanan.
  • Anda hanya dapat menggunakan Gabungan Penyimpanan Hyperdisk dengan Compute Engine. Instance Cloud SQL tidak dapat menggunakan Gabungan Penyimpanan Hyperdisk.
  • Anda dapat mengubah kapasitas atau performa yang disediakan untuk pool penyimpanan maksimal dua kali dalam periode 24 jam.

Batas untuk disk di pool penyimpanan:

  • Hanya disk baru di project dan zona yang sama yang dapat dibuat di kumpulan penyimpanan.
  • Memindahkan disk ke dalam atau ke luar pool penyimpanan tidak diizinkan. Untuk memindahkan disk ke dalam atau ke luar kumpulan penyimpanan, Anda harus membuat ulang disk dari snapshot. Untuk mengetahui informasi selengkapnya, lihat Mengubah jenis disk.
  • Untuk membuat disk booting di penyimpanan gabungan, Anda harus menggunakan Penyimpanan Gabungan Hyperdisk Balanced.
  • Kumpulan penyimpanan tidak mendukung disk regional.
  • Anda tidak dapat meng-clone, membuat snapshot instan dari, atau mengonfigurasi Replikasi Asinkron untuk disk di kumpulan penyimpanan.

Rentang kapasitas dan batas performa yang disediakan

Saat membuat kumpulan penyimpanan, kapasitas, IOPS, dan throughput yang disediakan tunduk pada batas yang dijelaskan dalam Batas untuk kumpulan penyimpanan.

Membuat Penyimpanan Gabungan Hyperdisk

Untuk membuat Kumpulan Penyimpanan Hyperdisk baru, gunakan Google Cloud konsol, Google Cloud CLI, atau REST.

Konsol

  1. Buka halaman Create a storage pool di konsol Google Cloud .
    Buka halaman Create Storage Pool
  2. Di kolom Name, masukkan nama unik untuk pool penyimpanan.
  3. Opsional: Di kolom Deskripsi, masukkan deskripsi untuk kumpulan penyimpanan.
  4. Pilih Region dan Zona tempat pembuatan kumpulan penyimpanan.
  5. Pilih nilai untuk Jenis pool penyimpanan.
  6. Pilih jenis penyediaan di kolom Jenis kapasitas dan tentukan kapasitas yang akan disediakan untuk pool penyimpanan di kolom Kapasitas pool penyimpanan. Anda dapat menentukan ukuran dari 10 TiB hingga 1 PiB.

    Untuk membuat pool penyimpanan dengan kapasitas besar, Anda mungkin harus meminta penyesuaian kuota.

  7. Pilih jenis penyediaan di kolom Jenis performa.

  8. Untuk Hyperdisk Balanced Storage Pools, di kolom IOPS yang disediakan, masukkan IOPS yang akan disediakan untuk storage pool.

  9. Untuk Hyperdisk Throughput Storage Pool atau Hyperdisk Balanced Storage Pool, di kolom Provisioned throughput, masukkan throughput yang akan disediakan untuk storage pool.

  10. Klik Submit untuk membuat pool penyimpanan.

gcloud

Untuk membuat Gabungan Penyimpanan Hyperdisk, gunakan perintah 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

Ganti kode berikut:

  • NAME: nama pool penyimpanan yang unik.
  • ZONE: zona tempat membuat pool penyimpanan, misalnya, us-central1-a.
  • STORAGE_POOL_TYPE: jenis disk yang akan disimpan di kumpulan penyimpanan. Nilai yang diizinkan adalah hyperdisk-throughput dan hyperdisk-balanced.
  • CAPACITY_TYPE: Opsional: jenis penyediaan kapasitas kumpulan penyimpanan. Nilai yang diizinkan adalah advanced dan standard. Jika tidak ditentukan, nilai advanced akan digunakan.
  • POOL_CAPACITY: total kapasitas yang akan disediakan untuk pool penyimpanan baru, yang ditentukan dalam GiB secara default.
  • PERFORMANCE_TYPE: Opsional: jenis penyediaan performa pool penyimpanan. Nilai yang diizinkan adalah advanced dan standard. Jika tidak ditentukan, nilai advanced akan digunakan.
  • IOPS: IOPS yang akan disediakan untuk kumpulan penyimpanan. Anda hanya dapat menggunakan flag ini dengan Hyperdisk Balanced Storage Pools.
  • THROUGHPUT: throughput dalam MBps yang akan disediakan untuk pool penyimpanan.
  • DESCRIPTION: Opsional: string teks yang mendeskripsikan kumpulan penyimpanan.

REST

Buat permintaan POST untuk membuat Gabungan Penyimpanan Hyperdisk menggunakan metode 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"
}

Ganti kode berikut:

  • PROJECT_ID: the project ID
  • ZONE: zona tempat membuat pool penyimpanan, misalnya, us-central1-a.
  • NAME: nama unik untuk pool penyimpanan .
  • DESCRIPTION: Opsional: string teks yang mendeskripsikan kumpulan penyimpanan.
  • POOL_CAPACITY: total kapasitas yang akan disediakan untuk kumpulan penyimpanan baru, yang ditentukan dalam GiB secara default.
  • STORAGE_POOL_TYPE: jenis disk yang akan disimpan di kumpulan penyimpanan. Nilai yang diizinkan adalah hyperdisk-throughput dan hyperdisk-balanced.
  • IOPS: Opsional: IOPS yang akan disediakan untuk kumpulan penyimpanan. Anda hanya dapat menggunakan flag ini dengan Hyperdisk Balanced Storage Pools.
  • THROUGHPUT: Opsional: Throughput dalam MBps yang akan disediakan untuk kumpulan penyimpanan.
  • CAPACITY_TYPE: Opsional: jenis penyediaan kapasitas kumpulan penyimpanan. Nilai yang diizinkan adalah advanced dan standard. Jika tidak ditentukan, nilai advanced akan digunakan.
  • PERFORMANCE_TYPE: Opsional: jenis penyediaan performa pool penyimpanan. Nilai yang diizinkan adalah advanced dan standard. Jika tidak ditentukan, nilai advanced akan digunakan.

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();

Apa langkah selanjutnya?