Compute Engine Persistent Disk CSI ドライバは、Google Kubernetes Engine(GKE)クラスタの Hyperdisk ストレージにアクセスする基本的な方法です。
始める前に
始める前に、次の作業が完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
- デフォルトのリージョンとゾーンをサポートされている値のいずれかに設定します。
要件
GKE で Hyperdisk ボリュームを使用するには、クラスタが次の要件を満たしている必要があります。
- GKE バージョン 1.26 以降を実行している Linux クラスタを使用する。リリース チャンネルを使用する場合は、このドライバに必要な GKE バージョン以上がチャンネルにあることを確認してください。
- Compute Engine Persistent Disk の CSI ドライバが有効になっていることを確認します。Compute Engine Persistent Disk ドライバは新しい Autopilot クラスタと Standard クラスタでデフォルトで有効になっており、Autopilot の使用時には無効にすることや編集することはできません。使用しているクラスタで Compute Engine Persistent Disk の CSI ドライバを有効にする必要がある場合は、既存のクラスタで Compute Engine Persistent Disk の CSI ドライバを有効にするをご覧ください。
GKE の Hyperdisk ボリュームを作成する
このセクションでは、GKE の Compute Engine の CSI ドライバによってバックアップされる Hyperdisk ボリュームの作成の概要について説明します。
StorageClass を作成する
Hyperdisk をサポートするため、Compute Engine Persistent Disk の CSI ドライバには、次の Persistent Disk ストレージの Type
フィールドが用意されています。
hyperdisk-balanced
hyperdisk-throughput
hyperdisk-extreme
hyperdisk-ml
必要なスループットまたは IOPS レベルで新しい StorageClass を作成するには、プロビジョナー フィールドで pd.csi.storage.gke.io
を使用し、いずれかの Hyperdisk ストレージ タイプを指定します。
各 Hyperdisk タイプにはパフォーマンスのデフォルト値があります。これは、プロビジョニングされた初期ディスクサイズによって決まります。StorageClass の作成時に、Hyperdisk タイプに応じて次のパラメータを指定できます。これらのパラメータを省略した場合は、容量ベースのディスクタイプのデフォルトが使用されます。スループットまたは IOPS の許容値については、Hyperdisk ボリュームのパフォーマンス レベルを計画するをご覧ください。
パラメータ | Hyperdisk のタイプ | 使用法 |
---|---|---|
provisioned-throughput-on-create |
Hyperdisk Balanced*、Hyperdisk Throughput | MiBps 単位のスループット値は「Mi」修飾子を使用して表します。たとえば、必要なスループットが 250 MiBps の場合は、StorageClass の作成時に "250Mi" を指定します。 |
provisioned-iops-on-create |
Hyperdisk Balanced、Hyperdisk IOPS | IOPS 値は修飾子なしで指定する必要があります。たとえば、7,000 IOPS が必要な場合は、StorageClass の作成時に "7000" を指定します。 |
次の例では、Hyperdisk のタイプごとに StorageClass の作成方法を示します。
Hyperdisk Balanced
次のマニフェストを
hdb-example-class.yaml
という名前のファイルに保存します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: balanced-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-balanced provisioned-throughput-on-create: "250Mi" provisioned-iops-on-create: "7000"
StorageClass を作成します。
kubectl create -f hdb-example-class.yaml
Hyperdisk Throughput
次のマニフェストを
hdt-example-class.yaml
という名前のファイルに保存します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: throughput-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-throughput provisioned-throughput-on-create: "50Mi"
StorageClass を作成します。
kubectl create -f hdt-example-class.yaml
Hyperdisk Extreme
次のマニフェストを
hdx-example-class.yaml
という名前のファイルに保存します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: extreme-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-extreme provisioned-iops-on-create: "50000"
StorageClass を作成します。
kubectl create -f hdx-example-class.yaml
クラスタで使用可能な StorageClass の名前を確認するには、次のコマンドを実行します。
kubectl get sc
PersistentVolumeClaim を作成する
Compute Engine Persistent Disk の CSI ドライバの StorageClass を参照する PersistentVolumeClaim を作成できます。
Hyperdisk Balanced
この例では、Hyperdisk Balanced ボリュームのターゲット ストレージ容量を 20 GiB として指定します。
次の PersistentVolumeClaim マニフェストを
pvc-example.yaml
という名前のファイルに保存します。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: balanced-storage resources: requests: storage: 20Gi
前の例で作成した StorageClass を参照する PersistentVolumeClaim を適用します。
kubectl apply -f pvc-example.yaml
Hyperdisk Throughput
この例では、Hyperdisk Throughput ボリュームのターゲット ストレージ容量を 2 TiB として指定します。
次の PersistentVolumeClaim マニフェストを
pvc-example.yaml
という名前のファイルに保存します。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: throughput-storage resources: requests: storage: 2Ti
前の例で作成した StorageClass を参照する PersistentVolumeClaim を適用します。
kubectl apply -f pvc-example.yaml
Hyperdisk Extreme
この例では、Hyperdisk Extreme ボリュームの最小ストレージ容量を 64 GiB として指定します。
次の PersistentVolumeClaim マニフェストを
pvc-example.yaml
という名前のファイルに保存します。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: extreme-storage resources: requests: storage: 64Gi
前の例で作成した StorageClass を参照する PersistentVolumeClaim を適用します。
kubectl apply -f pvc-example.yaml
Deployment を作成して、Hyperdisk ボリュームを使用する
PersistentVolume で Pod を使用する場合は、ワークロード コントローラ(Deployment、StatefulSet など)を使用することをおすすめします。
次の例では、前のセクションで作成した PersistentVolumeClaim を使用して、Nginx ウェブサーバーをデプロイする Pod を構成するマニフェストを作成します。次のマニフェストの例を
hyperdisk-example-deployment.yaml
として保存します。apiVersion: apps/v1 kind: Deployment metadata: name: web-server-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /var/lib/www/html name: mypvc volumes: - name: mypvc persistentVolumeClaim: claimName: podpvc readOnly: false
hyperdisk-example-deployment.yaml
マニフェスト ファイルに基づいて Deployment を作成するには、次のコマンドを実行します。kubectl apply -f hyperdisk-example-deployment.yaml
Deployment が正常に作成されたことを確認します。
kubectl get deployment
Hyperdisk インスタンスのプロビジョニングが完了するまで数分かかる場合があります。デプロイが完了すると、
READY
ステータスが報告されます。次のコマンドを実行して、PersistentVolumeClaim のステータスをモニタリングすることで進行状況を確認できます。
kubectl get pvc
スナップショットから Hyperdisk ボリュームをプロビジョニングする
既存の Persistent Disk のスナップショットから新しい Hyperdisk ボリュームを作成するには、Google Cloud コンソール、Google Cloud CLI、または Compute Engine API を使用します。Persistent Disk のスナップショットを作成する方法については、ボリューム スナップショットの作成と使用をご覧ください。
コンソール
Google Cloud コンソールで [ディスク] ページに移動します。
[ディスクを作成] をクリックします。
[ディスクタイプ] で、ディスクタイプに次のいずれかを選択します。
- Hyperdisk Balanced
- Hyperdisk Extreme
- Hyperdisk Throughput
[ディスクソースのタイプ] で、[スナップショット] をクリックします。
復元するスナップショットの名前を選択します。
新しいディスクのサイズ(GiB 単位)を選択します。この数は、スナップショットの元のソースディスク以上である必要があります。
デフォルト値と異なる場合は、ディスクに必要な [プロビジョニングされたスループット] または [プロビジョニングされた IOPS] を設定します。
[作成] をクリックして、Hyperdisk ボリュームを作成します。
gcloud
gcloud compute disks create
コマンドを実行して、スナップショットから Hyperdisk ボリュームを作成します。
Hyperdisk Balanced
gcloud compute disks create DISK_NAME \
--size=SIZE \
--source-snapshot=SNAPSHOT_NAME \
--provisioned-throughput=TRHROUGHPUT_LIMIT \
--provisioned-iops=IOPS_LIMIT \
--type=hyperdisk-balanced
次のように置き換えます。
DISK_NAME
: 新しいディスクの名前。SIZE
: 新しいディスクのサイズ。ギビバイト(GiB)またはテビバイト(TiB)単位で指定します。最新の容量制限については、Compute Engine のドキュメントをご覧ください。SNAPSHOT_NAME
: 復元するスナップショットの名前。THROUGHPUT_LIMIT
: 省略可。Hyperdisk Balanced ディスクの場合、これはディスクが処理できるスループット(MiBps)を表す整数です。最新の制限事項については、Compute Engine のドキュメントをご覧ください。IOPS_LIMIT
: 省略可。Hyperdisk Balanced ディスクの場合、これはディスクで処理可能な IOPS の数です。最新のパフォーマンスの制限については、Compute Engine のドキュメントをご覧ください。
Hyperdisk Throughput
gcloud compute disks create DISK_NAME \
--size=SIZE \
--source-snapshot=SNAPSHOT_NAME \
--provisioned-throughput=TRHROUGHPUT_LIMIT \
--type=hyperdisk-throughput
次のように置き換えます。
DISK_NAME
: 新しいディスクの名前。SIZE
: 新しいディスクのサイズ。ギビバイト(GiB または GB)またはテビバイト(TiB または TB)。最新の容量制限については、Compute Engine のドキュメントをご覧ください。SNAPSHOT_NAME
: 復元するスナップショットの名前。THROUGHPUT_LIMIT
: 省略可: Hyperdisk Throughput ディスクの場合、これはディスクが処理できるスループット(MiBps)を表す整数です。最新のパフォーマンスの制限については、Compute Engine のドキュメントをご覧ください。
Hyperdisk Extreme
gcloud compute disks create DISK_NAME \
--size=SIZE \
--source-snapshot=SNAPSHOT_NAME \
--provisioned-iops=IOPS_LIMIT \
--type=hyperdisk-iops
次のように置き換えます。
DISK_NAME
: 新しいディスクの名前。SIZE
: 新しいディスクのサイズ。ギビバイト(GiB または GB)またはテビバイト(TiB または TB)。最新の容量制限については、Compute Engine のドキュメントをご覧ください。SNAPSHOT_NAME
: 復元するスナップショットの名前。IOPS_LIMIT
: 省略可: Hyperdisk Extreme ディスクの場合、これはディスクが処理できる 1 秒あたりの I/O オペレーションの数です。最新のパフォーマンスの制限については、Compute Engine のドキュメントをご覧ください。
Hyperdisk ボリュームのスナップショットを作成する
Hyperdisk ボリュームからスナップショットを作成するには、Persistent Disk ボリュームのスナップショットを作成する場合と同じ手順に沿って操作します。
既存の Hyperdisk ボリュームにプロビジョニングされたスループットまたは IOPS を更新する
このセクションでは、Hyperdisk ボリュームにプロビジョニングされたパフォーマンスの変更方法について説明します。
スループット
プロビジョニングされたスループットの更新は、Hyperdisk Balanced ボリュームと Hyperdisk Throughput ボリュームでのみサポートされています。
Hyperdisk ボリュームのプロビジョニングされたスループット レベルを更新するには、Hyperdisk ボリュームにプロビジョニングされたパフォーマンスの変更の Google Cloud コンソール、gcloud CLI、または Compute Engine API の手順に沿って操作します。
ボリュームの作成後に、Hyperdisk ボリュームに対してプロビジョニングされたスループット レベル(4 時間に 1 回まで)を変更できます。新しいスループット レベルが有効になるまでに、最大で 15 分かかることがあります。パフォーマンスの変更中は、パフォーマンス SLA と SLO が無効になります。実行中のインスタンスにディスクをアタッチしているかどうかにかかわらず、既存のボリュームのスループット レベルをいつでも変更できます。
指定する新しいスループット レベルは、Hyperdisk ボリュームでサポートされている値に従う必要があります。
IOPS
プロビジョニングされた IOPS の更新は、Hyperdisk Balanced ボリュームと Hyperdisk Extreme ボリュームでのみサポートされています。
Hyperdisk ボリュームのプロビジョニングされた IOPS レベルを更新するには、Hyperdisk ボリュームにプロビジョニングされたパフォーマンスを変更するの Google Cloud コンソール、gcloud CLI、Compute Engine API の手順に沿って操作します。
ボリュームの作成後に、Hyperdisk IOPS ボリュームに対してプロビジョニングされた IOPS レベル(4 時間に 1 回まで)を変更できます。新しい IOPS レベルが有効になるまでに、最大で 15 分かかることがあります。パフォーマンスの変更中は、パフォーマンス SLA と SLO が無効になります。ディスクが実行中のインスタンスにアタッチしているかどうかにかかわらず、既存のボリュームの IOPS レベルをいつでも変更できます。
指定する新しい IOPS レベルは、Hyperdisk ボリュームでサポートされている値に従う必要があります。
Hyperdisk ボリュームにプロビジョニングされた IOPS レベルを更新するには、PersistentVolumeClaim と PersistentVolume リソースをバックアップする Persistent Disk の名前を指定する必要があります。
Google Cloud コンソールのオブジェクト ブラウザに移動します。
PersistentVolumeClaim オブジェクトのエントリを見つけます。
[ボリューム] をクリックします。
関連付けられている PersistentVolume の [YAML] タブを開きます。このタブで CSI
volumeHandle
の値を確認します。このハンドルの最後の要素(
pvc-XXXXX
のような値のはずです)をメモします。これは、PersistentVolumeClaim の名前です。プロジェクトとゾーンもメモします。
Hyperdisk ボリュームのスループットまたは IOPS をモニタリングする
Hyperdisk volume ボリュームのプロビジョニングされたパフォーマンスをモニタリングするには、Compute Engine ドキュメントのプロビジョニングされた IOPS とスループットを分析するをご覧ください。
トラブルシューティング
このセクションでは、GKE の Hyperdisk ボリュームに関する問題のトラブルシューティングについて説明します。
パフォーマンスまたは容量を変更できない: 比率が範囲外
プロビジョニングされたパフォーマンス レベルまたは容量を変更しようとしたが、選択したパフォーマンス レベルまたは容量がボリュームで許容可能な範囲外である場合、次のエラーが発生します。
Requested provisioned throughput cannot be higher than <value>.
Requested provisioned throughput cannot be lower than <value>.
Requested provisioned throughput is too high for the requested disk size.
Requested provisioned throughput is too low for the requested disk size.
Requested disk size is too high for current provisioned throughput.
Hyperdisk Throughput ボリュームにプロビジョニングされるスループットは、次の要件を満たす必要があります。
- 容量 1 TiB あたり少なくとも 10 MiBps、容量 1 TiB あたり 90 MiBps 以下。
- ボリュームあたり最大 600 MiBps。
この問題を解決するには、リクエストされたスループットまたは容量が許容範囲内になるように修正し、コマンドを再発行します。
パフォーマンスを変更できない: レート制限
プロビジョニングされたパフォーマンス レベルを変更しようとしたが、過去 4 時間以内にパフォーマンス レベルがすでに変更されている場合、次のエラーが発生します。
Cannot update provisioned throughput due to being rate limited.
Cannot update provisioned iops due to being rate limited.
Hyperdisk Throughput と IOPS ボリュームでは、プロビジョニングされたパフォーマンスを 4 時間に 1 回更新できます。この問題を解決するには、ボリュームのクールダウン タイマーが経過するまで待ってから、コマンドを再発行します。
次のステップ
- Persistent Disk ボリュームを Hyperdisk に移行する方法を学習する。
- ボリューム拡張の使用方法を確認する。
- ボリューム スナップショットの使用方法を学習する。
- GitHub のドライバの詳細を確認する。