通过CNFS,可将阿里云NAS文件系统作为原生Kubernetes资源进行管理,为网站、数据分析等工作负载提供了更简单、高效的存储方案。
选择NAS文件系统的创建与接入方式
开始操作前,选择如何为集群提供NAS文件系统。
方式 | 说明 | 卷提供方式 | 适用场景 |
CNFS自动创建并管理一个配置固定的NAS文件系统,实现快速挂载。 | 动态卷 |
| |
CNFS根据参数配置,创建一个全新的、可自定义的NAS文件系统。 |
| 对性能、加密、成本等有特定要求,或需要精细化管理存储。 | |
将已存在的NAS文件系统接入CNFS进行统一管理。 |
| 将已有NAS平滑接入集群。 |
准备工作
已创建1.20以上版本的ACK托管集群Pro版。如需升级,请参见手动升级集群。
通过kubectl使用CNFS时,支持1.20版本。
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的容量型和性能型。
不支持高级型和极速型NAS。
每个账号在单个地域内可创建的NAS文件系统数量存在上限。
如需对NAS文件系统进行KMS加密,需开通KMS服务,详见开通密钥管理服务。
方式一:自动创建并使用NAS文件系统
通过CNFS可自动创建一个默认配置的NAS文件系统。CNFS会根据集群环境完成创建,默认不加密。若当前地域不支持容量型NAS,则自动使用性能型NAS。
kubectl
部署示例
以下YAML展示了应用(Deployment和StatefulSet)如何请求并挂载存储:通过PVC向StorageClass请求存储,该StorageClass基于关联的CNFS对象,在NAS中自动创建一个子目录作为PV并挂载至应用Pod。
CNFS的参数说明如下。
其余资源的参数说明,可参见使用NAS动态存储卷。
参数 | 说明 |
| 当前CNFS的描述。 |
| 需要创建的存储卷类型,使用 |
| 回收策略。当前仅支持 |
| 可选,是否启用加密方式。
|
| 是否开启回收站功能,避免误删除文件导致业务受阻或数据丢失。
|
结果验证
检查PV和PVC状态。
控制台
1. 创建CNFS
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
单击创建容器网络文件系统,按照页面提示配置CNFS。
选择NAS文件系统
选择创建默认NAS
按需开启全链路加速,以利用弹性加速特性进行挂载,优化数据访问性能,详情请参见通过CNFS使用EFC客户端挂载NAS。
在CNFS列表,单击目标CNFS查看详情,然后单击NAS ID进入NAS文件系统详情页面。
单击挂载使用,在挂载点地址列查看目标挂载点的挂载点地址。
2. 创建StorageClass
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
在存储类页面,单击创建,按照页面提示完成StorageClass的配置。
主要配置项如下。详细说明请参见创建StorageClass。
配置项
说明
示例
存储卷类型
选择NAS。
NAS
选择挂载点
此前通过CNFS创建的默认NAS文件系统的挂载点地址。
关于如何查看挂载点地址,请参见管理挂载点。
64888******-e*****.cn-qingdao.nas.aliyuncs.com
挂载路径
待挂载的NAS子目录。如果未设置,则默认挂载到根目录。通用型NAS的根目录为
/。如果NAS中没有该目录,系统会自动创建并进行挂载。
/
回收策略
回收策略。当前仅支持
Retain,删除CNFS时不会删除后端的NAS文件系统,防止数据丢失。Retain
3. 创建PVC
在集群管理页左侧导航栏,选择。
在存储声明页面,单击创建,选择存储声明类型为NAS,按照页面提示完成PVC的配置。
参数
说明
名称
集群内保持唯一。
分配模式
存储卷使用方式。
已有存储卷类
单击选择存储类,选择此前创建的StorageClass。
总量
所创建存储卷的容量,不超过待挂载的存储卷容量。
访问模式
默认为ReadWriteMany,也可选择ReadWriteOnce或ReadOnlyMany。
4. 创建应用并挂载NAS
创建Deployment或创建StatefulSet时,在容器配置页面的数据卷区域,可以配置PVC挂载到容器。
以下示例表示将通过CNFS创建的NAS文件系统挂载到容器中的/data路径下。

方式二:自定义参数创建并使用NAS文件系统
通过CNFS可创建具有自定义参数的NAS文件系统。流程如下:
定义一个ContainerNetworkFileSystem资源,实例化一个新的NAS文件系统。
通过创建静态PV或动态StorageClass,将该文件系统暴露给集群内的应用进行挂载。
kubectl
1. 创建自定义的NAS文件系统
创建一个ContainerNetworkFileSystem资源,声明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当前CNFS的描述。
type需要创建的存储卷类型,使用
nas。reclaimPolicy回收策略。当前仅支持
Retain,删除CNFS时不会删除后端的NAS文件系统,防止数据丢失。parameters.filesystemType文件系统类型。默认为通用型NAS
standard。parameters.storageType存储类型。通用型NAS可选择性能型
Performance或容量型Capacity。parameters.protocolType文件传输协议类型。目前仅支持NFS协议。
parameters.encryptType可选,是否启用加密方式。
None:不加密。SSE-KMS:启用NAS托管密钥,即使用NAS完全托管的密钥加密每个文件系统,该密钥由NAS在KMS中创建和管理。
parameters.enableTrashCan是否开启回收站功能,避免误删除文件导致业务受阻或数据丢失。
true:开启。false:不开启。
parameters.trashCanReservedDays表示回收站文件保留的最长时间,默认为7天。示例中
trashCanReservedDays: 5表示回收站的文件最长保留5天。parameters.vSwitchId创建出的NAS文件系统需要使用的交换机ID。
通用型NAS支持的地域和可用区,请参见地域 可用区。
查看创建的NAS文件系统。
kubectl get cnfs预期输出:
NAME AGE cnfs-nas-filesystem 30s查看NAS文件系统的详细信息。
kubectl get cnfs/cnfs-nas-filesystem -o yaml完整的YAML说明,请参见CNFS YAML说明。
2. 创建PV或StorageClass
创建CNFS后,选择应用如何接入并使用NAS。
静态PV:手动将一个PV绑定到NAS上的已有目录,适用于需要访问特定存量数据的场景。
动态StorageClass:创建一个StorageClass作为模板,让应用可以按需自动创建全新的独立子目录。
PV
关于PV参数的详细说明,请参见使用NAS静态存储卷。
执行以下内容创建引用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 VOLUMEATTRIBUTESCLASS REASON AGE cnfs-nas-pv 5Gi RWX Retain Available <unset> 9s
StorageClass
关于StorageClass参数的详细说明,请参见使用NAS动态存储卷。
创建引用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: cnfs-nas-filesystem
path: "/"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
# 指定为true,允许对存储卷的目录配额进行扩容
allowVolumeExpansion: true
EOF3. 创建PVC
关于PVC参数的详细说明,请参见创建PVC。
根据此前创建的静态PV和动态StorageClass,创建引用NAS文件系统的PVC。
PV
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cnfs-nas-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
selector:
matchLabels:
alicloud-pvname: cnfs-nas-pv # 通过标签精确匹配此前创建的PV
EOFStorageClass
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
EOF4. 创建应用并挂载NAS
PVC创建后,将其绑定的 PV 挂载到应用中。
创建引用PVC的应用。
cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: cnfs-nas-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: cnfs-nas-pvc mountPath: "/data" volumes: - name: cnfs-nas-pvc persistentVolumeClaim: claimName: cnfs-nas-pvc EOF查看所创建应用的工作状态。
kubectl get pod -l app=nginx预期输出中,Pod状态正常,CNFS成功将NAS文件系统挂载到Pod中。
NAME READY STATUS RESTARTS AGE cnfs-nas-deployment-86959b**** 1/1 Running 0 30s cnfs-nas-deployment-869ajk**** 1/1 Running 0 30s
控制台
1. 创建CNFS
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
单击创建容器网络文件系统,按照页面提示配置CNFS。
选择NAS文件系统
选择选择已有NAS,然后单击创建NAS创建自定义的NAS文件系统,创建完成后选择该NAS。
关于如何创建NAS,请参见通过控制台创建通用型NAS文件系统。
按需开启全链路加速,以利用弹性加速特性进行挂载,优化数据访问性能,详情请参见通过CNFS使用EFC客户端挂载NAS。
2. 创建PV或StorageClass
通过创建静态PV或动态存储类StorageClass来绑定NAS文件系统。
PV
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
单击创建,选择存储卷类型为NAS,按照页面提示完成PV的配置。
主要配置项如下。详细配置项说明,请参见创建PV。
配置项
说明
总量
PV容量声明。此声明仅为PVC匹配依据,不限制实际可用容量。应用实际可用存储上限为NAS文件系统总容量。
NAS实际容量上限由其规格决定,请参见通用型NAS。
是否使用CNFS
是否启用CNFS。
选择CNFS
开启CNFS功能后,选择此前创建的CNFS。
高级选项(选填)
挂载路径:
待挂载的NAS子目录。如果未设置,则默认挂载到根目录。通用型NAS的根目录为
/。如果NAS中没有该目录,系统会自动创建并进行挂载。
回收策略:CNFS仅支持Retain。
开启CNFS加速:开启CNFS加速功能,详情请参见通过CNFS使用EFC客户端挂载NAS。
StorageClass
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
在存储类页面,单击创建,按照页面提示完成StorageClass的配置。
主要配置项如下。详细说明请参见创建StorageClass。
配置项
说明
示例
存储卷类型
选择NAS。
NAS
选择挂载点
此前通过CNFS创建的默认NAS文件系统的挂载点地址。
关于如何查看挂载点地址,请参见管理挂载点。
64888******-e*****.cn-qingdao.nas.aliyuncs.com
挂载路径
待挂载的NAS子目录。如果未设置,则默认挂载到根目录。通用型NAS的根目录为
/。如果NAS中没有该目录,系统会自动创建并进行挂载。
/
回收策略
回收策略。当前仅支持
Retain,删除CNFS时不会删除后端的NAS文件系统,防止数据丢失。Retain
3. 创建PVC
在集群管理页左侧导航栏,选择。
在存储声明页面,单击创建,选择存储声明类型为NAS,按照页面提示完成PVC的配置。
参数
说明
名称
集群内保持唯一。
分配模式
存储卷使用方式。
已有存储卷类
单击选择存储类,选择此前创建的StorageClass。
总量
所创建存储卷的容量,不超过待挂载的存储卷容量。
访问模式
默认为ReadWriteMany,也可选择ReadWriteOnce或ReadOnlyMany。
4. 创建应用并挂载NAS
创建Deployment或创建StatefulSet时,在容器配置页面的数据卷区域,可以配置PVC挂载到容器。
以下示例表示将通过CNFS创建的NAS文件系统挂载到容器中的/data路径下。

方式三:纳管并使用已有的NAS文件系统
通过CNFS可纳管一个已存在的NAS文件系统,并将其接入集群供应用进行挂载和使用。
kubectl
1. 使用已有NAS创建CNFS
创建一个ContainerNetworkFileSystem资源,引用NAS挂载点。
# 当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回收策略。当前仅支持
Retain,删除CNFS时不会删除后端的NAS文件系统,防止数据丢失。parameters.serverNAS的挂载点地址。
查看NAS文件系统。
kubectl get cnfs预期输出:
NAME AGE cnfs-nas-filesystem 10s查看NAS文件系统的详细信息。
kubectl get cnfs/cnfs-nas-filesystem -o yaml完整的YAML说明,可参见CNFS YAML说明。
2. 在应用中挂载NAS
在应用中基于CNFS使用NAS存储卷的流程与方式二:自定义参数创建并使用NAS文件系统类似。请参见:
控制台
1. 使用已有NAS创建CNFS
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
单击创建容器网络文件系统,按照页面提示配置CNFS。
在创建容器网络文件系统面板,配置相关参数后,单击确定。
选择NAS文件系统。
选择选择已有NAS,在下拉列表中选择已有的NAS挂载点。
按需开启全链路加速,以利用弹性加速特性进行挂载,优化数据访问性能,详情请参见通过CNFS使用EFC客户端挂载NAS。
2. 在应用中挂载NAS
在应用中基于CNFS使用NAS存储卷的流程与方式二:自定义参数创建并使用NAS文件系统类似。请参见:
生产环境使用建议
维度 | 说明 |
数据安全 | 数据加密:创建新的NAS文件系统时,可在CNFS资源中设置 |
运维管理 |
|
成本优化 |
|
参考信息
验证共享存储、数据隔离、持久化存储
NAS挂载完成后,可进一步验证存储行为是否符合预期。
验证Deployment的共享存储和持久化存储
验证StatefulSet的数据隔离和持久化存储
CNFS YAML说明
执行kubectl get cnfs/<cnfsName> -o yaml查看CNFS YAML时,可查看CNFS对象的全部配置和实时状态。
此处以方式二中执行kubectl get cnfs/cnfs-nas-filesystem -o yaml查看cnfs-nas-filesystem YAML为例。