サービスの NFS ボリュームのマウント

このページでは、Cloud Run で NFS ファイル共有をボリュームとしてマウントする方法について説明します。オンプレミスまたは Compute Engine VM でホストされている独自の NFS サーバーなど、任意の NFS サーバーを使用できます。NFS サーバーをまだ使用していない場合は、Google Cloud のフルマネージド NFS サービスである Filestore をおすすめします。

NBD、9P、CIFS / Samba、Ceph のネットワーク ファイル システムを使用する場合は、NBD、9P、CIFS / Samba、Ceph のネットワーク ファイル システムを使用するをご覧ください。

制限事項

  • NFS ボリュームに書き込むには、コンテナを root として実行する必要があります。コンテナでファイル システムからの読み取りを行うだけの場合は、任意のユーザーとして実行できます。

  • Cloud Run は NFS ロックをサポートしていません。NFS ボリュームは、ロックなしモードで自動的にマウントされます。

始める前に

Cloud Run で NFS サーバーをボリュームとしてマウントするには、次のものが必要です。

  • VPC ネットワーク。このネットワークで NFS サーバーまたは Filestore インスタンスが実行されます。
  • VPC ネットワークで実行される NFS サーバー。ここで、Cloud Run サービスが VPC ネットワークに接続されます。NFS サーバーがまだない場合は、Filestore インスタンスを作成してサーバーを作成します。
  • Cloud Run サービスは、NFS サーバーが実行されている VPC ネットワークに接続されます。最高のパフォーマンスを得るには、VPC コネクタではなくダイレクト VPC を使用します。
  • 既存のプロジェクトを使用している場合は、VPC ファイアウォール構成で Cloud Run が NFS サーバーにアクセスできることを確認してください(新しいプロジェクトから開始する場合は、デフォルトで true になります)。NFS サーバーとして Filestore を使用している場合は、Filestore のドキュメントに従って下り(外向き)ファイアウォール ルールを作成し、Cloud Run が Filestore にアクセスできるようにします。

NFS ボリュームをマウントする

複数の NFS サーバー、Filestore インスタンス、または他のボリューム タイプを異なるマウントパスにマウントできます。

複数のコンテナを使用している場合は、まずボリュームを指定してから、各コンテナのボリューム マウントを指定します。

コマンドライン

注: ここでは gcloud beta run services update コマンドを使用していますが、ここに示されているパラメータを指定して gcloud beta run services deploy コマンドを使用することもできます。

  • ボリュームを追加してマウントするには:
gcloud beta run services update SERVICE \
--add-volume=name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \
--add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH

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

  • SERVICE: 実際のサービスの名前。
  • VOLUME_NAME は、ボリュームに付ける名前に置き換えます。
  • IP_ADDRESS は、NFS ファイル共有の場所に置き換えます。
  • NFS_PATH は、NFS ファイル共有のパスに置き換えます。
  • MOUNT_PATH は、ボリュームをマウントする相対パス(/cache など)に置き換えます。
  • VOLUME_NAME は、ボリュームに付ける名前に置き換えます。VOLUME_NAME 値は、ボリュームをボリューム マウントにマッピングするために使用されます。

  • ボリュームを読み取り専用ボリュームとしてマウントするには:

    --add-volume=name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=true
  • 複数のコンテナを使用している場合は、まずボリュームを指定してから、各コンテナのボリューム マウントを指定します。

    gcloud beta run services update SERVICE \
    --add-volume=name VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \
    --container CONTAINER_1 \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH \
    --container CONTAINER_2 \
    --add-volume-mount volume= VOLUME_NAME,mount-path=MOUNT_PATH2

YAML

既存のサービス構成をダウンロードして表示するには、gcloud run services describe --format export コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順でフィールドを変更し、gcloud run services replace コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。

  1. 次のコマンドで、構成を表示してダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. 必要に応じて、MOUNT_PATHVOLUME_NAMEIP_ADDRESSNFS_PATH を更新します。複数のボリュームをマウントしている場合は、属性はその倍数になります。

    apiVersion: run.googleapis.com/v1
    kind: Service
    metadata:
      name: SERVICE
        annotations:
          run.googleapis.com/launch-stage: BETA
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: gen2
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - name: VOLUME_NAME
              mountPath: MOUNT_PATH
          volumes:
          - name: VOLUME_NAME
            nfs:
              server: IP_ADDRESS
              path: NFS_PATH
              readonly: IS_READ_ONLY

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

    • SERVICE は、Cloud Run サービスの名前に置き換えます。
    • MOUNT_PATH は、ボリュームをマウントする相対パス(/cache など)に置き換えます。
    • VOLUME_NAME は、ボリュームに付ける名前に置き換えます。VOLUME_NAME 値は、ボリュームをボリューム マウントにマッピングするために使用されます。
    • IP_ADDRESS は、NFS ファイル共有のアドレスに置き換えます。
    • NFS_PATH は、NFS ファイル共有のパスに置き換えます。
    • ボリュームを読み取り専用にする場合は IS_READ_ONLYTrue に置き換えます。書き込み可能にするには False に置き換えます。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud beta run services replace service.yaml

NFS のトラブルシューティング

問題が発生した場合は、次の点を確認してください。

  • Cloud Run サービスが、NFS サーバーのある VPC ネットワークに接続されている。
  • Cloud Run が NFS サーバーにアクセスすることを妨げるファイアウォール ルールがない。
  • コンテナで NFS サーバーに書き込みを行う場合は、root として実行されていること。