NAS儲存卷是一種可共用訪問、彈性擴充、高可靠以及高效能的Distributed File System,適用於巨量資料分析、共用資料、Web應用以及儲存日誌等情境。通過CSI組件,您可以使用已有的NAS建立PV和PVC,並在工作負載中掛載,實現資料的持久化儲存和共用儲存。
前提條件
叢集預設已安裝CSI組件。如需升級請參見升級csi-plugin和csi-provisioner。
說明如果您叢集中使用Flexvolume組件,由於Flexvolume已廢棄,請參見遷移Flexvolume至CSI完成遷移後再進行掛載。您可以在 ,在儲存頁簽下確認儲存群組件類型。
已通過kubectl串連叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
確認已有NAS滿足以下條件,否則請重新建立滿足條件的NAS或者使用NAS動態儲存裝置卷。建立操作,請參見建立檔案系統。
協議類型為NFS。極速型NAS僅支援NFSv3。
掛載點和叢集節點在同一VPC內,且狀態為可用。如需添加掛載點,請參見管理掛載點。
說明如需加密NAS儲存卷中的資料,支援建立NAS檔案系統時配置加密類型。
使用限制
不支援掛載SMB協議的NAS檔案系統。
通用NAS與極速NAS在掛載連通性、檔案系統數量及協議類型等方面存在相應約束條件。更多資訊,請參見使用限制。
NAS靜態儲存卷不支援擴容。
注意事項
NAS為共用儲存,一個NAS儲存卷可以掛載到多個Pod上,可能出現多個Pod同時寫入資料的問題,需應用自行確保資料一致性。關於NAS並發寫入的一些限制條件,請參見如何避免多進程或多用戶端並發寫同一記錄檔可能出現的異常?和如何解決向NFS檔案系統中寫入資料延遲問題?
請勿刪除NAS掛載點,否則會造成作業系統無響應。
在使用極速型NAS檔案系統時,配置儲存卷的
path
需要以/share
為父目錄。例如,Pod掛載的NAS檔案系統子目錄可配置為/share/path1
。若您在應用模板中配置了securityContext.fsgroup參數,kubelet在儲存卷掛載完成後會執行
chmod
或chown
操作,導致掛載時間延長。若已配置securityContext.fsgroup參數,且需要減少掛載時間。具體操作,請參見NAS儲存卷掛載時間延長。
步驟一:掛載NAS靜態儲存卷
kubectl
建立靜態PV。
將以下樣本YAML內容儲存為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掛載點,與叢集VPC一致。 path: "/csi" # 掛載子目錄。 mountOptions: - nolock,tcp,noresvport - vers=3
參數
說明
name
PV的名稱。
labels
設定PV的標籤。
storage
NAS的可使用量。
說明NAS儲存卷在實際使用中,不受此storage使用量限制,根據不同NAS使用限制確認NAS儲存卷最終可使用的容量。
accessModes
配置訪問模式,預設為
ReadWriteMany
,也支援ReadWriteOnce
和ReadOnlyMany
。driver
驅動類型。此處必須配置為
nasplugin.csi.alibabacloud.com
,表示使用阿里雲NAS CSI外掛程式。volumeHandle
配置PV的唯一識別碼,必須與PV Name保持一致。若需要同時使用多個PV,則各個PV中該值須唯一。
server
NAS掛載點地址,必須與叢集VPC一致。
說明替換為實際的掛載點地址,如何查看掛載點地址,請參見查看掛載點地址。
path
在容器中掛載NAS儲存卷的子目錄。通用型NAS的父目錄為/。
重要極速型NAS需要以
/share
為父目錄,則此處子目錄應為/share/csi
。mountOptions
掛載NAS的
options
參數在mountOptions
中配置,包括NFS協議版本。掛載NAS儲存卷的NFS協議版本號碼,推薦使用v3,極速類型NAS僅支援v3。關於NFS協議的更多資訊,請參見NFS協議。建立靜態PV。
kubectl create -f pv-nas.yaml
建立NAS儲存聲明PVC,使用selector篩選PV,精確配置PVC和PV的綁定關係。
將以下樣本YAML內容儲存至pvc-nas.yaml檔案。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nas
參數
說明
樣本值
name
PVC名稱。
pvc-nas
accessModes
訪問模式。預設為
ReadWriteMany
,也支援ReadWriteOnce
或ReadOnlyMany
。ReadWriteMany
storage
聲明應用使用NAS儲存卷的容量,不能大於儲存卷的總量。
說明NAS儲存卷在實際使用中,不受此storage使用量限制,根據不同NAS使用限制確認NAS儲存卷最終可使用的容量。
5Gi
matchLabels
輸入PV的標籤,用於關聯PV。
pv-nas
建立靜態PVC。
kubectl create -f pvc-nas.yaml
建立名為nas-static的應用,並掛載PVC。
以下為建立nas-static應用的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
參數
說明
mountPath
NAS在容器中掛載的位置。
claimName
PVC的名稱,用於綁定PVC。
建立名為nas-static的應用,並掛載PVC。
kubectl create -f nas.yaml
查看Pod資訊。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-n**** 1/1 Running 0 32s nas-static-c5bb4746c-4**** 1/1 Running 0 32s
控制台
步驟一:建立PV
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在儲存卷頁面,單擊建立。
在建立儲存卷頁面配置參數,配置完成後,單擊建立。
配置項
說明
樣本值
儲存卷類型
選擇NAS。
NAS
名稱
儲存卷名稱。在叢集內必須唯一。
pv-nas
總量
儲存卷的容量。
說明NAS檔案系統本身不限制使用量。此處不是NAS檔案系統的使用限額,只是所建立儲存卷的容量聲明。
20Gi
訪問模式
支援ReadWriteMany和ReadWriteOnce。預設為ReadWriteMany。
ReadWriteMany
是否使用CNFS
是否使用CNFS功能。開啟後,您需要進行以下操作:
選擇對應的CNFS或建立CNFS。關於CNFS的更多資訊,請參見建立CNFS管理NAS檔案系統(推薦)。
是否開啟CNFS加速功能,關於CNFS加速更多資訊,請參見開啟CNFS NAS計算端分布式緩衝。
開啟
掛載點網域名稱
僅在未開啟CNFS時,需要設定。
您可以通過選擇掛載點或者自訂的方式配置要掛載的NAS檔案系統目錄。關於如何查看掛載點地址,請參見查看掛載點地址。
0c47****-mpk25.cn-shenzhen.nas.aliyuncs.co
進階選項(選填)
掛載路徑:NAS檔案系統中的掛載路徑。以
/
為根目錄,設定後儲存卷將掛載到指定的子目錄。如果NAS根目錄下沒有此子目錄,會預設建立後再進行掛載。
您可以不填此項,預設掛載到NAS根目錄。
極速型NAS需要以
/share
為根目錄,例如/share/data
。
/data
回收策略:預設為Delete,支援Retain。
Delete:需配合
archiveOnDelete
一起使用。當
archiveOnDelete
為true
時,刪除PVC時,PV和NAS檔案只會被重新命名,不會被刪除。當
archiveOnDelete
為false
時,刪除PVC時,PV和NAS檔案會被真正刪除。
Retain:刪除PVC時,PV和NAS檔案不會被刪除,需要您手動刪除。
如果資料安全性要求高,推薦使用Retain,以免誤刪除資料。
Retain
掛載選項:掛載NAS的選擇性參數,包括NFS協議版本等參數。NFS協議版本號碼推薦使用v3,且極速型NAS僅支援v3。關於NFS協議的更多資訊,請參見NFS協議。
v3
標籤
為該儲存卷添加標籤。
pv-nas
建立完成後,在儲存卷頁面可以看到新建立的PV。
步驟二:建立PVC
在叢集管理頁左側導覽列,選擇 。
在儲存聲明頁面,單擊建立。
在建立儲存聲明頁面配置參數。配置完成後,單擊建立。
參數
說明
樣本值
儲存宣告類型
選擇NAS。
NAS
名稱
儲存聲明名稱在叢集內必須唯一。
pvc-nas
分配模式
選擇已有儲存卷。
說明若未建立儲存卷,您可以設定分配模式為建立儲存卷,配置建立儲存卷參數。
選擇已有儲存卷
已有儲存卷
單擊選擇已有儲存卷,在目標儲存卷右側操作列單擊選擇,選擇儲存卷。
已有儲存卷
總量
聲明所需使用的儲存卷的容量。
說明所建立儲存卷聲明的容量不能超過待掛載的儲存卷容量。
20
訪問模式
預設為ReadWriteMany,也可選擇ReadWriteOnce或ReadOnlyMany。
ReadWriteMany
步驟三:建立應用
在叢集管理頁左側導覽列,選擇
。在無狀態頁面,單擊使用鏡像建立。
配置建立應用的參數資訊,配置完成後,單擊建立。
主要參數如下,其他參數保持預設即可。更多資訊,請參見建立無狀態工作負載Deployment。
配置項
參數
說明
樣本
應用基本資料
應用程式名稱
Deployment名稱,自訂輸入。格式要求請參考介面提示。
test-nas
副本數量
Deployment的副本數量。
2
容器配置
鏡像名稱
用於部署應用的鏡像地址。
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
所需資源
所需的vCPU和記憶體資源。
0.25 vCPU,0.5 GiB
資料卷
單擊增加雲端儲存聲明,然後完成參數配置。
掛載源:選擇之前建立的PVC。
容器路徑:輸入NAS檔案系統要掛載到的容器路徑。
掛載源:pvc-nas
容器路徑:/data
查看應用部署狀態。
在無狀態頁面,單擊應用程式名稱。
在容器組頁簽下,確認Pod已正常運行(狀態為Running)。
步驟二:驗證NAS儲存特性
以上建立的工作負載Deployment中包含2個Pod,2個Pod掛載了同一個NAS檔案系統,您可以通過以下方式對NAS儲存卷進行共用儲存和持久化儲存驗證。
重建Pod,然後在建立的Pod中查看NAS檔案系統中的資料是否存在,以此來驗證持久化儲存。
在一個Pod中建立檔案,然後在另一個Pod中查看檔案,以此來驗證共用儲存。
驗證NAS的持久化儲存
查看應用所在的Pod。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-a**** 1/1 Running 0 32s nas-static-c5bb4746c-b**** 1/1 Running 0 32s
在一個Pod中建立檔案。
查看應用中掛載的
/data
路徑下有無檔案。以一個名為
nas-static-5b5cdb85f6-a****
的Pod為例。kubectl exec nas-static-5b5cdb85f6-a**** -- ls /data
無返回結果,說明當前儲存路徑
/data
下無檔案。在該Pod的
/data
路徑下建立檔案nas。kubectl exec nas-static-5b5cdb85f6-a**** -- touch /data/nas
在另一個Pod中查看檔案。
以另一個名為
nas-static-5b5cdb85f6-b****
的Pod為例。kubectl exec nas-static-5b5cdb85f6-b**** -- ls /data
預期輸出:
nas
重建Pod。
刪除Pod。
kubectl delete pod nas-static-5b5cdb85f6-a****
同時在另一個視窗中,查看Pod刪除及Kubernetes重建Pod的過程。
kubectl get pod -w -l app=nginx
驗證刪除Pod後,NAS裡建立的檔案是否還存在。
查看重建的Pod名稱。
kubectl get pod
預期輸出:
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
預期輸出:
nas
nas檔案仍然存在,表明NAS的資料可持久化儲存。
驗證NAS的共用儲存
查看應用所在的Pod。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-n**** 1/1 Running 0 32s nas-static-c5bb4746c-4**** 1/1 Running 0 32s
查看兩個Pod的
/data
路徑下的檔案。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data kubectl exec nas-static-c5bb4746c-4**** -- ls /data
無返回結果,說明當前儲存路徑
/data
下無檔案。在任意一個Pod 的
/data
路徑下建立檔案nas。以名為
nas-static-5b5cdb85f6-n****
的Pod為例。kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas
查看兩個Pod的
/data
路徑下的檔案。查看其中一個名為
nas-static-5b5cdb85f6-n****
的Pod 的/data
路徑下的檔案。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data
預期輸出:
nas
查看另一個名為
nas-static-c5bb4746c-4****
的Pod 的/data
路徑下的檔案。kubectl exec nas-static-c5bb4746c-4**** -- ls /data
預期輸出:
nas
如果在任意一個Pod的
/data
下建立的檔案,在兩個Pod的/data
路徑下均存在此檔案,表明兩個Pod共用一個NAS。
相關文檔
如需通過TLS掛載,請參見如何通過CSI使用TLS掛載NAS檔案系統?
使用NAS儲存卷時,如遇到許可權無法訪問的問題,請參見使用NAS儲存卷時,提示chown: Operation not permitted解決。
為確保不同使用者和使用者組之間資料的安全性,您可以參考常見問題解決。
如果您在使用NAS過程中遇到讀寫訪問的問題,可參見讀寫訪問檔案類問題進行排查。
您可以使用NAS動態儲存裝置卷根據需求動態調整儲存卷大小。
您可以使用通用型NAS的目錄配額功能,實現對NAS儲存卷空間的有效控制。請參見擴容NAS儲存卷容量。
您可以直接使用NAS儲存卷,也可以使用CNFS管理NAS儲存卷來提升NAS的效能和QoS控制。