使用NAS靜態(tài)存儲(chǔ)卷
NAS存儲(chǔ)卷是一種可共享訪問、彈性擴(kuò)展、高可靠以及高性能的分布式文件系統(tǒng),適用于大數(shù)據(jù)分析、共享數(shù)據(jù)、Web應(yīng)用以及保存日志等場(chǎng)景。通過CSI組件,您可以使用已有的NAS創(chuàng)建PV和PVC,并在工作負(fù)載中掛載,實(shí)現(xiàn)數(shù)據(jù)的持久化存儲(chǔ)和共享存儲(chǔ)。
前提條件
集群默認(rèn)已安裝CSI組件。如需升級(jí)請(qǐng)參見升級(jí)csi-plugin和csi-provisioner。
說明如果您集群中使用Flexvolume組件,由于Flexvolume已廢棄,請(qǐng)參見遷移Flexvolume至CSI完成遷移后再進(jìn)行掛載。您可以在 ,在存儲(chǔ)頁簽下確認(rèn)存儲(chǔ)組件類型。
已通過kubectl連接集群。具體操作,請(qǐng)參見獲取集群KubeConfig并通過kubectl工具連接集群。
確認(rèn)已有NAS滿足以下條件,否則請(qǐng)重新創(chuàng)建滿足條件的NAS或者使用NAS動(dòng)態(tài)存儲(chǔ)卷。創(chuàng)建操作,請(qǐng)參見創(chuàng)建文件系統(tǒng)。
協(xié)議類型為NFS。極速型NAS僅支持NFSv3。
掛載點(diǎn)和集群節(jié)點(diǎn)在同一VPC內(nèi),且狀態(tài)為可用。如需添加掛載點(diǎn),請(qǐng)參見管理掛載點(diǎn)。
說明如需加密NAS存儲(chǔ)卷中的數(shù)據(jù),支持創(chuàng)建NAS文件系統(tǒng)時(shí)配置加密類型。
使用限制
不支持掛載SMB協(xié)議的NAS文件系統(tǒng)。
通用NAS與極速NAS在掛載連通性、文件系統(tǒng)數(shù)量及協(xié)議類型等方面存在相應(yīng)約束條件。更多信息,請(qǐng)參見使用限制。
NAS靜態(tài)存儲(chǔ)卷不支持?jǐn)U容。
注意事項(xiàng)
NAS為共享存儲(chǔ),一個(gè)NAS存儲(chǔ)卷可以掛載到多個(gè)Pod上,可能出現(xiàn)多個(gè)Pod同時(shí)寫入數(shù)據(jù)的問題,需應(yīng)用自行確保數(shù)據(jù)一致性。關(guān)于NAS并發(fā)寫入的一些限制條件,請(qǐng)參見如何避免多進(jìn)程或多客戶端并發(fā)寫同一日志文件可能出現(xiàn)的異常?和如何解決向NFS文件系統(tǒng)中寫入數(shù)據(jù)延遲問題?
請(qǐng)勿刪除NAS掛載點(diǎn),否則會(huì)造成操作系統(tǒng)無響應(yīng)。
在使用極速型NAS文件系統(tǒng)時(shí),配置存儲(chǔ)卷的
path
需要以/share
為父目錄。例如,Pod掛載的NAS文件系統(tǒng)子目錄可配置為/share/path1
。若您在應(yīng)用模板中配置了securityContext.fsgroup參數(shù),kubelet在存儲(chǔ)卷掛載完成后會(huì)執(zhí)行
chmod
或chown
操作,導(dǎo)致掛載時(shí)間延長(zhǎng)。若已配置securityContext.fsgroup參數(shù),且需要減少掛載時(shí)間。具體操作,請(qǐng)參見NAS存儲(chǔ)卷掛載時(shí)間延長(zhǎng)。
步驟一:掛載NAS靜態(tài)存儲(chǔ)卷
kubectl
創(chuàng)建靜態(tài)PV。
將以下示例YAML內(nèi)容保存為pv-nas.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 # 必須與PV Name保持一致。 volumeAttributes: server: "0c47****-mpk25.cn-shenzhen.nas.aliyuncs.com" # NAS掛載點(diǎn),與集群VPC一致。 path: "/csi" # 掛載子目錄。 mountOptions: - nolock,tcp,noresvport - vers=3
參數(shù)
說明
name
PV的名稱。
labels
設(shè)置PV的標(biāo)簽。
storage
NAS的可使用量。
說明NAS存儲(chǔ)卷在實(shí)際使用中,不受此storage使用量限制,根據(jù)不同NAS使用限制確認(rèn)NAS存儲(chǔ)卷最終可使用的容量。
accessModes
配置訪問模式,默認(rèn)為
ReadWriteMany
,也支持ReadWriteOnce
和ReadOnlyMany
。driver
驅(qū)動(dòng)類型。此處必須配置為
nasplugin.csi.alibabacloud.com
,表示使用阿里云NAS CSI插件。volumeHandle
配置PV的唯一標(biāo)識(shí)符,必須與PV Name保持一致。若需要同時(shí)使用多個(gè)PV,則各個(gè)PV中該值須唯一。
server
NAS掛載點(diǎn)地址,必須與集群VPC一致。
說明替換為實(shí)際的掛載點(diǎn)地址,如何查看掛載點(diǎn)地址,請(qǐng)參見查看掛載點(diǎn)地址。
path
在容器中掛載NAS存儲(chǔ)卷的子目錄。通用型NAS的父目錄為/。
重要極速型NAS需要以
/share
為父目錄,則此處子目錄應(yīng)為/share/csi
。mountOptions
掛載NAS的
options
參數(shù)在mountOptions
中配置,包括NFS協(xié)議版本。掛載NAS存儲(chǔ)卷的NFS協(xié)議版本號(hào),推薦使用v3,極速類型NAS僅支持v3。關(guān)于NFS協(xié)議的更多信息,請(qǐng)參見NFS協(xié)議。創(chuàng)建靜態(tài)PV。
kubectl create -f pv-nas.yaml
創(chuàng)建NAS存儲(chǔ)聲明PVC,使用selector篩選PV,精確配置PVC和PV的綁定關(guān)系。
將以下示例YAML內(nèi)容保存至pvc-nas.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名稱。
pvc-nas
accessModes
訪問模式。默認(rèn)為
ReadWriteMany
,也支持ReadWriteOnce
或ReadOnlyMany
。ReadWriteMany
storage
聲明應(yīng)用使用NAS存儲(chǔ)卷的容量,不能大于存儲(chǔ)卷的總量。
說明NAS存儲(chǔ)卷在實(shí)際使用中,不受此storage使用量限制,根據(jù)不同NAS使用限制確認(rèn)NAS存儲(chǔ)卷最終可使用的容量。
5Gi
matchLabels
輸入PV的標(biāo)簽,用于關(guān)聯(lián)PV。
pv-nas
創(chuàng)建靜態(tài)PVC。
kubectl create -f pvc-nas.yaml
創(chuàng)建名為nas-static的應(yīng)用,并掛載PVC。
以下為創(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: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: pvc-nas mountPath: "/data" volumes: - name: pvc-nas persistentVolumeClaim: claimName: pvc-nas
參數(shù)
說明
mountPath
NAS在容器中掛載的位置。
claimName
PVC的名稱,用于綁定PVC。
創(chuàng)建名為nas-static的應(yīng)用,并掛載PVC。
kubectl create -f nas.yaml
查看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
控制臺(tái)
步驟一:創(chuàng)建PV
登錄容器服務(wù)管理控制臺(tái),在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在存儲(chǔ)卷頁面,單擊創(chuàng)建。
在創(chuàng)建存儲(chǔ)卷頁面配置參數(shù),配置完成后,單擊創(chuàng)建。
配置項(xiàng)
說明
示例值
存儲(chǔ)卷類型
選擇NAS。
NAS
名稱
存儲(chǔ)卷名稱。在集群內(nèi)必須唯一。
pv-nas
總量
存儲(chǔ)卷的容量。
說明NAS文件系統(tǒng)本身不限制使用量。此處不是NAS文件系統(tǒng)的使用限額,只是所創(chuàng)建存儲(chǔ)卷的容量聲明。
20Gi
訪問模式
支持ReadWriteMany和ReadWriteOnce。默認(rèn)為ReadWriteMany。
ReadWriteMany
是否使用CNFS
是否使用CNFS功能。開啟后,您需要進(jìn)行以下操作:
選擇對(duì)應(yīng)的CNFS或新建CNFS。關(guān)于CNFS的更多信息,請(qǐng)參見創(chuàng)建CNFS管理NAS文件系統(tǒng)(推薦)。
是否開啟CNFS加速功能,關(guān)于CNFS加速更多信息,請(qǐng)參見開啟CNFS NAS計(jì)算端分布式緩存。
開啟
掛載點(diǎn)域名
僅在未開啟CNFS時(shí),需要設(shè)置。
您可以通過選擇掛載點(diǎn)或者自定義的方式配置要掛載的NAS文件系統(tǒng)目錄。關(guān)于如何查看掛載點(diǎn)地址,請(qǐng)參見查看掛載點(diǎn)地址。
0c47****-mpk25.cn-shenzhen.nas.aliyuncs.co
高級(jí)選項(xiàng)(選填)
掛載路徑:NAS文件系統(tǒng)中的掛載路徑。以
/
為根目錄,設(shè)定后存儲(chǔ)卷將掛載到指定的子目錄。如果NAS根目錄下沒有此子目錄,會(huì)默認(rèn)創(chuàng)建后再進(jìn)行掛載。
您可以不填此項(xiàng),默認(rèn)掛載到NAS根目錄。
極速型NAS需要以
/share
為根目錄,例如/share/data
。
/data
回收策略:默認(rèn)為Delete,支持Retain。
Delete:需配合
archiveOnDelete
一起使用。當(dāng)
archiveOnDelete
為true
時(shí),刪除PVC時(shí),PV和NAS文件只會(huì)被重命名,不會(huì)被刪除。當(dāng)
archiveOnDelete
為false
時(shí),刪除PVC時(shí),PV和NAS文件會(huì)被真正刪除。
Retain:刪除PVC時(shí),PV和NAS文件不會(huì)被刪除,需要您手動(dòng)刪除。
如果數(shù)據(jù)安全性要求高,推薦使用Retain,以免誤刪除數(shù)據(jù)。
Retain
掛載選項(xiàng):掛載NAS的可選參數(shù),包括NFS協(xié)議版本等參數(shù)。NFS協(xié)議版本號(hào)推薦使用v3,且極速型NAS僅支持v3。關(guān)于NFS協(xié)議的更多信息,請(qǐng)參見NFS協(xié)議。
v3
標(biāo)簽
為該存儲(chǔ)卷添加標(biāo)簽。
pv-nas
創(chuàng)建完成后,在存儲(chǔ)卷頁面可以看到新創(chuàng)建的PV。
步驟二:創(chuàng)建PVC
在集群管理頁左側(cè)導(dǎo)航欄,選擇 。
在存儲(chǔ)聲明頁面,單擊創(chuàng)建。
在創(chuàng)建存儲(chǔ)聲明頁面配置參數(shù)。配置完成后,單擊創(chuàng)建。
參數(shù)
說明
示例值
存儲(chǔ)聲明類型
選擇NAS。
NAS
名稱
存儲(chǔ)聲明名稱在集群內(nèi)必須唯一。
pvc-nas
分配模式
選擇已有存儲(chǔ)卷。
說明若未創(chuàng)建存儲(chǔ)卷,您可以設(shè)置分配模式為創(chuàng)建存儲(chǔ)卷,配置創(chuàng)建存儲(chǔ)卷參數(shù)。
選擇已有存儲(chǔ)卷
已有存儲(chǔ)卷
單擊選擇已有存儲(chǔ)卷,在目標(biāo)存儲(chǔ)卷右側(cè)操作列單擊選擇,選擇存儲(chǔ)卷。
已有存儲(chǔ)卷
總量
聲明所需使用的存儲(chǔ)卷的容量。
說明所創(chuàng)建存儲(chǔ)卷聲明的容量不能超過待掛載的存儲(chǔ)卷容量。
20
訪問模式
默認(rèn)為ReadWriteMany,也可選擇ReadWriteOnce或ReadOnlyMany。
ReadWriteMany
步驟三:創(chuàng)建應(yīng)用
在集群管理頁左側(cè)導(dǎo)航欄,選擇
。在無狀態(tài)頁面,單擊使用鏡像創(chuàng)建。
配置創(chuàng)建應(yīng)用的參數(shù)信息,配置完成后,單擊創(chuàng)建。
主要參數(shù)如下,其他參數(shù)保持默認(rèn)即可。更多信息,請(qǐng)參見創(chuàng)建無狀態(tài)工作負(fù)載Deployment。
配置項(xiàng)
參數(shù)
說明
示例
應(yīng)用基本信息
應(yīng)用名稱
Deployment名稱,自定義輸入。格式要求請(qǐng)參考界面提示。
test-nas
副本數(shù)量
Deployment的副本數(shù)量。
2
容器配置
鏡像名稱
用于部署應(yīng)用的鏡像地址。
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
所需資源
所需的vCPU和內(nèi)存資源。
0.25 vCPU,0.5 GiB
數(shù)據(jù)卷
單擊增加云存儲(chǔ)聲明,然后完成參數(shù)配置。
掛載源:選擇之前創(chuàng)建的PVC。
容器路徑:輸入NAS文件系統(tǒng)要掛載到的容器路徑。
掛載源:pvc-nas
容器路徑:/data
查看應(yīng)用部署狀態(tài)。
在無狀態(tài)頁面,單擊應(yīng)用名稱。
在容器組頁簽下,確認(rèn)Pod已正常運(yùn)行(狀態(tài)為Running)。
步驟二:驗(yàn)證NAS存儲(chǔ)特性
以上創(chuàng)建的工作負(fù)載Deployment中包含2個(gè)Pod,2個(gè)Pod掛載了同一個(gè)NAS文件系統(tǒng),您可以通過以下方式對(duì)NAS存儲(chǔ)卷進(jìn)行共享存儲(chǔ)和持久化存儲(chǔ)驗(yàn)證。
重建Pod,然后在新建的Pod中查看NAS文件系統(tǒng)中的數(shù)據(jù)是否存在,以此來驗(yàn)證持久化存儲(chǔ)。
在一個(gè)Pod中創(chuàng)建文件,然后在另一個(gè)Pod中查看文件,以此來驗(yàn)證共享存儲(chǔ)。
驗(yàn)證NAS的持久化存儲(chǔ)
查看應(yīng)用所在的Pod。
kubectl get pod
預(yù)期輸出:
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-a**** 1/1 Running 0 32s nas-static-c5bb4746c-b**** 1/1 Running 0 32s
在一個(gè)Pod中創(chuàng)建文件。
查看應(yīng)用中掛載的
/data
路徑下有無文件。以一個(gè)名為
nas-static-5b5cdb85f6-a****
的Pod為例。kubectl exec nas-static-5b5cdb85f6-a**** -- ls /data
無返回結(jié)果,說明當(dāng)前存儲(chǔ)路徑
/data
下無文件。在該P(yáng)od的
/data
路徑下創(chuàng)建文件nas。kubectl exec nas-static-5b5cdb85f6-a**** -- touch /data/nas
在另一個(gè)Pod中查看文件。
以另一個(gè)名為
nas-static-5b5cdb85f6-b****
的Pod為例。kubectl exec nas-static-5b5cdb85f6-b**** -- ls /data
預(yù)期輸出:
nas
重建Pod。
刪除Pod。
kubectl delete pod nas-static-5b5cdb85f6-a****
同時(shí)在另一個(gè)窗口中,查看Pod刪除及Kubernetes重建Pod的過程。
kubectl get pod -w -l app=nginx
驗(yàn)證刪除Pod后,NAS里創(chuàng)建的文件是否還存在。
查看重建的Pod名稱。
kubectl get pod
預(yù)期輸出:
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-c**** 1/1 Running 0 32s nas-static-c5bb4746c-a**** 1/1 Running 0 32s
查看重建Pod的
/data
路徑下的文件。以名為
nas-static-5b5cdb85f6-c****
的Pod為例。kubectl exec nas-static-5b5cdb85f6-c**** -- ls /data
預(yù)期輸出:
nas
nas文件仍然存在,表明NAS的數(shù)據(jù)可持久化保存。
驗(yàn)證NAS的共享存儲(chǔ)
查看應(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
查看兩個(gè)Pod的
/data
路徑下的文件。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data kubectl exec nas-static-c5bb4746c-4**** -- ls /data
無返回結(jié)果,說明當(dāng)前存儲(chǔ)路徑
/data
下無文件。在任意一個(gè)Pod 的
/data
路徑下創(chuàng)建文件nas。以名為
nas-static-5b5cdb85f6-n****
的Pod為例。kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas
查看兩個(gè)Pod的
/data
路徑下的文件。查看其中一個(gè)名為
nas-static-5b5cdb85f6-n****
的Pod 的/data
路徑下的文件。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data
預(yù)期輸出:
nas
查看另一個(gè)名為
nas-static-c5bb4746c-4****
的Pod 的/data
路徑下的文件。kubectl exec nas-static-c5bb4746c-4**** -- ls /data
預(yù)期輸出:
nas
如果在任意一個(gè)Pod的
/data
下創(chuàng)建的文件,在兩個(gè)Pod的/data
路徑下均存在此文件,表明兩個(gè)Pod共享一個(gè)NAS。
相關(guān)文檔
如需通過TLS掛載,請(qǐng)參見如何通過CSI使用TLS掛載NAS文件系統(tǒng)?
使用NAS存儲(chǔ)卷時(shí),如遇到權(quán)限無法訪問的問題,請(qǐng)參見使用NAS存儲(chǔ)卷時(shí),提示chown: Operation not permitted解決。
為確保不同用戶和用戶組之間數(shù)據(jù)的安全性,您可以參考如何實(shí)現(xiàn)NAS的用戶或用戶組隔離解決。
如果您在使用NAS過程中遇到讀寫訪問的問題,可參見讀寫訪問文件類問題進(jìn)行排查。
您可以使用NAS動(dòng)態(tài)存儲(chǔ)卷根據(jù)需求動(dòng)態(tài)調(diào)整存儲(chǔ)卷大小。
您可以使用通用型NAS的目錄配額功能,實(shí)現(xiàn)對(duì)NAS存儲(chǔ)卷空間的有效控制。請(qǐng)參見擴(kuò)容NAS存儲(chǔ)卷容量。
您可以直接使用NAS存儲(chǔ)卷,也可以使用CNFS管理NAS存儲(chǔ)卷來提升NAS的性能和QoS控制。