GKE 用に Cloud Storage FUSE CSI ドライバを設定する


このページでは、GKE 用に Cloud Storage FUSE CSI ドライバを設定して使用するための準備を行う方法について説明します。

Cloud Storage FUSE CSI ドライバを使用する手順は次のとおりです。

Cloud Storage バケットを作成する

まだ作成していない場合は、Cloud Storage バケットを作成します。これらのバケットは、GKE クラスタにボリュームとしてマウントします。パフォーマンスを改善するには、[ロケーション タイプ] を [リージョン] に設定し、GKE クラスタに一致するリージョンを選択します。

Cloud Storage FUSE の CSI ドライバを有効にする

GKE Autopilot クラスタまたは Standard クラスタを使用しているかどうかに応じて、次の手順を行います。フルマネージドの Kubernetes エクスペリエンスを実現するには、Autopilot クラスタを使用することをおすすめします。ワークロードに最適なモードを選択するには、GKE の運用モードを選択するをご覧ください。

Autopilot

Cloud Storage FUSE の CSI ドライバは、Autopilot クラスタでデフォルトで有効になっています。Cloud Storage バケットへのアクセスを構成するに進むことができます。

スタンダード

Standard クラスタで Cloud Storage FUSE CSI ドライバが有効になっている場合は、Cloud Storage バケットへのアクセスを構成するに進みます。

Cloud Storage FUSE の CSI ドライバが有効な Standard クラスタを作成するには、gcloud container clusters create コマンドを使用します。

gcloud container clusters create CLUSTER_NAME \
    --addons GcsFuseCsiDriver \
    --cluster-version=VERSION \
    --location=LOCATION \
    --workload-pool=PROJECT_ID.svc.id.goog

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

既存の Standard クラスタでドライバを有効にするには、[gcloud container clusters update](/sdk/gcloud/reference/container/clusters/update)` コマンドを使用します。

gcloud container clusters update CLUSTER_NAME \
    --update-addons GcsFuseCsiDriver=ENABLED \
    --location=LOCATION

クラスタで Cloud Storage FUSE CSI ドライバが有効になっていることを確認するには、次のコマンドを実行します。

gcloud container clusters describe CLUSTER_NAME \
    --location=LOCATION \
    --project=PROJECT_ID \
    --format="value(addonsConfig.gcsFuseCsiDriverConfig.enabled)"

Cloud Storage バケットへのアクセスを構成する

Cloud Storage FUSE CSI ドライバは Workload Identity Federation for GKE を使用するため、GKE Pod が Cloud Storage に保存されているデータにアクセスする方法についてきめ細かい権限を設定できます。

GKE クラスタから Cloud Storage バケットにアクセスできるようにするには、Pod 仕様でマウントする Cloud Storage バケットに対して Workload Identity Federation for GKE を使用して認証します。

  1. Workload Identity Federation for GKE が有効になっていない場合は、こちらの手順に沿って有効にします。
  2. クラスタの認証情報を取得します。

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=LOCATION
    

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

  3. Kubernetes ServiceAccount に使用する Namespace を作成します。default Namespace を使用することも、既存の Namespace を使用することもできます。

    kubectl create namespace NAMESPACE
    

    NAMESPACE は、Kubernetes ServiceAccount の Kubernetes Namespace の名前に置き換えます。

  4. アプリケーションで使用する Kubernetes ServiceAccount を作成します。また、default Kubernetes ServiceAccount を含む任意の Namespace で既存の Kubernetes ServiceAccount を使用することもできます。

    kubectl create serviceaccount KSA_NAME \
        --namespace NAMESPACE
    

    KSA_NAME は、Kubernetes ServiceAccount の名前に置き換えます。

  5. Cloud Storage の IAM ロールのいずれかを Kubernetes ServiceAccount に付与します。Kubernetes ServiceAccount に特定の Cloud Storage バケットへのアクセスのみを許可する場合と、プロジェクト内のすべてのバケットへのグローバル アクセスを許可する場合に応じて、次の手順を行います。

    特定のバケットへのアクセス

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \
        --role "ROLE_NAME"
    

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

    • BUCKET_NAME: Cloud Storage バケット名。
    • PROJECT_NUMBER: GKE クラスタの数値のプロジェクト番号。プロジェクト番号を確認するには、プロジェクトの識別をご覧ください。
    • PROJECT_ID: GKE クラスタのプロジェクト ID。
    • NAMESPACE: Kubernetes ServiceAccount の Kubernetes Namespace の名前。
    • KSA_NAME: 新しい Kubernetes ServiceAccount の名前。
    • ROLE_NAME: Kubernetes ServiceAccount に割り当てる IAM ロール。
      • 読み取り専用ワークロードの場合は、ストレージ オブジェクト閲覧者ロール(roles/storage.objectViewer)を使用します。
      • 読み取り / 書き込みワークロードの場合は、Storage Object ユーザーロールを使用します(roles/storage.objectUser)。

    グローバル バケット アクセス

    gcloud projects add-iam-policy-binding GCS_PROJECT \
        --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \
        --role "ROLE_NAME"
    

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

    • GCS_PROJECT: Cloud Storage バケットのプロジェクト ID。
    • PROJECT_NUMBER: GKE クラスタの数値のプロジェクト番号。プロジェクト番号を確認するには、プロジェクトの識別をご覧ください。
    • PROJECT_ID: GKE クラスタのプロジェクト ID。
    • NAMESPACE: Kubernetes ServiceAccount の Kubernetes Namespace の名前。
    • KSA_NAME: 新しい Kubernetes ServiceAccount の名前。
    • ROLE_NAME: Kubernetes ServiceAccount に割り当てる IAM ロール。
      • 読み取り専用ワークロードの場合は、ストレージ オブジェクト閲覧者ロール(roles/storage.objectViewer)を使用します。
      • 読み取り / 書き込みワークロードの場合は、Storage Object ユーザーロールを使用します(roles/storage.objectUser)。

次のステップ