Google Kubernetes Engine で Parallelstore インスタンスを基盤とするボリュームを作成して使用する


Parallelstore は招待制です。Google Cloud プロジェクトで Parallelstore へのアクセス権をリクエストする場合は、営業担当者にお問い合わせください。

このガイドでは、動的プロビジョニングを使用して、GKE で Parallelstore CSI ドライバを基盤とする新しい Kubernetes ボリュームを作成する方法について説明します。これにより、フルマネージド Parallelstore インスタンスを基盤とするストレージをオンデマンドで作成し、ステートフル ワークロードのボリュームとしてアクセスできます。

始める前に

始める前に、次の作業が完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得する。

Parallelstore CSI ドライバを使用して新しいボリュームを作成する

次のセクションでは、GKE で Parallelstore CSI ドライバを基盤とする Kubernetes Volume を作成する際の一般的なプロセスについて説明します。

  1. (省略可)StorageClass を作成します
  2. PersistentVolumeClaim を使用して Volume にアクセスします
  3. (省略可)サイドカー コンテナのリソースを構成します
  4. ボリュームを消費する Pod を作成します

(省略可)ストレージ クラスを作成する

Parallelstore CSI ドライバが有効になっている場合、GKE は Parallelstore インスタンスのプロビジョニング用に parallelstore-rwx という名前の StorageClass を自動的に作成します。この StorageClass は、GKE クラスタと同じリージョンに Parallelstore インスタンスをプロビジョニングするように CSI ドライバに指示し、最適な I/O パフォーマンスを確保します。

必要に応じて、特定のトポロジを持つカスタム StorageClass を作成できます。方法は次のとおりです。

  1. 次の StorageClass マニフェストを parallelstore-class.yaml という名前のファイルに保存します。

      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
    

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

    StorageClass でサポートされているフィールドの一覧については、Parallelstore CSI リファレンス ドキュメントをご覧ください。

  2. 次のコマンドを実行して StorageClass を作成します。

    kubectl create -f parallelstore-class.yaml
    

PersistentVolumeClaim を使用して Volume にアクセスする

Parallelstore CSI ドライバの StorageClass を参照するように PersistentVolumeClaim リソースを作成できます。

次のマニフェスト ファイルは、前に作成した StorageClass を参照する ReadWriteMany アクセスモードで PersistentVolumeClaim を作成する方法の例を示しています。

  1. 次のマニフェストを 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 の倍数)。

  2. 次のコマンドを実行して 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 リソースを共有できます。

  1. 次のマニフェストを 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
    
  2. 次のコマンドを実行して、マニフェストをクラスタに適用します。

      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 ドキュメントでトラブルシューティングのページをご覧ください。

次のステップ