本页面介绍了如何在 Cloud Run 中将 NFS 文件共享作为卷装载。您可以使用任何 NFS 服务器,包括在本地或 Compute Engine 虚拟机上托管的您自己的 NFS 服务器。如果您还没有 NFS 服务器,我们建议您使用 Filestore,这是 Google Cloud 提供的全托管式 NFS 产品。
如果要使用 NDB、9P、CIFS/Samba 和 Ceph 网络文件系统,请参阅使用 NDB、9P、CIFS/Samba 和 Ceph 网络文件系统。
限制
如需将数据写入 NFS 卷,容器必须以根用户身份运行。如果容器仅从文件系统中读取数据,则可以以任何用户身份运行。
Cloud Run 不支持 NFS 锁定。NFS 卷会自动以无锁定模式装载。
准备工作
如需在 Cloud Run 中将 NFS 服务器作为卷装载,请确保您满足以下条件:
- 运行 NFS 服务器或 Filestore 实例的 VPC 网络。
- 在 VPC 网络中运行的 NFS 服务器,以及与该 VPC 网络连接的 Cloud Run 服务。如果您还没有 NFS 服务器,请通过创建 Filestore 实例来创建一个。
- Cloud Run 服务已连接到运行 NFS 服务器的 VPC 网络。为获得最佳性能,请使用直接 VPC,而不是 VPC 连接器。
- 如果您使用的是现有项目,请确保 VPC 防火墙配置允许 Cloud Run 访问 NFS 服务器。(如果您从新项目开始,则默认为如此。)如果您使用 Filestore 作为 NFS 服务器,请按照 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 服务器,请确保它以根用户身份运行。