このページでは、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 ファイル共有のパスに置き換えます(スラッシュで始まるパス、例:
/example-directory
)。 - 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
新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。
gcloud run services describe SERVICE --format export > service.yaml
必要に応じて、MOUNT_PATH、VOLUME_NAME、IP_ADDRESS、NFS_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 ファイル共有のパスに置き換えます(スラッシュで始まるパス、例:
/example-directory
)。 - ボリュームを読み取り専用にする場合は IS_READ_ONLY を
True
に置き換えます。書き込み可能にするにはFalse
に置き換えます。
次のコマンドを使用して、サービスを新しい構成に置き換えます。
gcloud beta run services replace service.yaml
NFS のトラブルシューティング
問題が発生した場合は、次の点を確認してください。
- Cloud Run サービスが、NFS サーバーのある VPC ネットワークに接続されている。
- Cloud Run が NFS サーバーにアクセスすることを妨げるファイアウォール ルールがない。
- コンテナで NFS サーバーに書き込みを行う場合は、root として実行されていること。