Hyperdisk ストレージ プールを作成する


Hyperdisk ストレージ プールは、Hyperdisk ブロック ストレージの集約管理に役立つ新しいブロック ストレージ リソースです。Hyperdisk ストレージ プールには Hyperdisk Throughput ストレージ プールと Hyperdisk Balanced ストレージ プールがあります。

ストレージ プールを作成するときに、次のプロパティを指定する必要があります。

  • ストレージ プールのタイプ
  • ゾーン
  • プールにプロビジョニングされた容量
  • プールにプロビジョニングされた IOPS とスループット

Hyperdisk ストレージ プールでは、標準容量または大容量のプロビジョニングを使用できます。標準容量では、各ディスクの合計サイズがストレージ プールのプロビジョニング容量から差し引かれます。大容量のストレージ プールでは、シン プロビジョニングとデータ削減により、実際に書き込まれたデータ量のみがプールにプロビジョニングされた容量から差し引かれます。

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

必要なロールと権限

ストレージ プールの作成に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

  • Compute インスタンス管理者(v1)roles/compute.instanceAdmin.v1
  • サービス アカウントとして実行できる VM インスタンスに接続する: サービス アカウント ユーザー(v1)(roles/iam.serviceAccountUser ロール)

ロールの付与の詳細については、アクセス権の管理をご覧ください。

これらの事前定義ロールには、ストレージ プールの作成に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

ストレージ プールを作成するには、次の権限が必要です。

  • プロジェクトに対する compute.storagePools.create
  • プロジェクトに対する compute.storagePools.setLabels

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

制限事項

Hyperdisk ストレージ プールを作成する際は、次の制限事項に注意してください。

リソースの上限:

  • 作成する Hyperdisk ストレージ プールにプロビジョニングされる容量は最大 1 PiB です。
  • 1 時間あたり最大 5 つのストレージ プールを作成できます。
  • 1 日に作成できるストレージ プールは 10 個までです。
  • プロジェクトごとに最大 10 個のストレージ プールを作成できます。
  • プールのプロビジョニング モデルは変更できません。標準容量のストレージ プールを大容量のストレージ プールに変更することはできません。
  • ストレージ プールはゾーンリソースです。
  • ストレージ プールには最大 1,000 個のディスクを作成できます。
  • Hyperdisk ストレージ プールは Compute Engine でのみ使用できます。Cloud SQL インスタンスは Hyperdisk ストレージ プールを使用できません。
  • ストレージ プールのプロビジョニング容量は 24 時間に 2 回まで変更できます。

ストレージ プールのディスクの上限:

  • ストレージ プールの新しいディスクは、同じプロジェクトとゾーン内にのみ作成できます。
  • ストレージ プール内外にディスクを移動することはできません。ストレージ プール内外にディスクを移動するには、スナップショットからディスクを再作成する必要があります。詳細については、ディスクタイプを変更するをご覧ください。
  • ストレージ プールにブートディスクを作成するには、Hyperdisk Balanced ストレージ プールを使用する必要があります。
  • ストレージ プールにリージョン ディスクを作成することはできません。
  • ストレージ プールにディスクのクローンは作成できません。また、ディスクのインスタント スナップショットを作成することや、Persistent Disk の非同期レプリケーションを構成することもできません。

容量の範囲とプロビジョニングされたパフォーマンスの上限

ストレージ プールを作成する際、プロビジョニングされた容量、IOPS、スループットは次の制限の対象となります。

Hyperdisk ストレージ プールを作成する

新しい Hyperdisk ストレージ プールを作成するには、Google Cloud コンソール、Google Cloud CLI、または REST を使用します。

コンソール

  1. Google Cloud コンソールで [ストレージ プールの作成] ページに移動します。
    [ストレージ プールの作成] ページに移動
  2. [名前] フィールドに、ストレージ プールの一意の名前を入力します。
  3. 省略可: [説明] フィールドに、ストレージ プールの説明を入力します。
  4. [ロケーション] フィールドで、ストレージ プールを作成するリージョンとゾーンを選択します。
  5. [ストレージ プールのタイプ] の値を選択します。
  6. [容量のタイプ] を選択し、ストレージ プールにプロビジョニングする容量を [ストレージ プール容量] フィールドで指定します。サイズは 10 TiB~1 PiB の範囲で指定できます。

    大容量のストレージ プールを作成するには、割り当ての増加をリクエストする必要があります。

  7. Hyperdisk Balanced ストレージ プールの場合、[プロビジョニングされた IOPS] フィールドに、ストレージ プールにプロビジョニングする IOPS を入力します。

  8. Hyperdisk Throughput ストレージ プールまたは Hyperdisk Balanced Storage プールの場合、[プロビジョニングされたスループット] フィールドに、ストレージ プールにプロビジョニングするスループットを入力します。

  9. [送信] をクリックして、ストレージ プールを作成します。

gcloud

Hyperdisk ストレージ プールを作成するには、gcloud compute storage-pools create コマンドを使用します。

gcloud compute storage-pools create NAME  \
    --zone=ZONE   \
    --storage-pool-type=STORAGE_POOL_TYPE   \
    --capacity-provisioning-type=CAPACITY_PROVISIONING_TYPE \
    --provisioned-capacity=POOL_CAPACITY   \
    --provisioned-iops=IOPS   \
    --provisioned-throughput=THROUGHPUT   \
    --description=DESCRIPTION

次のように置き換えます。

  • NAME: 一意のストレージ プール名。
  • ZONE: ストレージ プールを作成するゾーン(例: us-central1-a)。
  • STORAGE_POOL_TYPE: ストレージ プールに保存するディスクのタイプ。指定できる値は hyperdisk-throughputhyperdisk-balanced です。
  • CAPACITY_PROVISIONING_TYPE: 省略可。ストレージ プール容量のプロビジョニング タイプ。指定できる値は advancedstandard です。指定しない場合、値 advanced が使用されます。
  • POOL_CAPACITY: 新しいストレージ プールにプロビジョニングする合計容量。デフォルトでは GiB で指定します。
  • IOPS: ストレージ プールにプロビジョニングする IOPS。このフラグは、Hyperdisk Balanced ストレージ プールでのみ使用できます。
  • THROUGHPUT: ストレージ プールにプロビジョニングするスループット(Mbps)。
  • DESCRIPTION: 省略可。ストレージ プールを説明するテキスト文字列。

REST

storagePools.insert メソッドを使用して POST リクエストを作成し、Hyperdisk ストレージ プールを作成します。

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_PROVISIONING_TYPE"
}

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • ZONE: ストレージ プールを作成するゾーン(例: us-central1-a)。
  • NAME: ストレージ プールの名前。
  • DESCRIPTION: 省略可。ストレージ プールを説明するテキスト文字列。
  • POOL_CAPACITY: 新しいストレージ プールにプロビジョニングする合計容量。デフォルトでは GiB で指定します。
  • STORAGE_POOL_TYPE: ストレージ プールに保存するディスクのタイプ。指定できる値は hyperdisk-throughputhyperdisk-balanced です。
  • IOPS: 省略可。ストレージ プールにプロビジョニングする IOPS。このフラグは、Hyperdisk Balanced ストレージ プールでのみ使用できます。
  • THROUGHPUT: 省略可。ストレージ プールにプロビジョニングするスループット(Mbps)。
  • CAPACITY_PROVISIONING_TYPE: 省略可。ストレージ プール容量のプロビジョニング タイプ。指定できる値は advancedstandard です。指定しない場合、値 advanced が使用されます。

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 = "europe-central2-b";
    // Name of the storagePool you want to create.
    String storagePoolName = "YOUR_STORAGE_POOL_NAME";
    // The type of disk you want to create. This value uses the following format:
    // "projects/%s/zones/%s/storagePoolTypes/hyperdisk-throughput|hyperdisk-balanced"
    String storagePoolType = "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.
    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;

    createHyperdiskStoragePool(projectId, zone, storagePoolName, storagePoolType,
            capacityProvisioningType, provisionedCapacity, provisionedIops, provisionedThroughput);
  }

  // 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)
          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)
              .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;
    }
  }
}

次のステップ