容器网络文件系统CNFS(Container Network File System)将阿里云的文件存储抽象为一个K8s对象(CRD)进行独立管理,包括创建、删除、描述、挂载、监控及扩容等运维操作,为了提升NAS文件系统的性能,您可以通过CNFS使用NAS文件系统,以提升NAS文件系统的性能和QoS控制,实现对文件系统层的独立管理。本文介绍如何使用CNFS托管NAS文件系统及CNFS在工作负载中的应用。
前提条件
已开通文件存储NAS服务。
首次登录文件存储NAS产品详情页时,按照页面引导开通服务。
已创建ACK集群Pro版,且集群为1.20以上版本(通过kubectl使用CNFS时,支持1.20版本集群)。具体操作,请参见创建ACK托管集群。
存储相关组件csi-plugin、csi-provisioner、storage-operator已升级至最新版本。关于升级组件的操作,请参见管理组件。使用CNFS功能时,相关组件版本要求如下:
csi-plugin和csi-provisioner组件为v1.20.5-ff6490f-aliyun及以上版本。
storage-operator组件为v1.18.8.56-2aa33ba-aliyun及以上版本;通过控制台使用CNFS时,该组件需为v1.26.2-1de13b6-aliyun及以上版本。
如需通过kubectl使用CNFS,请先通过kubectl工具连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
仅支持通用型NAS文件系统,不支持极速型NAS文件系统。若您需要对NAS文件系统进行KMS加密,请先开通KMS服务。具体操作,请参见开通密钥管理服务。
功能介绍
您可以通过以下三种方式使用CNFS托管NAS文件系统:
创建一个默认的CNFS文件系统,并使用NAS动态存储卷自动挂载默认创建的NAS文件系统,同时将NAS动态存储卷绑定到工作负载Deployment和StatefulSet中。
使用CNFS创建自定义的NAS文件系统,并使用NAS静态存储卷或NAS动态存储卷挂载自定义创建的NAS文件系统,然后将创建的NAS静态存储卷或NAS动态存储卷绑定到工作负载Deployment中。
使用CNFS配置已有的NAS文件系统,并使用NAS静态存储卷或NAS动态存储卷挂载已有的NAS文件系统,然后将创建的NAS静态存储卷或NAS动态存储卷绑定到工作负载Deployment中。
方式一:使用CNFS创建默认NAS文件系统
根据当前集群所在的VPC创建容量型NAS或性能型NAS,不支持极速型NAS。若当前地域不支持容量型NAS,则创建性能型NAS,默认对文件不进行加密处理。
通过kubectl命令行创建
使用以下内容,创建一个默认的CNFS文件系统,并使用NAS动态存储卷自动挂载到默认创建的NAS文件系统中,同时将NAS动态存储卷绑定到工作负载Deployment和StatefulSet中。
参数 | 说明 |
description | 当前文件系统的简单描述。 |
type | 需要创建的存储卷类型。 |
reclaimPolicy | 回收策略,目前仅支持Retain策略,删除CNFS时并不会删除NAS文件系统。 |
parameters.encryptType | 可选,加密方式。
|
parameters.enableTrashCan | 是否开启回收站功能。
|
通过控制台创建
创建容器网络文件系统CNFS。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择
。在容器网络文件系统CNFS页面,单击创建容器网络文件系统。
在创建容器网络文件系统面板,配置相关参数后,单击确定。
配置项
说明
示例
容器网络文件系统CNFS名称
CNFS名称。
cnfs-nas-filesystem
选择文件系统类型
选择要托管的文件系统类型,支持NAS和OSS。
NAS
必选项
支持创建默认NAS或选择已有NAS。选择已有NAS时,您可以选择已有的NAS挂载点或创建自定义的NAS文件系统。
选择文件系统类型为NAS时,才会显示该必选项。
创建默认NAS
容器网络文件系统CNFS描述
CNFS的相关描述信息。
通过CNFS创建默认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、OSS三种云存储类型。 本文中选择NAS。
NAS
名称
创建的存储声明名称在集群内必须唯一。
cnfs-nas-pvc
分配模式
存储卷使用方式。
使用存储类动态创建
已有存储卷类
单击选择存储类,在目标存储类右侧操作列单击选择,选择存储类。
alibabacloud-cnfs-nas
总量
所创建存储卷的容量。
说明所创建存储卷声明的容量不能超过待挂载的存储卷容量。
70 Gi
访问模式
默认为ReadWriteMany,也可选择ReadWriteOnce或ReadOnlyMany。
ReadWriteMany
在目标应用中挂载PVC。
将通过CNFS创建的NAS文件系统挂载到容器中的/data路径下。
方式二:使用CNFS创建自定义NAS文件系统
通过kubectl命令行创建
使用CNFS创建自定义的NAS文件系统,并使用NAS静态存储卷或NAS动态存储卷挂载自定义创建的NAS文件系统,然后将创建的NAS静态存储卷或NAS动态存储卷绑定到工作负载Deployment中。
创建自定义的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名称
CNFS名称。
cnfs-nas-filesystem
选择文件系统类型
选择要托管的文件系统类型,支持NAS和OSS。
NAS
必选项
支持创建默认NAS或选择已有NAS。选择已有NAS时,您可以选择已有的NAS挂载点或创建自定义的NAS文件系统。
选择文件系统类型为NAS时,才会显示该必选项。
选择已有NAS
选择NAS
选择已有的NAS挂载点或单击右侧创建NAS来创建自定义的NAS文件系统。
必选项为选择已有NAS时,才会显示该选项。
单击右侧创建NAS,仅支持创建通用型NAS文件系统,相关操作,请参见通过控制台创建通用型NAS文件系统。
容器网络文件系统CNFS描述
CNFS的相关描述信息。
通过CNFS创建自定义NAS文件系统
全链路加速
是否使用弹性加速特性进行挂载,默认关闭。关于弹性加速特性的更多信息,请参见开启CNFS NAS计算端分布式缓存。
关闭
通过创建静态PV或动态存储类StorageClass来绑定NAS文件系统。
创建静态PV。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在存储卷页面,单击右上角的创建。
在创建存储卷面板,配置相关参数后,单击确定。
配置项
说明
示例
存储卷类型
支持云盘、NAS、OSS三种云存储类型。本文中选择为NAS。
NAS
名称
创建的数据卷的名称。数据卷名在集群内必须唯一。
cnfs-nas-pv
总量
所创建存储卷的容量。注意NAS文件系统本身不限制使用量。此处不是NAS文件系统的使用限额,只是所创建存储卷的容量声明。
5 Gi
访问模式
支持ReadWriteMany和ReadWriteOnce。默认为ReadWriteMany。
ReadWriteMany
是否使用CNFS
使用CNFS功能。需要开启,开启后您需要进行以下操作:
选择步骤1中已创建的CNFS。
是否开启CNFS加速功能,关于CNFS加速更多信息,请参见开启CNFS NAS计算端分布式缓存。
cnfs-nas-filesystem
显示高级选项
挂载路径:NAS文件系统中的挂载路径。以/为根目录,设定后数据卷将挂载到指定的子目录。
如果NAS根目录下没有此子目录,会默认创建后再挂载。
您可以不填此项,默认挂载到NAS根目录。
回收策略:回收策略,CNFS仅支持Retain策略。
/
Retain
标签
为该存储卷添加标签。
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、OSS三种云存储类型。 本文中选择NAS。
NAS
名称
创建的存储声明名称在集群内必须唯一。
cnfs-nas-pvc
分配模式
存储卷使用方式。
使用存储类动态创建
已有存储卷类
单击选择存储类,在目标存储类右侧操作列单击选择,选择存储类。
alibabacloud-cnfs-nas
总量
所创建存储卷的容量。
说明所创建存储卷声明的容量不能超过待挂载的存储卷容量。
70 Gi
访问模式
默认为ReadWriteMany,也可选择ReadWriteOnce或ReadOnlyMany。
ReadWriteMany
在目标应用中挂载PVC。
将通过CNFS创建的NAS文件系统挂载到容器中的/data路径下。
方式三:使用已有的NAS文件系统创建CNFS
通过kubectl命令行创建
使用CNFS配置已有的NAS文件系统,并使用NAS静态存储卷或NAS动态存储卷挂载已有的NAS文件系统,然后将创建的NAS静态存储卷或NAS动态存储卷绑定到工作负载Deployment中。
使用已有的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名称
CNFS名称。
cnfs-nas-filesystem
选择文件系统类型
选择要托管的文件系统类型,支持NAS和OSS。
NAS
必选项
支持创建默认NAS或选择已有NAS。选择已有NAS时,您可以选择已有的NAS挂载点或创建自定义的NAS文件系统。
选择文件系统类型为NAS时,才会显示该必选项。
选择已有NAS
选择NAS
选择已有的NAS挂载点或单击右侧创建NAS来创建自定义的NAS文件系统。
必选项为选择已有NAS时,才会显示该选项。
选择已有的NAS挂载点,关于如何查看挂载点,请参见查看挂载点地址。
容器网络文件系统CNFS描述
CNFS的相关描述信息。
通过CNFS创建自定义NAS文件系统
全链路加速
是否使用弹性加速特性进行挂载,默认关闭。关于弹性加速特性的更多信息,请参见开启CNFS NAS计算端分布式缓存。
关闭
在NAS存储卷中应用CNFS。具体操作,请参见方式二:使用CNFS创建自定义NAS文件系统中通过控制台创建的步骤2到步骤4。
后续步骤
关于如何监控节点侧NAS存储资源,请参见NAS存储监控使用示例。