掛載NAS靜態(tài)存儲卷
NAS存儲卷是一種可共享訪問、彈性擴展、高可靠以及高性能的分布式文件系統(tǒng)。本文介紹如何使用阿里云NAS靜態(tài)存儲卷,以及如何實現(xiàn)持久化存儲與共享存儲。
前提條件
已創(chuàng)建ACK Serverless集群。具體操作,請參見創(chuàng)建ACK Serverless集群。
已創(chuàng)建NAS文件系統(tǒng)。具體操作,請參見創(chuàng)建文件系統(tǒng)。
若需要加密NAS存儲卷中的數(shù)據(jù),創(chuàng)建NAS文件系統(tǒng)時請配置加密類型。
已創(chuàng)建NAS掛載點。具體操作,請參見管理掛載點。
NAS掛載點需要和集群節(jié)點在同一個VPC內(nèi)。
已通過kubectl工具連接集群。具體操作,請參見通過kubectl連接Kubernetes集群。
使用場景
對磁盤I/O要求較高的應(yīng)用。
可實現(xiàn)跨主機文件共享,例如可作為文件服務(wù)器。
注意事項
在使用極速NAS文件系統(tǒng)時,配置數(shù)據(jù)卷的
path
需要以/share為父目錄。例如,Pod掛載的NAS文件系統(tǒng)子目錄可配置為/share/path1。NAS支持同時被多個Pod掛載,此時多個Pod可能同時修改相同數(shù)據(jù),需要應(yīng)用自行實現(xiàn)數(shù)據(jù)的同步。
說明NAS存儲的/目錄不支持修改權(quán)限、屬主和屬組。
若您在應(yīng)用模板中配置了securityContext.fsgroup參數(shù),Kubelet在存儲卷掛載完成后會執(zhí)行
chmod
或chown
操作,導(dǎo)致掛載時間延長。說明若已配置securityContext.fsgroup參數(shù),且需要減少掛載時間。具體操作,請參見NAS存儲卷掛載時間延長。
通過控制臺的方式使用NAS靜態(tài)存儲卷
步驟一:創(chuàng)建PV
在控制臺左側(cè)導(dǎo)航欄,單擊集群。
在集群列表頁面,單擊目標(biāo)集群名稱或者目標(biāo)集群右側(cè)操作列下的詳情。
在集群管理頁左側(cè)導(dǎo)航欄,選擇 。
在存儲卷頁面單擊右上角的創(chuàng)建。
在創(chuàng)建存儲卷對話框中配置參數(shù)。
參數(shù)
說明
存儲卷類型
支持云盤、NAS兩種云存儲類型。本文中選擇為NAS。
名稱
創(chuàng)建的數(shù)據(jù)卷的名稱。數(shù)據(jù)卷名在集群內(nèi)必須唯一。本例為pv-nas。
總量
所創(chuàng)建存儲卷的容量。注意NAS文件系統(tǒng)本身不限制使用量。此處不是NAS文件系統(tǒng)的使用限額,只是所創(chuàng)建存儲卷的容量聲明。
訪問模式
選擇ReadWriteMany和ReadWriteOnce。默認(rèn)為ReadWriteMany。
掛載點域名
您可以通過選擇掛載點或者自定義的方式定義集群在NAS文件系統(tǒng)中掛載點的掛載地址。
顯示高級選項
子目錄:NAS路徑下的子目錄,以/為根目錄,設(shè)定后數(shù)據(jù)卷將掛載到指定的子目錄。
如果NAS根目錄下沒有此子目錄,會默認(rèn)創(chuàng)建后再掛載。
您可以不填此項,默認(rèn)掛載到NAS根目錄。
極速NAS需要以/share為父目錄。
版本:所創(chuàng)建存儲卷的版本。
標(biāo)簽
為該存儲卷添加標(biāo)簽。
參數(shù)配置完成后,單擊創(chuàng)建。
步驟二:創(chuàng)建PVC
在集群管理頁左側(cè)導(dǎo)航欄,選擇 。
在存儲聲明頁面,單擊右上角的創(chuàng)建。
在彈出的創(chuàng)建存儲聲明對話框中,填寫界面參數(shù)。
參數(shù)
說明
存儲聲明類型
支持云盤、NAS兩種云存儲類型。 本文中選擇NAS。
名稱
創(chuàng)建的存儲聲明名稱在集群內(nèi)必須唯一。
分配模式
選擇已有存儲卷。
說明若未創(chuàng)建存儲卷,您可以設(shè)置分配模式為創(chuàng)建存儲卷,配置創(chuàng)建存儲卷參數(shù)。更多信息,請參見創(chuàng)建PV。
已有存儲卷
單擊選擇已有存儲卷,在目標(biāo)存儲卷右側(cè)操作列單擊選擇,選擇存儲卷。
總量
所創(chuàng)建存儲卷的容量。
說明所創(chuàng)建存儲卷聲明的容量不能超過待掛載的存儲卷容量。
單擊創(chuàng)建。
創(chuàng)建成功后可以在列表中看到創(chuàng)建的存儲聲明,并且已綁定相應(yīng)的存儲卷。
步驟三:創(chuàng)建應(yīng)用
在集群管理頁左側(cè)導(dǎo)航欄,選擇 。
在無狀態(tài)頁面,單擊使用鏡像創(chuàng)建。
配置創(chuàng)建應(yīng)用的參數(shù)信息。
以下主要為您介紹數(shù)據(jù)卷的配置。關(guān)于其他參數(shù)的描述,請參見創(chuàng)建無狀態(tài)工作負(fù)載Deployment。
ACK Serverless數(shù)據(jù)卷支持配置本地存儲和云存儲。
本地存儲:支持配置項(ConfigMap)、保密字典(Secret)和臨時目錄,將對應(yīng)的掛載源掛載到容器路徑中。更多信息,請參見Volumes。
云存儲:支持云存儲類型。
本例中配置了一個NAS類型的數(shù)據(jù)卷,將該NAS存儲卷掛載到容器中/tmp路徑下。
所有的信息都配置完成后,單擊創(chuàng)建。
創(chuàng)建成功后,您就可以正常使用數(shù)據(jù)卷。
通過kubectl命令行方式使用NAS靜態(tài)存儲卷
執(zhí)行以下命令創(chuàng)建靜態(tài)PV。
kubectl create -f pv-nas.yaml
以下為創(chuàng)建靜態(tài)卷PV的YAML示例文件。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas labels: alicloud-pvname: pv-nas spec: capacity: storage: 5Gi accessModes: - ReadWriteMany csi: driver: nasplugin.csi.alibabacloud.com volumeHandle: pv-nas volumeAttributes: server: "2564f4****-ysu87.cn-shenzhen.nas.aliyuncs.com" path: "/csi" mountOptions: - nolock,tcp,noresvport - vers=3
參數(shù)
說明
name
PV的名稱。
labels
設(shè)置PV的標(biāo)簽。
storage
NAS的可使用量。
accessModes
配置訪問模式。
driver
驅(qū)動類型。本例中取值為
nasplugin.csi.alibabacloud.com
,表示使用阿里云NAS CSI插件。volumeHandle
配置PV的唯一標(biāo)識符。若需要同時使用多個PV,則各個PV中該值必須不一致。
server
NAS掛載點。
path
掛載子目錄,極速NAS需要以/share為父目錄。
vers
掛載NAS數(shù)據(jù)卷的NFS協(xié)議版本號,推薦使用v3,極速類型NAS只支持v3。
執(zhí)行以下命令創(chuàng)建靜態(tài)PVC。
創(chuàng)建NAS存儲聲明PVC,使用
selector
篩選PV,精確配置PVC和PV的綁定關(guān)系。kubectl create -f pvc-nas.yaml
以下為創(chuàng)建靜態(tài)卷PVC的YAML示例文件。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nas
參數(shù)
說明
name
PVC的名稱。
accessModes
配置訪問模式。
storage
聲明應(yīng)用使用量,不能大于存儲卷的總量。
matchLabels
輸入PV的標(biāo)簽,用于關(guān)聯(lián)PV。
執(zhí)行以下命令創(chuàng)建名為nas-static的應(yīng)用,并掛載PVC。
kubectl create -f nas.yaml
以下為創(chuàng)建nas-static應(yīng)用的nas.yaml示例文件。
apiVersion: apps/v1 kind: Deployment metadata: name: nas-static labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest ports: - containerPort: 80 volumeMounts: - name: pvc-nas mountPath: "/data" volumes: - name: pvc-nas persistentVolumeClaim: claimName: pvc-nas
參數(shù)
說明
mountPath
NAS在容器中掛載的位置。
claimName
PVC的名稱,用于綁定PVC。
執(zhí)行以下命令,查看Pod信息。
kubectl get pod
預(yù)期輸出:
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-n**** 1/1 Running 0 32s nas-static-c5bb4746c-4**** 1/1 Running 0 32s
驗證NAS的持久化存儲
查看部署應(yīng)用和NAS文件。
執(zhí)行以下命令,查看部署的應(yīng)用名稱。
kubectl get pod
預(yù)期輸出:
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-n**** 1/1 Running 0 32s nas-static-c5bb4746c-4**** 1/1 Running 0 32s
執(zhí)行以下命令,查看任意一個應(yīng)用的/data路徑下的文件,本文以名為
nas-static-5b5cdb85f6-n****
的Pod為例。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data
無返回結(jié)果,說明/data路徑下無文件。
執(zhí)行以下命令,在名為
nas-static-5b5cdb85f6-n****
Pod的/data路徑下創(chuàng)建文件nas。kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas
執(zhí)行以下命令,查看名為
nas-static-5b5cdb85f6-n****
Pod的/data路徑下的文件。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data
預(yù)期輸出:
nas
執(zhí)行以下命令,刪除Pod。
kubectl delete pod nas-static-5b5cdb85f6-n****
同時在另一個窗口中,執(zhí)行以下命令,查看Pod刪除及Kubernetes重建Pod的過程。
kubectl get pod -w -l app=nginx
驗證刪除Pod后,NAS里創(chuàng)建的文件是否還存在。
執(zhí)行以下命令,查看Kubernetes重建的Pod名稱。
kubectl get pod
預(yù)期輸出:
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-n**** 1/1 Running 0 32s nas-static-c5bb4746c-4**** 1/1 Running 0 32s
執(zhí)行以下命令,查看名為
nas-static-5b5cdb85f6-n****
的Pod /data路徑下的文件。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data
預(yù)期輸出:
nas
nas文件仍然存在,說明NAS的數(shù)據(jù)可持久化保存。
驗證NAS的共享存儲
查看部署的應(yīng)用所在的Pod和NAS文件。
執(zhí)行以下命令,查看應(yīng)用所在Pod的名稱。
kubectl get pod
預(yù)期輸出:
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-n**** 1/1 Running 0 32s nas-static-c5bb4746c-4**** 1/1 Running 0 32s
執(zhí)行以下命令,查看2個Pod /data路徑下的文件。
kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data kubectl exec nas-static-c5bb4746c-4**** -- ls /data
執(zhí)行以下命令,在任意一個Pod的/data路徑下創(chuàng)建文件nas。
kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas
執(zhí)行以下命令,查看2個Pod /data路徑下的文件。
執(zhí)行以下命令,查看名為
nas-static-5b5cdb85f6-n****
的Pod /data路徑下的文件。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data
預(yù)期輸出:
nas
執(zhí)行以下命令,查看名為
nas-static-c5bb4746c-4****
的Pod /data路徑下的文件。kubectl exec nas-static-c5bb4746c-4**** -- ls /data
預(yù)期輸出:
nas
如果在任意一個Pod的/data下創(chuàng)建的文件,兩個Pod下的/data路徑下均存在此文件,則說明兩個Pod共享一個NAS。