更新时间:2024-09-02 GMT+08:00

设置文件存储挂载参数

本章节主要介绍如何设置文件存储的挂载参数。您可以在PV中设置挂载参数,然后通过PVC绑定PV,也可以在StorageClass中设置挂载参数,然后使用StorageClass创建PVC,动态创建出的PV会默认带有StorageClass中设置的挂载参数。

前提条件

CCE容器存储(Everest)版本要求1.2.8及以上版本。插件主要负责将挂载参数识别并传递给底层存储,指定参数是否有效依赖于底层存储是否支持。

约束与限制

  • 挂载参数暂不支持安全容器。
  • 由于NFS协议限制,默认情况下,对于某个节点多次挂载同一文件存储的场景,涉及链路的挂载参数(如timeo)仅在第一次挂载时生效。例如,节点上运行的多个Pod同时挂载同一文件存储,后设置的挂载参数不会覆盖已有参数值。针对上述场景希望设置不同的挂载参数,可以同时设置nosharecache挂载参数。

文件存储挂载参数

CCE的存储插件everest在挂载文件存储时默认设置了如表1所示的参数。

表1 文件存储挂载参数

参数

参数值

描述

keep-original-ownership

无需填写

表示是否保留文件挂载点的ownership,使用该参数时,要求everest插件版本为1.2.63或2.1.2以上。

  • 默认为不添加该参数,此时挂载文件存储时将会默认把挂载点的ownership修改为root:root。
  • 如添加该参数,挂载文件存储时将保持文件系统原有的ownership。

vers

3

文件系统版本,目前只支持NFSv3。取值:3

nolock

无需填写

选择是否使用NLM协议在服务器上锁文件。当选择nolock选项时,锁对于同一主机的应用有效,对不同主机不受锁的影响。

timeo

600

NFS客户端重传请求前的等待时间(单位为0.1秒)。建议值:600。

hard/soft

无需填写

挂载方式类型。

  • 取值为hard,即使用硬连接方式,若NFS请求超时,则客户端一直重新请求直至成功。
  • 取值为soft,即软挂载方式挂载系统,若NFS请求超时,则客户端向调用程序返回错误。

默认为hard。

sharecache/nosharecache

无需填写

设置客户端并发挂载同一文件系统时数据缓存和属性缓存的共享方式。设置为sharecache时,多个挂载共享同一缓存。设为nosharecache时,每个挂载各有一个缓存。默认为sharecache。

说明:

设置nosharecache禁用共享缓存会对性能产生一定影响。每次挂载都会重新获取挂载信息,会增加与NFS服务器的通信开销和NFS客户端的内存消耗,同时同客户端设置nosharecache存在cache不一致的风险。因此,应该根据具体情况进行权衡,以确定是否需要使用nosharecache选项。

除了以上参数外,您还可以设置其他的文件存储挂载参数,具体请参见挂载NFS文件系统到云服务器(Linux)

在PV中设置挂载参数

在PV中设置挂载参数可以通过mountOptions字段实现,如下所示,mountOptions支持挂载的字段请参见文件存储挂载参数

  1. 使用kubectl连接集群,详情请参见通过kubectl连接集群
  2. 在PV中设置挂载参数,示例如下:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: everest-csi-provisioner
        everest.io/reclaim-policy: retain-volume-only      # 可选字段,删除PV,保留底层存储卷
      name: pv-sfs
    spec:
      accessModes:
      - ReadWriteMany      # 访问模式,文件存储必须为ReadWriteMany
      capacity:
        storage: 1Gi       # 文件存储容量大小
      csi:
        driver: nas.csi.everest.io    # 挂载依赖的存储驱动
        fsType: nfs
        volumeHandle: <your_volume_id>   # SFS容量型文件存储的ID
        volumeAttributes:
          everest.io/share-export-location: <your_location>  # 文件存储的共享路径
          storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner
      persistentVolumeReclaimPolicy: Retain    # 回收策略
      storageClassName: csi-nas                # 存储类名称
      mountOptions:                            # 挂载参数
      - vers=3
      - nolock
      - timeo=600
      - hard

  3. PV创建后,可以创建PVC关联PV,然后在工作负载的容器中挂载,具体操作步骤请参见通过静态存储卷使用已有文件存储
  4. 验证挂载参数是否生效。

    本例中将PVC挂载至使用nginx:latest镜像的工作负载,并通过mount -l命令查看挂载参数是否生效。
    1. 查看已挂载文件存储的Pod,本文中的示例工作负载名称为web-sfs。
      kubectl get pod | grep web-sfs

      回显如下:

      web-sfs-***   1/1     Running   0             23m
    2. 执行以下命令查看挂载参数,其中web-sfs-***为示例Pod。
      kubectl exec -it web-sfs-*** -- mount -l | grep nfs

      若回显中的挂载信息与设置的挂载参数一致,说明挂载参数设置成功。

      <您的共享路径> on /data type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=**.**.**.**,mountvers=3,mountport=2050,mountproto=tcp,local_lock=all,addr=**.**.**.**)

在StorageClass中设置挂载参数

在StorageClass中设置挂载参数同样可以通过mountOptions字段实现,如下所示,mountOptions支持挂载的字段请参见文件存储挂载参数

  1. 使用kubectl连接集群,详情请参见通过kubectl连接集群
  2. 创建自定义的StorageClass,示例如下:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-sfs-mount-option
    provisioner: everest-csi-provisioner
    parameters:
      csi.storage.k8s.io/csi-driver-name: nas.csi.everest.io
      csi.storage.k8s.io/fstype: nfs
      everest.io/share-access-to: <your_vpc_id>   # 集群所在VPC的ID
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    mountOptions:                            # 挂载参数
    - vers=3
    - nolock
    - timeo=600
    - hard

  3. StorageClass设置好后,就可以使用这个StorageClass创建PVC,动态创建出的PV会默认带有StorageClass中设置的挂载参数,具体操作步骤请参见通过动态存储卷使用文件存储
  4. 验证挂载参数是否生效。

    本例中将PVC挂载至使用nginx:latest镜像的工作负载,并通过mount -l命令查看挂载参数是否生效。
    1. 查看已挂载文件存储的Pod,本文中的示例工作负载名称为web-sfs。
      kubectl get pod | grep web-sfs

      回显如下:

      web-sfs-***   1/1     Running   0             23m
    2. 执行以下命令查看挂载参数,其中web-sfs-***为示例Pod。
      kubectl exec -it web-sfs-*** -- mount -l | grep nfs

      若回显中的挂载信息与设置的挂载参数一致,说明挂载参数设置成功。

      <您的共享路径> on /data type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=**.**.**.**,mountvers=3,mountport=2050,mountproto=tcp,local_lock=all,addr=**.**.**.**)