容器网络文件系统CNFS(Container Network File System)将阿里云的文件存储抽象为一个Kubernetes对象(CRD)进行独立管理,包括创建、删除、挂载、监控及扩容等运维操作。您可以通过CNFS实现对NAS文件系统的独立管理,以提升NAS文件系统的性能和QoS控制。本文介绍如何使用CNFS托管NAS文件系统及CNFS在工作负载中的应用。
前提条件
- 已开通文件存储NAS服务。 - 首次登录文件存储NAS产品详情页时,按照页面引导开通服务。 
- 已创建ACK托管集群Pro版,且集群为1.20以上版本(通过kubectl使用CNFS时,支持1.20版本集群)。具体操作,请参见创建ACK托管集群。 
- 存储相关组件csi-plugin、csi-provisioner、storage-operator的版本满足以下要求: - csi-plugin和csi-provisioner组件为v1.20.5-ff6490f-aliyun及以上版本。 
- storage-operator组件为v1.18.8.56-2aa33ba-aliyun及以上版本;通过控制台使用CNFS时需为v1.26.2-1de13b6-aliyun及以上版本。 
 
- 支持容量型和性能型的NAS文件系统,暂不支持高级型和极速型NAS文件系统。若您需要对NAS文件系统进行KMS加密,请先开通KMS服务。具体操作,请参见开通密钥管理服务。 
功能介绍
您可以通过以下三种方式使用CNFS托管NAS文件系统:
- 使用CNFS创建默认NAS文件系统,通过动态卷的方式为工作负载挂载默认创建的NAS文件系统。 
- 使用CNFS创建自定义NAS文件系统,通过静态卷或者动态卷的方式为工作负载挂载自定义NAS文件系统。 
- 使用CNFS配置已有NAS文件系统,通过静态卷或者动态卷的方式为工作负载挂载已有NAS文件系统。 
方式一:使用CNFS创建默认NAS文件系统
根据当前集群所在的VPC,创建容量型NAS或性能型NAS,不支持极速型NAS。若当前地域不支持容量型NAS,则创建性能型NAS。默认情况下,文件不进行加密处理。
kubectl
使用以下YAML,创建默认的CNFS文件系统,并自动挂载到NAS文件系统,同时绑定到Deployment和StatefulSet。
| 参数 | 说明 | 
| description | 当前文件系统的描述。 | 
| type | 需要创建的存储卷类型。 | 
| reclaimPolicy | 回收策略,目前仅支持Retain策略,删除CNFS时并不会删除NAS文件系统。 | 
| parameters.encryptType | 可选,加密方式。 
 | 
| parameters.enableTrashCan | 是否开启回收站功能。 
 | 
控制台
- 创建容器网络文件系统CNFS。 - 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在容器网络文件系统CNFS页面,单击创建容器网络文件系统。 
- 在创建容器网络文件系统面板,输入CNFS名称,文件系统选择NAS,选择创建默认NAS,然后单击确定。 说明- 可按需开启全链路加速。开启后,会使用弹性加速特性进行挂载,更多信息,请参见开启CNFS NAS计算端分布式缓存。 
- 在容器网络文件系统列表页面,单击目标文件系统,查看容器网络文件系统详情,然后单击NAS ID进入NAS文件系统详情页面。 
- 在文件系统详情页面,单击挂载使用,在挂载点列表的挂载点地址列,将光标放置在  图标上,即可查看目标挂载点的挂载点地址。 图标上,即可查看目标挂载点的挂载点地址。
 
- 创建动态存储类StorageClass。 - 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在存储类页面,单击右上角的创建。 
- 在创建面板,完成StorageClass的相关配置后,单击创建。 - 配置项 - 说明 - 示例 - 名称 - StorageClass的名称。格式要求参考页面提示。 - alibabacloud-cnfs-nas - 存储卷类型 - 选择NAS。 - NAS - 选择挂载点 - 64888******-e*****.cn-qingdao.nas.aliyuncs.com - 回收策略 - 回收策略,目前仅支持Retain策略,删除CNFS时并不会删除NAS文件系统。 - Retain - 挂载选项 - 挂载NAS的可选参数,包括NFS协议版本等参数。 - NFS协议版本号推荐使用v3,且极速类型NAS仅支持v3。关于NFS协议的更多信息,请参见NFS协议。 - nolock,tcp,noresvport - vers=3 - 挂载路径 - NAS文件系统中的挂载路径。 - / 
 
- 创建PVC。 - 在集群管理页左侧导航栏,选择。 
- 在存储声明页面,单击右上角的创建。 
- 在创建存储声明面板,完成相关配置后,单击创建。 - 参数 - 说明 - 示例 - 存储声明类型 - 选择NAS。 - NAS - 名称 - 创建的存储声明名称在集群内必须唯一。 - cnfs-nas-pvc - 分配模式 - 存储卷使用方式。 - 使用存储类动态创建 - 已有存储卷类 - 单击选择存储类,在目标存储类右侧操作列单击选择,选择存储类。 - alibabacloud-cnfs-nas - 总量 - 所创建存储卷的容量。 说明- 所创建存储卷声明的容量不能超过待挂载的存储卷容量。 - 70 Gi - 访问模式 - 默认为ReadWriteMany,也可选择ReadWriteOnce或ReadOnlyMany。 - ReadWriteMany 
 
- 在目标应用中挂载PVC。 - 将通过CNFS创建的NAS文件系统挂载到容器中的/data路径下。  
方式二:使用CNFS创建自定义NAS文件系统
kubectl
- 创建自定义的NAS文件系统。 - 创建自定义的NAS文件系统。 - cat <<EOF | kubectl apply -f - apiVersion: storage.alibabacloud.com/v1beta1 kind: ContainerNetworkFileSystem metadata: name: cnfs-nas-filesystem spec: description: "cnfs" type: nas reclaimPolicy: Retain parameters: filesystemType: standard storageType: Capacity protocolType: NFS encryptType: SSE-KMS enableTrashCan: "true" trashCanReservedDays: "5" vSwitchId: vsw-2ze9l3ppwzg6bl02j**** EOF- 参数 - 说明 - description - 当前文件系统的描述。 - type - 需要创建的存储卷类型。 - reclaimPolicy - 回收策略,目前仅支持Retain策略,删除CNFS时并不会删除NAS文件系统。 - parameters.filesystemType - 文件系统类型。默认为通用型standard。 - parameters.storageType - 存储类型,当filesystemType为standard时,可选择性能型Performance或容量型Capacity NAS文件系统。 - parameters.protocolType - 文件传输协议类型为NFS,目前仅支持NFS V3协议。 - parameters.encryptType - 可选,加密方式。 - None:不加密。 
- SSE-KMS:使用NAS服务端KMS加密。 
 - parameters.enableTrashCan - 是否开启回收站功能。 - true:开启。 
- false:不开启。 
 - parameters.trashCanReservedDays - 表示回收站文件保留的最长时间,默认为7天。示例中 - trashCanReservedDays: 5,表示回收站的文件最长保留5天。- parameters.vSwitchId - 创建出的NAS文件系统需要使用的交换机ID。 
- 查看创建的NAS文件系统。 - kubectl get cnfs- 预期输出: - NAME AGE cnfs-nas-filesystem 6d
- 查看NAS文件系统的详细信息。 - kubectl get cnfs/cnfs-nas-filesystem -o yaml- 预期输出: 
 
- 通过创建静态PV或动态存储类StorageClass来绑定NAS文件系统。 - 创建静态PV。 - 执行以下内容创建引用NAS文件系统的PV对象。 - cat <<EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolume metadata: name: cnfs-nas-pv labels: alicloud-pvname: cnfs-nas-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteMany csi: driver: nasplugin.csi.alibabacloud.com volumeHandle: cnfs-nas-pv # 需要与PV的name保持一致。 volumeAttributes: containerNetworkFileSystem: cnfs-nas-filesystem path: "/" mountOptions: - nolock,tcp,noresvport - vers=3 EOF- 参数 - 说明 - containerNetworkFileSystem - 指定需要使用的CNFS名称。 - path - 挂载存储卷在CNFS中使用的路径。 
- 查看PV是否创建成功。 - kubectl get pv- 预期输出: - NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE cnfs-nas-pv 5Gi RWX Retain Available 4s
 
- 创建动态StorageClass。 - 执行以下内容创建引用NAS文件系统的StorageClass对象。 - cat <<EOF | kubectl apply -f - apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alibabacloud-nas-cnfs mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: subpath containerNetworkFileSystem: nas-load-mount-target path: "/" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain allowVolumeExpansion: true EOF说明- allowVolumeExpansion:取值为true或false,表示是否开启Quota及扩容功能。 
 
- 创建PVC。 - 执行以下内容创建引用NAS文件系统的PVC。 - cat <<EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cnfs-nas-pvc spec: accessModes: - ReadWriteMany storageClassName: alibabacloud-nas-cnfs resources: requests: storage: 70Gi EOF
 
- 创建应用。 - 执行以下内容创建引用PVC的应用。 - cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: cnfs-nas-deployment labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 volumeMounts: - name: cnfs-nas-pvc mountPath: "/data" volumes: - name: cnfs-nas-pvc persistentVolumeClaim: claimName: cnfs-nas-pvc EOF
- 查看所创建应用的工作状态。 - kubectl get pod- 预期输出: - NAME READY STATUS RESTARTS AGE cnfs-nas-deployment-86959b**** 1/1 Running 0 2s- 从预期输出可得,所创建的Deployment为Running状态,表示CNFS在该Deployment中使用成功。 
 
控制台
- 创建容器网络文件系统CNFS。 - 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在容器网络文件系统CNFS页面,单击创建容器网络文件系统。 
- 在创建容器网络文件系统面板,配置相关参数后,单击确定。 - 输入CNFS名称,文件系统选择NAS,然后选中选择已有NAS,单击右侧的创建NAS来创建自定义的NAS文件系统。具体操作,请参见通过控制台创建通用型NAS文件系统。 说明- 可按需开启全链路加速。开启后,会使用弹性加速特性进行挂载,更多信息,请参见开启CNFS NAS计算端分布式缓存。 
 
- 通过创建静态PV或动态存储类StorageClass来绑定NAS文件系统。 - 创建静态PV。 - 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在存储卷页面,单击创建。 
- 在创建存储卷面板,配置相关参数后,单击创建。 - 配置项 - 说明 - 示例 - 存储卷类型 - 选择NAS。 - NAS - 名称 - 创建的数据卷的名称。数据卷名在集群内必须唯一。 - cnfs-nas-pv - 总量 - 所创建存储卷的容量。注意NAS文件系统本身不限制使用量。此处不是NAS文件系统的使用限额,只是所创建存储卷的容量声明。 - 5 Gi - 访问模式 - 支持ReadWriteMany和ReadWriteOnce。默认为ReadWriteMany。 - ReadWriteMany - 是否使用CNFS - 是否使用CNFS功能。 - 开启 - 选择CNFS - 开启CNFS功能后,选择步骤1中已创建的CNFS。 - cnfs-nas-filesystem - 高级选项(选填) - 展开后可配置以下参数: - 挂载路径:NAS文件系统中的挂载路径。以/为根目录,设定后数据卷将挂载到指定的子目录。 - 如果NAS根目录下没有此子目录,会默认创建后再挂载。 
- 您可以不填此项,默认挂载到NAS根目录。 
 
- 回收策略:回收策略,CNFS仅支持Retain策略。 
- 开启CNFS加速:开启CNFS功能,设置是否开启CNFS加速功能,关于CNFS加速更多信息,请参见开启CNFS NAS计算端分布式缓存。 
 - / 
- Retain 
- 开启CNFS加速 
 - 标签 - 为该存储卷添加标签。 - cnfs-nas-pv 
 
- 创建动态存储类StorageClass。 - 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在存储类页面,单击右上角的创建。 
- 在创建面板,完成StorageClass的相关配置后,单击创建。 - 配置项 - 说明 - 示例 - 名称 - StorageClass的名称。格式要求参考页面提示。 - alibabacloud-cnfs-nas - 存储卷类型 - 选择NAS。 - NAS - 选择挂载点 - 64888******-e*****.cn-qingdao.nas.aliyuncs.com - 回收策略 - 回收策略,目前仅支持Retain策略,删除CNFS时并不会删除NAS文件系统。 - Retain - 挂载选项 - 挂载NAS的可选参数,包括NFS协议版本等参数。 - NFS协议版本号推荐使用v3,且极速类型NAS仅支持v3。关于NFS协议的更多信息,请参见NFS协议。 - nolock,tcp,noresvport - vers=3 - 挂载路径 - NAS文件系统中的挂载路径。 - / 
 
 
- 创建PVC。 - 在集群管理页左侧导航栏,选择。 
- 在存储声明页面,单击右上角的创建。 
- 在创建存储声明面板,完成相关配置后,单击创建。 - 参数 - 说明 - 示例 - 存储声明类型 - 选择NAS。 - NAS - 名称 - 创建的存储声明名称在集群内必须唯一。 - cnfs-nas-pvc - 分配模式 - 存储卷使用方式。 - 使用存储类动态创建 - 已有存储卷类 - 单击选择存储类,在目标存储类右侧操作列单击选择,选择存储类。 - alibabacloud-cnfs-nas - 总量 - 所创建存储卷的容量。 说明- 所创建存储卷声明的容量不能超过待挂载的存储卷容量。 - 70 Gi - 访问模式 - 默认为ReadWriteMany,也可选择ReadWriteOnce或ReadOnlyMany。 - ReadWriteMany 
 
- 在目标应用中挂载PVC。 - 将通过CNFS创建的NAS文件系统挂载到容器中的/data路径下。  
方式三:使用CNFS配置已有NAS文件系统
kubectl
- 使用已有的NAS文件系统创建CNFS。 - 执行以下内容使用已有的NAS文件系统创建CNFS。 - # 当NAS文件系统存在时,加载已创建的NAS文件系统。 cat <<EOF | kubectl apply -f - apiVersion: storage.alibabacloud.com/v1beta1 kind: ContainerNetworkFileSystem metadata: name: cnfs-nas-filesystem spec: description: "cnfs" type: nas reclaimPolicy: Retain parameters: server: 17f7e4****-h****.cn-beijing.nas.aliyuncs.com EOF- 参数 - 说明 - description - 当前文件系统的简单描述。 - type - 需要创建的存储类型。 - reclaimPolicy - 回收策略,CNFS目前仅支持Retain策略,删除CNFS时并不会删除NAS文件系统。 - parameters.server - NAS的挂载点URL地址。 
- 查看NAS文件系统。 - kubectl get cnfs- 预期输出: - NAME AGE cnfs-nas-filesystem 6d
- 查看NAS文件系统的详细信息。 - kubectl get cnfs/cnfs-nas-filesystem -o yaml- 预期输出: 
 
- 在NAS存储卷中应用CNFS。具体操作,请参见方式二:使用CNFS创建自定义NAS文件系统中通过kubectl创建的步骤2到步骤4。 
控制台
- 创建容器网络文件系统CNFS。 - 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在容器网络文件系统CNFS页面,单击创建容器网络文件系统。 
- 在创建容器网络文件系统面板,配置相关参数后,单击确定。 - 输入CNFS名称,文件系统选择NAS,然后选中选择已有NAS,在下拉列表中选择已有的NAS挂载点。 说明- 可按需开启全链路加速。开启后,会使用弹性加速特性进行挂载,更多信息,请参见开启CNFS NAS计算端分布式缓存。 
 
- 在NAS存储卷中应用CNFS。具体操作,请参见方式二:使用CNFS创建自定义NAS文件系统中通过控制台创建的步骤2到步骤4。 
相关文档
关于如何监控节点侧NAS存储资源,请参见容器存储监控概述。