前言
之前写过K8S使用阿里云存储卷,并在helm安装redis、rabbitmq和elasticsearch的过程中使用alicloud-nas-fs
,但是事后发现,每次安装都会重复生成NAS,但是NAS每个账号最多添加20个,所以这不符合需求,通过跟阿里工程师的沟通之后,他们推荐使用CNFS来做为存储媒介,所有服务都共享同一个NAS文件系统,现在记录下来分享给大家。
CNFS概述
传统的共享文件系统存在缺少容量配额的精确控制、无法恢复误删文件、缺失存储卷容量性能等监控指标、无安全加密及小文件读写延迟等问题。阿里云容器服务ACK推出了容器网络文件系统CNFS提升NAS文件系统的性能,QoS控制。本文介绍容器网络文件系统CNFS的功能、存储规格、适用场景、使用限制及计费说明。
使用CNF
这个是官方提供的操作文档:使用CNFS托管NAS文件系统,我们只要看方式一:使用CNFS创建默认NAS文件系统
即可。
# 创建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
执行一下这个Yaml文件,k create -f xxx.yaml
,查看生成情况。
# 执行以下命令查看创建的NAS文件系统
kubectl get cnfs
# 执行以下命令查看NAS文件系统的详细信息
kubectl get cnfs/cnfs-nas-filesystem -o yaml
同理,你可以在安装redis、rabbitmq、elasticsearch中都可以使用alicloud-cnfs-nas
这个StorageClass来创建NAS共享存储,同时通过查看阿里控制台,NAS都只创建一个共享这一个。
总结
1、如果你想扩容CNFS,你可以查看使用CNFS自动扩容NAS存储卷
-- 2022-11-27更新 --
阿里云ACK也就是k8s自带了cnfs存储类,所以不用自己再新建了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。