このガイドでは、動的プロビジョニングを使用して、GKE で Parallelstore CSI ドライバを基盤とする新しい Kubernetes Volume を作成する方法について説明します。これにより、フルマネージド Parallelstore インスタンスを基盤とするストレージをオンデマンドで作成し、ステートフル ワークロードのボリュームとしてアクセスできます。
始める前に
作業を始める前に、次のことを確認してください。
- Parallelstore API と Google Kubernetes Engine API を有効にします。 API を有効にする
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
- 制限事項と要件については、CSI ドライバの概要をご覧ください。
- VPC ネットワークを構成します。
- GKE Standard クラスタを使用する場合は、CSI ドライバを有効にする必要があります。
Parallelstore CSI ドライバを使用して新しい Volume を作成する
次のセクションでは、GKE で Parallelstore CSI ドライバを基盤とする Kubernetes Volume を作成する際の一般的なプロセスについて説明します。
- (省略可)StorageClass を作成します。
- PersistentVolumeClaim を使用して Volume にアクセスします。
- (省略可)サイドカー コンテナのリソースを構成します。
- ボリュームを消費する Pod を作成します。
(省略可)ストレージ クラスを作成する
Parallelstore CSI ドライバが有効になっている場合、GKE は Parallelstore インスタンスのプロビジョニング用に parallelstore-rwx
という名前の StorageClass を自動的に作成します。この StorageClass は、GKE クラスタと同じリージョンに Parallelstore インスタンスをプロビジョニングするように CSI ドライバに指示し、最適な I/O パフォーマンスを確保します。
必要に応じて、特定のトポロジを持つカスタム StorageClass を作成できます。方法は次のとおりです。
次の StorageClass マニフェストを
parallelstore-class.yaml
という名前のファイルに保存します。Pod マウント
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: parallelstore-class provisioner: parallelstore.csi.storage.gke.io volumeBindingMode: Immediate reclaimPolicy: Delete allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: LOCATION
次のように置き換えます。
- LOCATION: クラスタを含む Compute Engine ゾーン。Parallelstore CSI ドライバにサポートされているゾーンを指定する必要があります。
StorageClass でサポートされているフィールドの一覧については、Parallelstore CSI リファレンス ドキュメントをご覧ください。
ノード マウント
Parallelstore CSI ドライバを使用すると、ボリュームをノードに直接マウントできます。ノード マウントは、GKE クラスタ バージョン 1.32.1 以降でサポートされています。
ノードレベルのマウントを使用すると、ノード上のすべての Pod が同じマウントポイントを共有できます。同じマウントポイントを共有すると、マウントの数は Pod 数ではなくノード数に応じて増加するため、スケーラビリティが向上します(サイドカー モードの場合)。
その結果、同じ Parallelstore インスタンスを共有しながら、より多くの Pod を実行できます。
注: この機能は、mountLocality: node パラメータを指定することで有効にします。Pod マウントのロカリティのデフォルト値は mountLocality: pod です。dfuse の CPU、メモリ リクエスト、上限フラグは、mountLocality: node 設定でのみ機能します。
リクエストの値または上限のいずれかが設定され、もう一方が設定されていない場合、両方とも同じ指定値に設定されます。
値として「0」を使用すると、リソース上限の設定を解除できます。たとえば、dfuseMemoryLimit: '0' は、dfuse プロセスのメモリ上限を削除します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: parallelstore-class provisioner: parallelstore.csi.storage.gke.io volumeBindingMode: Immediate reclaimPolicy: Delete allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: LOCATION parameters: mountLocality: node dfuseCPURequest: DFUSE_CPU_REQUEST dfuseMemoryRequest: DFUSE_MEMORY_REQUEST dfuseCPULimit: DFUSE_CPU_LIMIT dfuseMemoryLimit: DFUSE_MEMORY_LIMIT
次のように置き換えます。
- LOCATION: クラスタを含む Compute Engine ゾーン。Parallelstore CSI ドライバにサポートされているゾーンを指定する必要があります。
- DFUSE_CPU_REQUEST: dfuse プロセスの CPU リクエスト。デフォルトは
250m
です。 - DFUSE_MEMORY_REQUEST: dfuse プロセスのメモリ リクエスト。デフォルトは
512Mi
です。 - DFUSE_CPU_LIMIT: dfuse プロセスの CPU の上限。デフォルトは未設定です。
- DFUSE_MEMORY_LIMIT: dfuse プロセスのメモリ上限。デフォルトは
10Gi
です。
StorageClass でサポートされているフィールドの一覧については、Parallelstore CSI リファレンス ドキュメントをご覧ください。
次のコマンドを実行して StorageClass を作成します。
kubectl create -f parallelstore-class.yaml
PersistentVolumeClaim を使用して Volume にアクセスする
Parallelstore CSI ドライバの StorageClass を参照するように PersistentVolumeClaim リソースを作成できます。
次のマニフェスト ファイルは、前に作成した StorageClass を参照する ReadWriteMany
アクセスモードで PersistentVolumeClaim を作成する方法の例を示しています。
次のマニフェストを
parallelstore-pvc.yaml
という名前のファイルに保存します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: parallelstore-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: STORAGE_SIZE storageClassName: parallelstore-class
STORAGE_SIZE をストレージ サイズに置き換えます(例:
12000Gi
)。値は 12,000 GiB~100,000 GiB の範囲で指定します(4,000 GiB の倍数)。次のコマンドを実行して PersistentVolumeClaim を作成します。
kubectl create -f parallelstore-pvc.yaml
(省略可)サイドカー コンテナのリソースを構成する
Parallelstore を利用するボリュームのワークロード Pod を作成すると、CSI ドライバはボリュームが Parallelstore インスタンスに基づいているかどうかを判断します。
ボリュームが Parallelstore ベースであることが検出された場合、またはアノテーション gke-parallelstore/volumes: "true"
を指定した場合、CSI ドライバは gke-parallelstore-sidecar
という名前のサイドカー コンテナを Pod に自動的に挿入します。このサイドカー コンテナが、Parallelstore インスタンスをワークロードにマウントします。
デフォルトでは、GKE は次のリソース リクエストで、リソースの上限を設定しないままサイドカー コンテナを構成します。
- 250m CPU
- 512 MiB のメモリ
- 10 MiB のエフェメラル ストレージ
これらの値を上書きするには、必要に応じて次の例に示すようにアノテーション gke-parallelstore/[cpu-request|memory-request|cpu-limit|memory-limit|ephemeral-storage-request]
を指定します。
apiVersion: v1
kind: Pod
metadata:
annotations:
gke-parallelstore/volumes: "true"
gke-parallelstore/cpu-request: 500m
gke-parallelstore/memory-request: 1Gi
gke-parallelstore/ephemeral-storage-request: 500Mi
gke-parallelstore/cpu-limit: 1000m
gke-parallelstore/memory-limit: 2Gi
gke-parallelstore/ephemeral-storage-limit: 1Gi
割り当てるリソースの量を決定する際は、次の点を考慮してください。
- リクエスト値または上限値のいずれかが設定され、もう一方が設定されていない場合、両方とも同じ指定値に設定されます。
- ワークロードでより高いスループットが必要な場合は、サイドカー コンテナにより多くの CPU を割り当てます。CPU が不足すると、I/O スロットリングが発生します。
- 値として
"0"
を使用すると、Standard クラスタのリソース上限の設定を解除できます。たとえば、gke-parallelstore/memory-limit: "0"
はサイドカー コンテナのメモリ上限を削除します。これは、ワークロードに対してgke-parallelstore-sidecar
で必要になるリソースの量を特定できない場合に、ノード上の使用可能なすべてのリソースをサイドカーで消費できるようにするために便利です。
ボリュームを消費するワークロードを作成する
このセクションでは、前のセクションで作成した PersistentVolumeClaim リソースを使用する Pod を作成する方法の例を示します。
複数の Pod が同じ PersistentVolumeClaim リソースを共有できます。
次のマニフェストを
my-pod.yaml
という名前のファイルに保存します。apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: nginx image: nginx volumeMounts: - name: parallelstore-volume mountPath: /data volumes: - name: parallelstore-volume persistentVolumeClaim: claimName: parallelstore-pvc
次のコマンドを実行して、マニフェストをクラスタに適用します。
kubectl apply -f my-pod.yaml
Pod は、PersistentVolumeClaim がプロビジョニングされるまで待機してから実行を開始します。このオペレーションは完了するまでに数分かかることがあります。
Parallelstore CSI ドライバを管理する
このセクションでは、必要に応じて Parallelstore CSI ドライバを有効または無効にする方法について説明します。
新しいクラスタで Parallelstore CSI ドライバを有効にする
新しい Standard クラスタを作成するときに Parallelstore CSI ドライバを有効にするには、Google Cloud CLI で次のコマンドを実行します。
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--network=NETWORK_NAME \
--addons=ParallelstoreCsiDriver \
--cluster-version=VERSION
次のように置き換えます。
- CLUSTER_NAME: クラスタの名前。
- LOCATION: クラスタを含む Compute Engine ゾーン。Parallelstore CSI ドライバにサポートされているゾーンを指定する必要があります。
- NETWORK_NAME: VPC ネットワークを構成するで作成した VPC ネットワークの名前。
- VERSION: GKE のバージョン番号。この機能を使用するには、サポートされているバージョン番号(GKE バージョン 1.29 以降など)を指定する必要があります。または、
--release-channel
フラグを使用してリリース チャンネルを指定することもできます。
既存のクラスタで Parallelstore CSI ドライバを有効にする
既存の GKE Standard クラスタでドライバを有効にするには、Google Cloud CLI で次のコマンドを実行します。
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--update-addons=ParallelstoreCsiDriver=ENABLED
次のように置き換えます。
- CLUSTER_NAME: クラスタの名前。
- LOCATION: クラスタを含む Compute Engine ゾーン。Parallelstore CSI ドライバにサポートされているゾーンを指定する必要があります。
GKE クラスタが、VPC ネットワークを構成するで設定した VPC ネットワークで実行されていることを確認します。GKE クラスタの VPC ネットワークを確認するには、Google Cloud コンソールまたは gcloud container clusters describe $(CLUSTER) --format="value(networkConfig.network)" --location=$(LOCATION)
コマンドを使用します。
Parallelstore CSI ドライバを無効にする
既存の Autopilot クラスタまたは Standard クラスタで Parallelstore CSI ドライバを無効にするには、Google Cloud CLI を使用します。
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--update-addons=ParallelstoreCsiDriver=DISABLED
次のように置き換えます。
- CLUSTER_NAME: クラスタの名前。
- LOCATION: クラスタを含む Compute Engine ゾーン。Parallelstore CSI ドライバにサポートされているゾーンを指定する必要があります。
Parallelstore ボリュームで fsGroup を使用する
Parallelstore CSI ドライバは、マウントされたファイル システムのルートレベル ディレクトリのグループ所有権を変更し、Pod の SecurityContext で指定されたユーザーがリクエストした fsGroup との照合をサポートしています。この機能は、GKE クラスタ バージョン 1.29.5 以降、またはバージョン 1.30.1 以降でのみサポートされます。
トラブルシューティング
トラブルシューティングのガイダンスについては、Parallelstore ドキュメントでトラブルシューティングのページをご覧ください。
次のステップ
- Parallelstore CSI リファレンス ドキュメントを確認する。
- Parallelstore インターセプト ライブラリを使用してワークロードのパフォーマンスを向上させる方法を学習する。
- Cloud Storage から Parallelstore にデータを転送する方法を確認する。
- GKE Volume Populator を使用して、Cloud Storage バケットのソース ストレージから Parallelstore インスタンスがバッキングする宛先 PersistentVolumeClaim へのデータ転送を自動化する方法について学習します。
- チュートリアルで、GKE で Keras を使用して TensorFlow モデルをトレーニングする。