更新时间:2025-07-04 GMT+08:00
分享

设置云硬盘存储挂载参数

挂载参数(mountOptions)是在文件系统挂载过程中传递给内核的选项,用于控制存储设备(如云硬盘、SFS、OBS等)的访问方式、性能优化、安全策略等。CCE支持在PV和StorageClass中设置挂载参数,具体如下:

  • 在PV中设置挂载参数:仅作用于当前PV,适用于为特定存储卷定制挂载参数的场景。
  • 在StorageClass中设置挂载参数:作用于所有通过该SC动态创建的PV,适用于为EVS统一配置挂载参数的场景。

前提条件

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

约束与限制

  • 挂载参数暂不支持安全容器。
  • 对于运行在Huawei Cloud EulerOS 1.1或CentOS 7.6节点上的工作负载,不支持配置云硬盘挂载参数。

云硬盘挂载参数

CCE支持挂载以下参数

表1 挂载参数

参数

参数值

描述

noatime/strictatime/relatime

无需填写

这三个参数表示文件访问时间(atime)的三种更新行为,选其一即可,具体如下:

  • noatime:不更新atime,具有最高性能,但完全丢失atime的信息,适用于高并发读场景(如数据库、静态文件服务)。
  • relatime(默认值):相对更新,仅在atime早于mtime或超过24小时时更新,具有较低的开销成本。
  • strictatime:严格更新,每次读取文件都更新atime。该行为最精确,但性能也最差,适用于需要严格记录访问时间的场景。

配置挂载参数

您可以通过以下两种方式进行配置:

在PV中设置挂载参数可以通过mountOptions字段实现,且仅针对当前PV有效。mountOptions支持挂载的字段请参见云硬盘挂载参数

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

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: everest-csi-provisioner
      name: pv-disk  # PV的名称
      labels:
        failure-domain.beta.kubernetes.io/region: cn-north-7
        failure-domain.beta.kubernetes.io/zone: cn-north-7c
    spec:
      accessModes:
        - ReadWriteOnce
      capacity:
        storage: 10Gi # 存储容量大小
      csi:
        driver: disk.csi.everest.io
        fsType: ext4
        volumeHandle: {your_volume_id}   # 云硬盘的ID
        volumeAttributes:
          storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner
          everest.io/disk-mode: SCSI
          everest.io/disk-volume-type: SATA
          everest.io/enterprise-project-id: '0'
      persistentVolumeReclaimPolicy: Retain
      storageClassName: csi-disk
      mountOptions: # 挂载参数
        - strictatime

  3. PV创建后,可以创建PVC关联PV,然后在工作负载的容器中挂载,具体操作步骤请参见通过静态存储卷使用已有云硬盘
  4. 验证挂载参数是否生效。本例中将PVC挂载至使用nginx:latest镜像的工作负载中,且容器中的挂载路径为/testdir,验证步骤如下:

    1. 执行以下命令,查看已挂载该PVC的Pod名称,本文中的示例工作负载名称为web-disk。
      kubectl get pod | grep web-disk

      回显结果如下:

      web-disk-xxx     1/1     Running   0             23m
    2. 执行以下命令,进入Pod内部。
      kubectl exec -it web-disk-xxx -- bash
    3. 执行以下命令,进入挂载路径并生成测试文件。
      cd /testdir
      echo 'ok' > testfile
    4. 重复执行以下命令,观察输出的Access。若Access有变化 ,则说明strictatime挂载参数已生效。
      stat testfile && cat testfile > /dev/null

在StorageClass中设置挂载参数同样可以通过mountOptions字段实现,对所有使用该StorageClass创建的PV有效。mountOptions支持挂载的字段请参见云硬盘挂载参数

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

    allowVolumeExpansion: true
    apiVersion: storage.k8s.io/v1
    kind: StorageClass 
    metadata:
      name: csi-disk # 存储类的名称
    mountOptions: # 挂载参数
    - strictatime
    parameters:
      csi.storage.k8s.io/csi-driver-name: disk.csi.everest.io
      csi.storage.k8s.io/fstype: ext4
      everest.io/disk-volume-type: SAS
      everest.io/passthrough: "true"
    provisioner: everest-csi-provisioner
    reclaimPolicy: Delete
    volumeBindingMode: Immediate

  3. StorageClass设置好后,就可以使用这个StorageClass创建PVC,动态创建出的PV会默认带有StorageClass中设置的挂载参数,具体操作步骤请参见通过动态存储卷使用云硬盘
  4. 验证挂载参数是否生效。本例中将PVC挂载至使用nginx:latest镜像的工作负载中,且容器中的挂载路径为/testdir,验证步骤如下:

    1. 执行以下命令,查看已挂载该PVC的Pod名称,本文中的示例工作负载名称为web-disk。
      kubectl get pod | grep web-disk

      回显结果如下:

      web-disk-xxx     1/1     Running   0             23m
    2. 执行以下命令,进入Pod内部。
      kubectl exec -it web-disk-xxx -- bash
    3. 执行以下命令,进入挂载路径并生成测试文件。
      cd /testdir
      echo 'ok' > testfile
    4. 重复执行以下命令,观察输出的Access。若Access有变化 ,则说明strictatime挂载参数已生效。
      stat testfile && cat testfile > /dev/null

相关文档