服务的 NFS 卷装载

本页面介绍了如何在 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

  1. 如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置

    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 文件共享的路径,例如 /example-directory
    • IS_READ_ONLY 替换为 True 以将卷设为只读,或替换为 False 以允许写入。
  3. 使用以下命令将服务替换为其新配置:

    gcloud beta run services replace service.yaml

排查 NFS 问题

如果您遇到问题,请检查以下各项:

  • 您的 Cloud Run 服务已连接到 NFS 服务器所在的 VPC 网络。
  • 没有防火墙规则阻止 Cloud Run 访问 NFS 服务器。
  • 如果您的容器将数据写入 NFS 服务器,请确保它以根用户身份运行。