前言
之前寫過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儲存卷