使用CNFS管理NAS共享存儲卷(推薦)
容器服務(wù) Kubernetes 版支持以NAS共享存儲卷的方式掛載和使用CNFS。通過CNFS管理NAS共享存儲卷,您可以在多個應(yīng)用或Pod之間掛載同一個NAS文件系統(tǒng)的相同目錄,以解決Pod之間共享數(shù)據(jù)的問題。本文以StatefulSet類型應(yīng)用為例介紹如何使用CNFS管理NAS共享存儲卷。
前提條件
已開通文件存儲NAS服務(wù)。
首次登錄文件存儲NAS產(chǎn)品詳情頁時,按照頁面引導(dǎo)開通服務(wù)。
已創(chuàng)建Kubernetes集群,Kubernetes版本為v1.20及以上,且存儲插件選擇為CSI。具體操作,請參見創(chuàng)建Kubernetes托管版集群。
CSI-Plugin和CSI-Provisioner組件版本不低于v1.24.11-5221f79-aliyun。關(guān)于升級CSI-Plugin和CSI-Provisioner組件的操作,請參見安裝與升級CSI組件。
storage-operator組件版本不低于v1.24.105-825188d-aliyun。關(guān)于升級storage-operator組件的操作,請參見管理組件。
已通過kubectl工具連接Kubernetes集群。具體操作,請參見獲取集群KubeConfig并通過kubectl工具連接集群。
步驟一:創(chuàng)建共享存儲卷的工作負(fù)載
創(chuàng)建名為
cnfs-nas-static-pv
的PV,PV中引用名稱為cnfs-nas-filesystem
的CNFS,該CNFS為您已創(chuàng)建的NAS文件名。創(chuàng)建名為
cnfs-nas-static-pvc
的PVC,將PV和PVC進(jìn)行綁定。創(chuàng)建名為
cnfs-nas-static-sts
的StatefulSet,StatefulSet中使用busybox鏡像掛載PVC,并將1 G的臨時數(shù)據(jù)1G.tmpfile
寫入掛載點中。
cat << EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
name: cnfs-nas-static-pv
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 50Gi
csi:
driver: nasplugin.csi.alibabacloud.com
fsType: nfs
volumeAttributes:
containerNetworkFileSystem: cnfs-nas-filesystem # 引用名稱為cnfs-nas-filesystem的CNFS對象。
mountProtocol: nfs
path: /
volumeAs: subpath
volumeCapacity: "true"
volumeHandle: cnfs-nas-static-pv
mountOptions:
- nolock,tcp,noresvport
- vers=3
persistentVolumeReclaimPolicy: Delete
storageClassName: cnfs-nas-sc
volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cnfs-nas-static-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
storageClassName: cnfs-nas-sc
volumeMode: Filesystem
volumeName: cnfs-nas-static-pv # 引用名稱為cnfs-nas-static-pv的PV對象。
status:
accessModes:
- ReadWriteOnce
capacity:
storage: 50Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: cnfs-nas-static-sts
labels:
app: busybox
spec:
serviceName: "busybox"
replicas: 2
selector:
matchLabels:
app: busybox
template:
metadata:
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
command: ["/bin/sh"]
args: ["-c", "sleep 3600;"]
volumeMounts:
- mountPath: "/data"
name: cnfs-nas-static-pvc
volumes:
- name: cnfs-nas-static-pvc
persistentVolumeClaim:
claimName: cnfs-nas-static-pvc # 引用名稱為cnfs-nas-static-pvc的PVC對象。
EOF
步驟二:查看掛載情況
執(zhí)行以下命令,查看掛載情況。
kubectl exec cnfs-nas-static-sts-0 -- mount |grep nfs
預(yù)期輸出:
971134b0e8-****.cn-zhangjiakou.nas.aliyuncs.com:/ on /data type nfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)
預(yù)期輸出顯示有掛載點,說明掛載成功。
步驟三:查看持久化數(shù)據(jù)是否寫入成功
執(zhí)行以下命令,寫入1 G的臨時文件。
kubectl exec cnfs-nas-static-sts-0 -ti -- sh -c 'dd if=/dev/zero of=/data/1G.tmpfile bs=1G count=1;'
執(zhí)行以下命令,查看1 G的臨時文件是否寫入成功。
kubectl exec cnfs-nas-static-sts-0 -- ls -arlth /data
預(yù)期輸出:
total 1G
-rw-r--r-- 1 root root 1.0G Dec 15 12:11 1G.tmpfile
預(yù)期輸出表明,在/data下已經(jīng)成功寫入1 G的臨時文件1G.tmpfile
。
步驟四:查看寫入的數(shù)據(jù)是否在其他Pod內(nèi)共享
執(zhí)行以下命令,查看寫入的1 G的臨時文件是否在其他Pod cnfs-nas-static-sts-1中共享。
kubectl exec cnfs-nas-static-sts-1 -- ls -arlth /data
預(yù)期輸出:
total 1G
-rw-r--r-- 1 root root 1.0G Dec 15 12:11 1G.tmpfile
預(yù)期輸出表明,在Pod cnfs-nas-static-sts-0與Pod cnfs-nas-static-sts-1中共享寫入了1 G的臨時文件1G.tmpfile
。
在不同的Pod中寫入共享存儲數(shù)據(jù)時,CNFS不保證數(shù)據(jù)的一致性,避免多次寫入同一文件,以免對文件造成損壞。
相關(guān)文檔
如果您需要在多個應(yīng)用或Pod之間掛載NAS文件系統(tǒng)中的不同目錄以實現(xiàn)存儲隔離,請參見使用CNFS管理NAS隔離存儲卷(推薦)。
如果您需要實現(xiàn)NAS存儲卷的使用率高于某個閾值時觸發(fā)自動擴(kuò)容,請參見使用CNFS自動擴(kuò)容NAS存儲卷。