
# 通过动态存储卷创建SFS Turbo子目录（推荐）
在创建SFS Turbo时有最低容量限制，并非按实际的使用量进行计费。而默认情况下，工作负载在挂载SFS Turbo时将根目录映射至容器，负载实际使用的容量远低于这一限值，易造成资源浪费。为了更加经济合理地利用存储容量，CCE支持在创建PVC时动态创建SFS Turbo子目录，并支持配置子目录容量大小（Everest ≥ 2.4.73），实现不同工作负载共享使用SFS Turbo。
#### 前提条件
- 您已经创建好一个集群，并且在该集群中安装2.3.23及以上版本的[CCE容器存储（Everest）](https://support.huaweicloud.com/usermanual-cce/cce_10_0066.html)。
- 如果您需要通过命令行创建，需要使用kubectl连接到集群，详情请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)。
- 您已经创建好一个状态可用的SFS Turbo，并且SFS Turbo与集群在同一个VPC内。
 
#### 约束与限制
集群版本在v1.23及以上时，SFS Turbo(无子目录或子目录有限额)支持动态扩容。
#### 子目录配额约束和说明
- 子目录配额小于1Gi按1Gi配置，最大不能超过对应SFS Turbo实例的大小，单次扩容步长最小1Gi，不支持缩容。
- 子目录配额限制后，不支持取消。
- 子目录文件数量 = 配额容量（KB）/16，上限为10亿，不支持用户单独设置。
 
#### 动态创建SFS Turbo子目录
在CCE中，基于已配置的StorageClass，用户可通过控制台或kubectl命令行方式创建SFS Turbo子目录的PVC，系统将自动分配存储资源并挂载至工作负载。具体步骤如下：
- [控制台方式]
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
  
  2. 在左侧导航栏选择"存储"，在右侧选择"存储卷声明"页签。单击右上角"创建存储卷声明 PVC"，在弹出的窗口中填写存储卷声明参数。 
     
     | 参数      | 描述                                                                                                                                                                                                                                                                                                                                                   |
     |:---|:---|
     | 存储卷声明类型 | 本文中选择"极速文件存储"。                                                                                                                                                                                                                                                                                                                                       |
     | PVC名称   | 输入PVC的名称，同一命名空间下的PVC名称需唯一。                                                                                                                                                                                                                                                                                                                           |
     | 创建方式    | 选择"动态创建子目录"。                                                                                                                                                                                                                                                                                                                                         |
     | 存储类     | 选择极速文件存储对应的存储类为csi-sfsturbo。您可以自建存储类并配置回收策略和绑定模式，具体操作请参见[StorageClass基础配置](https://support.huaweicloud.com/usermanual-cce/cce_10_0380.html#cce_10_0380__section1074117311660)。                                                                                                                                                                       |
     | 访问模式    | 极速文件存储类型的存储卷仅支持ReadWriteMany，表示存储卷可以被多个节点以读写方式挂载，详情请参见[存储卷访问模式](https://support.huaweicloud.com/usermanual-cce/cce_10_0378.html#cce_10_0378__section43881411172418)。                                                                                                                                                                                 |
     | 极速文件存储  | 单击"选择极速文件存储"，您可以在新页面中勾选满足要求的极速文件存储，并单击"确定"。                                                                                                                                                                                                                                                                                                          |
     | 子目录     | 请填写子目录绝对路径，例如/a/b。                                                                                                                                                                                                                                                                                                                                   |
     | 子目录回收策略 | 删除PVC时是否保留子目录。 - 保留：删除PVC，PV会被删除，但**PV关联的子目录会被保留**。  - 删除：删除PVC，**PV及其关联的子目录均会被删除** 。 说明： 删除子目录时，仅删除PVC参数中设置的子目录绝对路径，不会级联删除上层目录。    |
     | 子目录容量限制 | - 不限制：不开启子目录容量大小限制。  - 限制：开启子目录容量大小限制。                                                                                                                                                         |
     | 容量      | 请输入子目录限制的容量大小，单位GiB。此选项只在开启子目录容量大小限制时有效。                                                                                                                                                                                                                                                                                                             |
        
     
     
  
  3. 单击"创建"，将同时为您创建存储卷声明和存储卷。 
     您可以在左侧导航栏中选择"存储"，在"存储卷声明"和"存储卷"页签下查看已经创建的存储卷声明和存储卷。
     
     
   
- [kubectl命令行方式]
  1. 使用kubectl连接集群。
  
  2. 创建pvc-sfsturbo-subpath.yaml文件。 
     ```
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-sfsturbo-subpath    # PVC的名称
       namespace: default
       annotations:
         everest.io/volume-as: absolute-path                # 表示使用SFS Turbo子目录
         everest.io/sfsturbo-share-id: <sfsturbo_id>        # SFS Turbo的ID
         everest.io/path: /a                                # 自动创建的子目录，必须为绝对路径
         everest.io/reclaim-policy: retain-volume-only      # 表示删除PVC时，PV会被删除，但PV关联的子目录会被保留
         everest.io/csi.enable-sfsturbo-dir-quota: "true"   # 是否开启配额限制
     spec:
       accessModes:
         - ReadWriteMany      # SFS Turbo必须为ReadWriteMany
       resources:
         requests:
           storage: 10Gi      # 对于SFS Turbo子目录类型的PVC，开启配额限制时，表示子目录容量大小，否则无实际意义，仅作校验需要（不能为空和0）
       storageClassName: csi-sfsturbo     # SFS Turbo存储类名称
     ```
     表1关键参数说明 
     | 参数                                       | 是否必选 | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
     |:---|:---|:---|
     | everest.io/volume-as                     | 是    | 固定取值为"absolute-path"，表示使用动态创建SFS Turbo子目录。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
     | everest.io/sfsturbo-share-id             | 是    | SFS Turbo的ID。 获取方法：在CCE控制台，单击顶部的"服务列表 \> 存储 \> 弹性文件服务"，并选择SFS Turbo。在列表中单击对应的极速弹性文件存储名称，在详情页中复制"ID"后的内容即可。                                                                                                                                                                                                                                                                                                                                                                                         |
     | everest.io/path                          | 是    | 自动创建的子目录，必须为绝对路径。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
     | everest.io/reclaim-policy                | 是    | 删除PVC时是否保留子目录，该参数需与[PV回收策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0378.html#cce_10_0378__section19999142414413)配合使用。仅当PV回收策略为"Delete"时生效，取值如下： - retain-volume-only：表示删除PVC时，PV会被删除，但**PV关联的子目录会被保留**。  - delete：表示删除PVC，**PV及其关联的子目录均会被删除** 。 说明： 删除子目录时，仅删除PVC参数中设置的子目录绝对路径，不会级联删除上层目录。    |
     | everest.io/csi.enable-sfsturbo-dir-quota | 否    | 是否开启子目录的配额限制。"true"表示开启限制，其他值或不填表示不开启限制。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
     | storage                                  | 是    | PVC申请容量，单位为Gi。 - 开启配额限制时，即"everest.io/csi.enable-sfsturbo-dir-quota"设置为"true"，storage表示子目录容量大小，此时仅支持设置为整数。 若storage被设置为小数，系统将自动向上取整。例如storage值设置为10.1Gi时，系统将自动创建11Gi的子目录。   - 未开启配额限制时，storage无实际意义，仅作校验需要，此处可设置为固定值10Gi。                                                                                                                      |
        
     
     
  
  3. 执行以下命令，创建PVC。 
     ```
     kubectl apply -f pvc-sfsturbo-subpath.yaml
     ```
     
     
   
#### 相关文档
如果工作负载挂载存储卷时出现无法挂载或挂载超时的情况，请参见[工作负载异常：存储卷无法挂载或挂载超时](https://support.huaweicloud.com/cce_faq/cce_faq_00200.html)排查解决。
