本页面介绍了如何在 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 jobs update JOB \ --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \ --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH
您需要在其中:
- 将 JOB 替换为作业的名称。
- 将 VOLUME_NAME 替换为您要为卷指定的名称。
- 将 IP_ADDRESS 替换为 NFS 文件共享的位置。
- 将 NFS_PATH 替换为 NFS 文件共享的路径。
- 将 MOUNT_PATH 替换为要装载此卷的容器文件系统中的路径。
如需将卷装载为只读卷,请运行以下命令:
--add-volume name VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=true
如果您使用多个容器,请先指定卷,然后为每个容器指定卷装载:
gcloud beta run jobs update JOB \ --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 jobs describe JOB_NAME --format export > job.yaml
根据需要更新 MOUNT_PATH、VOLUME_NAME、IP_ADDRESS 和 NFS_PATH。如果您有多个卷装载,则会拥有多个此类属性。
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: metadata: annotations: run.googleapis.com/launch-stage: BETA template: metadata: annotations: run.googleapis.com/execution-environment: gen2 spec: template: 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
替换
- 将 JOB 替换为 Cloud Run 作业的名称
- 将 MOUNT_PATH 替换为您用于装载卷的相对路径,例如
/cache
。 - 将 VOLUME_NAME 替换为您要用于卷的任何名称。VOLUME_NAME 值用于将卷映射到卷装载。
- 将 IP_ADDRESS 替换为 NFS 文件共享的地址。
- 将 NFS_PATH 替换为 NFS 文件共享的路径。
- 将 IS_READ_ONLY 替换为
True
以将卷设为只读,或替换为False
以允许写入。
使用以下命令将服务替换为其新配置:
gcloud beta run jobs replace job.yaml
排查 NFS 问题
如果您遇到问题,请检查以下各项:
- 您的 Cloud Run 服务已连接到 NFS 服务器所在的 VPC 网络。
- 没有防火墙规则阻止 Cloud Run 访问 NFS 服务器。
- 如果您的容器将数据写入 NFS 服务器,请确保它以根用户身份运行。