为了提升NAS文件系统的性能,容器服务ACK使用CNFS(Container Network File System)托管NAS文件系统,对文件系统层独立管理。本文介绍如何使用CNFS托管NAS文件系统及CNFS在工作负载中的应用。
前提条件
- 已创建Kubernetes集群,且存储插件选择为CSI。具体操作,请参见创建Kubernetes托管版集群。
- csi-plugin和csi-provisioner组件版本不低于v1.20.5-ff6490f-aliyun。关于升级CSI-Plugin和CSI-Provisioner组件的操作,请参见升级CSI-Plugin和CSI-Provisioner。
- storage-operator组件版本不低于v1.18.8.56-2aa33ba-aliyun。关于升级storage-operator组件的操作,请参见管理组件。
- 已通过kubectl工具连接Kubernetes集群。具体操作,请参见通过kubectl工具连接集群。
- 若您需要对NAS文件系统进行KMS加密,请先开通KMS服务。具体操作,请参见购买专属KMS实例。
功能介绍
可通过以下三种方式使用CNFS托管NAS文件系统:
- 方式一:使用CNFS创建默认NAS文件系统
创建一个默认的CNFS文件系统,并使用NAS动态存储卷自动挂载默认创建的NAS文件系统,同时将NAS动态存储卷绑定到工作负载Deployment和StatefulSet中。
- 方式二:使用CNFS创建自定义NAS文件系统
使用CNFS创建自定义的NAS文件系统,并使用NAS静态存储卷或NAS动态存储卷挂载自定义创建的NAS文件系统,然后将创建的NAS静态存储卷或NAS动态存储卷绑定到工作负载Deployment中。
- 方式三:使用已有的NAS文件系统创建CNFS
使用CNFS配置已有的NAS文件系统,并使用NAS静态存储卷或NAS动态存储卷挂载已有的NAS文件系统,然后将创建的NAS静态存储卷或NAS动态存储卷绑定到工作负载Deployment中。
方式一:使用CNFS创建默认NAS文件系统
执行以下内容,创建一个默认的CNFS文件系统,并使用NAS动态存储卷自动挂载到默认创建的NAS文件系统中,同时将NAS动态存储卷绑定到工作负载Deployment和StatefulSet中。
# 创建CNFS、StorageClass和Deployment、StatefulSet对象。
cat << EOF | kubectl apply -f -
apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
metadata:
name: cnfs-nas-filesystem
spec:
description: "cnfs"
type: nas
reclaimPolicy: Retain # 只支持Retain策略,删除CNFS时并不会删除NAS文件系统。
parameters:
encryptType: SSE-KMS # 可选参数,不指定表示对文件不使用NAS托管加密,指定SSE-KMS表示开启此功能。
enableTrashCan: "true" # 可选参数,不指定表示不打开回收站功能,指定true表示开启此功能。
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alibabacloud-cnfs-nas
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:
volumeAs: subpath
containerNetworkFileSystem: cnfs-nas-filesystem
path: "/"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
allowVolumeExpansion: true # 可选参数,指定为true表示允许对NAS文件系统进行扩容。
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: cnfs-nas-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: alibabacloud-cnfs-nas
resources:
requests:
storage: 70Gi # 如果打开目录限额功能,则storage字段会生效,动态创建目录写入数据量最大为70 GiB。
---
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
volumeMounts:
- mountPath: "/data"
name: cnfs-nas-pvc
volumes:
- name: cnfs-nas-pvc
persistentVolumeClaim:
claimName: cnfs-nas-pvc
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: cnfs-nas-sts
labels:
app: nginx
spec:
serviceName: "nginx"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
volumeMounts:
- mountPath: "/data"
name: www
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "alibabacloud-cnfs-nas"
resources:
requests:
storage: 50Gi # 如果打开目录限额功能,则storage字段会生效,动态创建目录写入数据量最大为50 GiB。
EOF
重要 根据当前集群所在的VPC创建NAS。若当前地域不支持容量型NAS,则创建性能型NAS,默认对文件不进行加密处理。
方式二:使用CNFS创建自定义NAS文件系统
使用CNFS创建自定义的NAS文件系统,并使用NAS静态存储卷或NAS动态存储卷挂载自定义创建的NAS文件系统,然后将创建的NAS静态存储卷或NAS动态存储卷绑定到工作负载Deployment中。
- 创建自定义的NAS文件系统。
- 通过PV绑定NAS文件系统。通过创建静态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: "/" mode: "644" 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
- 执行以下内容创建引用NAS文件系统的PV对象。
- 创建动态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及扩容功能。
- 创建静态PV。
- 创建PVC。
- 创建应用。
方式三:使用已有的NAS文件系统创建CNFS
使用CNFS配置已有的NAS文件系统,并使用NAS静态存储卷或NAS动态存储卷挂载已有的NAS文件系统,然后将创建的NAS静态存储卷或NAS动态存储卷绑定到工作负载Deployment中。
- 使用已有的NAS文件系统创建CNFS。
- 在NAS存储卷中应用CNFS。具体操作,请参见方式二:使用CNFS创建自定义NAS文件系统的步骤2到步骤4。
后续步骤
关于如何监控节点侧NAS存储资源,请参见NAS存储监控使用示例。