このページでは、Compute Engine 永続ディスクなどの外部ストレージ ハードウェアを Google Kubernetes Engine(GKE)ワークロードのエフェメラル ボリュームとして使用する方法について説明します。Kubernetes の Volume と StorageClass に精通している必要があります。
Kubernetes でエフェメラル ストレージを使用するタイミング
エフェメラル ストレージは、データ処理パイプライン、ML ジョブ、バッチ処理、ローカル キャッシュ、分析など、ワークロードがアプリケーションのライフサイクル中にのみデータを必要とする状況で役立ちます。デフォルトでは、GKE ノードのブートディスクの一部を Pod のエフェメラル ストレージとして使用できます。このアプローチを採用する場合は、慎重にスペース プランニングを行う必要があります。
Kubernetes の汎用エフェメラル ボリュームでは、PersistentVolumeClaim を使用して、Pod のエフェメラル ストレージを明示的にリクエストできます。GKE は Compute Engine 永続ディスクを動的にプロビジョニングし、ディスクをノードにアタッチします。このタイプのエフェメラル ストレージは、次のような状況で役立ちます。
- ワークロードのパフォーマンス要件が高く、ストレージ ハードウェアを制御する必要がある。
- コンテナ固有の短期的なエフェメラル ストレージが必要。
emptyDir
を使用してエフェメラル ストレージをプロビジョニングしたくない。emptyDir
ボリュームは、複数のコンテナでエフェメラル ストレージのデータを共有する場合に便利です。- GKE の組み込みデフォルト値よりも多くのエフェメラル ストレージ容量が必要。
- Standard モードの GKE クラスタで、ノード ブートディスクのサイズとタイプを事前に決めておく必要がない。
GKE のエフェメラル ストレージのタイプ
一般に、Pod とコンテナでは、ブートディスクのストレージ容量や専用の永続ディスクをエフェメラル ストレージとして使用できます。次の表に、その違いを示します。
ストレージの種類 | 使い方 | 説明 |
---|---|---|
ブートディスク - 永続ディスク | Pod 仕様で 手順については、ボリュームの作成をご覧ください。 |
リクエストされたエフェメラル ストレージは、ノード ブートディスクの予約済み部分から取得されます。これは、Autopilot クラスタと Standard クラスタの両方でデフォルトになっています。 Pod でエフェメラル ストレージ リクエストが少ない場合や、Pod 内の複数のコンテナ間でエフェメラル データを共有する場合に使用します。 Autopilot
Standard サイズの上限はありませんが、ノードのブートディスク サイズとストレージ ハードウェアのタイプを慎重に計画する必要があります。 GKE がノード ブートディスク内のエフェメラル ストレージの予約を計算する方法の詳細については、ローカル エフェメラル ストレージの予約をご覧ください。 |
ローカル SSD ディスク |
手順については、ローカル SSD を使用したエフェメラル ストレージのプロビジョニングをご覧ください。 |
ローカル SSD ディスクは、Standard モードの GKE クラスタと A100(80 GB)GPU を実行する Autopilot ノードでサポートされる固定の増分値(375 GB)を使用します。 高スループットのエフェメラル ストレージが必要な場合に使用します。 詳細については、GKE のローカル SSD についてをご覧ください。 |
専用の永続ディスク |
このドキュメントでは、このエフェメラル ストレージ タイプをリクエストする手順を説明します。 |
Google Cloud は、リクエストされた外部ハードウェアを動的にプロビジョニングしてノードに接続し、リクエストされたボリュームを Pod にマウントします。 Pod にエフェメラル ストレージ リクエストが多い場合や、基盤となる永続ディスクタイプを制御する場合に使用します。これらのボリュームには次のプロパティがあります。
このエフェメラル ボリューム タイプの詳細については、汎用エフェメラル ボリュームをご覧ください。 |
料金
このガイドで説明するように、汎用のエフェメラル ボリュームを使用してプロビジョニングするストレージは、Compute Engine のディスク料金に基づいて課金されます。
始める前に
始める前に、次の作業が完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
- バージョン 1.23 以降を実行する GKE Autopilot または Standard クラスタがあることを確認します。
- Google Cloud プロジェクトに、ストレージ ハードウェア用の十分な割り当てがあることを確認します。割り当てを管理するには、プロジェクトの割り当てを表示するをご覧ください。
StorageClass を作成する
Kubernetes カスタム StorageClass を作成することで、価格とパフォーマンスの要件に基づいてプロビジョニングするストレージのタイプを指定できます。この手順は省略可能ですが、行うことをおすすめします。GKE のデフォルト StorageClass(pd-balanced
永続ディスクタイプ)を使用する場合は、この手順をスキップします。
次のマニフェストを
ephemeral-pd-class.yaml
として保存します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ephemeral-ssd provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: STORAGE_TYPE
STORAGE_TYPE
は、必要な永続ディスクタイプの名前(pd-ssd
など)で置き換えます。サポートされているタイプの一覧については、Compute Engine ドキュメントの永続ディスクタイプをご覧ください。StorageClass を作成します。
kubectl create -f ephemeral-pd-class.yaml
Pod のエフェメラル ストレージ容量をリクエストする
外部ハードウェアをエフェメラル ストレージとしてプロビジョニングしてアタッチし、使用するには、対応するボリュームを Pod マニフェストに追加し、ボリューム マウントをコンテナ仕様に追加します。
次のマニフェストを
ephemeral-ssd-deployment.yaml
として保存します。apiVersion: apps/v1 kind: Deployment metadata: name: ephemeral-deployment spec: replicas: 1 selector: matchLabels: storage: ephemeral template: metadata: labels: storage: ephemeral spec: containers: - name: ephemeral-container image: nginx resources: requests: cpu: 500m memory: 2Gi ephemeral-storage: 2Gi volumeMounts: - mountPath: "/short-term" name: ephemeral-volume volumes: - name: ephemeral-volume ephemeral: volumeClaimTemplate: metadata: labels: type: ephemeral spec: accessModes: ["ReadWriteOnce"] storageClassName: "ephemeral-ssd" resources: requests: storage: 1Ti
このマニフェストは、次のプロパティを使用して、
ephemeral-volume
という名前の新しい PersistentVolume をリクエストする新しい Kubernetes PersistentVolumeClaim を作成します。spec.volumes.ephemeral
:ephemeral
ボリューム タイプ。.spec.accessModes
: ボリューム アクセス モード。Pod からの読み取り / 書き込みアクセス権と、ノード間のボリューム共有を決定します。この例では、ReadWriteOnce
を使用して、PersistentVolume を単一ノードにマウントし、ノード上の 1 つ以上の Pod がアクセスできるようにします。詳細については、アクセスモードをご覧ください。.spec.storageClassName
: 作成した StorageClass の名前(省略可)。このフィールドを省略すると、GKE はデフォルトの StorageClass を使用し、pd-balanced
永続ディスクをプロビジョニングします。.spec.resources.requests.storage
: 必要なストレージ容量。
Deployment を作成します。
kubectl create -f ephemeral-ssd-deployment.yaml
GKE は、PersistentVolumeClaim の要件を満たす Compute Engine ディスクをプロビジョニングし、ディスクをノードにアタッチします。GKE は Volume を Pod にマウントし、リクエストされた容量をコンテナに提供します。
GKE がエフェメラル ボリュームをマウントしたことを確認する
Pod でシェル セッションを作成します。
kubectl exec -it deploy/ephemeral-deployment -- bash
マウントされたボリュームを確認します。
df -h
出力は次のようになります。
Filesystem Size Used Available Use% Mounted on ... /dev/sdb 1006.9G 28.0K 1006.8G 0% /short-term /dev/sda1 94.3G 3.6G 90.6G 4% /etc/hosts /dev/sda1 94.3G 3.6G 90.6G 4% /dev/termination-log /dev/sda1 94.3G 3.6G 90.6G 4% /etc/hostname /dev/sda1 94.3G 3.6G 90.6G 4% /etc/resolv.conf ...
シェル セッションを終了します。
exit