# 设置云硬盘存储挂载参数
挂载参数（mountOptions）是在文件系统挂载过程中传递给内核的选项，用于控制存储设备（如云硬盘、SFS、OBS等）的访问方式、性能优化、安全策略等。CCE支持在PV和StorageClass中设置挂载参数，具体如下：
- 在PV中设置挂载参数：仅作用于当前PV，适用于为特定存储卷定制挂载参数的场景。
- 在StorageClass中设置挂载参数：作用于所有通过该SC动态创建的PV，适用于为EVS统一配置挂载参数的场景。
#### 前提条件
[CCE容器存储（Everest）](https://support.huaweicloud.com/usermanual-cce/cce_10_0066.html)版本要求**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中设置挂载参数]
  在PV中设置挂载参数可以通过mountOptions字段实现，且仅针对当前PV有效。mountOptions支持挂载的字段请参见[云硬盘挂载参数]。
  1. 使用kubectl连接集群，详情请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)。
  
  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:  <your_region>   # 替换为您待部署应用的节点所在的区域
         failure-domain.beta.kubernetes.io/zone:  <your_zone>   # 替换为您待部署应用的节点所在的可用区
     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'     # 企业项目ID，0表示默认default企业项目
       persistentVolumeReclaimPolicy: Retain
       storageClassName: csi-disk
       mountOptions: # 挂载参数
         - strictatime
     ```
     
     
  
  3. PV创建后，可以创建PVC关联PV，然后在工作负载的容器中挂载，具体操作步骤请参见[通过静态存储卷使用已有云硬盘](https://support.huaweicloud.com/usermanual-cce/cce_10_0614.html)。
  
  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中设置挂载参数]
  在StorageClass中设置挂载参数同样可以通过mountOptions字段实现，对所有使用该StorageClass创建的PV有效。mountOptions支持挂载的字段请参见[云硬盘挂载参数]。了解关于更多StorageClass，请参见[自定义存储类（StorageClass）](https://support.huaweicloud.com/usermanual-cce/cce_10_0380.html)。
  1. 使用kubectl连接集群，详情请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)。
  
  2. 创建自定义的StorageClass，示例如下： 
     ```
     allowVolumeExpansion: true
     apiVersion: storage.k8s.io/v1
     kind: StorageClass 
     metadata:
       name: csi-disk-01 # 存储类的名称
     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中设置的挂载参数，具体操作步骤请参见[通过动态存储卷使用云硬盘](https://support.huaweicloud.com/usermanual-cce/cce_10_0615.html)。
  
  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
        ```
        
     
     
     
     
   
