NAS儲存卷是一種可共用訪問、彈性擴充、高可靠以及高效能的Distributed File System。本文介紹如何使用阿里雲NAS靜態儲存卷,以及如何?持久化儲存與共用儲存。
前提條件
已建立ACK Serverless叢集。具體操作,請參見建立ACK Serverless叢集。
已建立NAS檔案系統。具體操作,請參見建立檔案系統。
若需要加密NAS儲存卷中的資料,建立NAS檔案系統時請配置加密類型。
已建立NAS掛載點。具體操作,請參見管理掛載點。
NAS掛載點需要和叢集節點在同一個VPC內。
已通過kubectl工具串連叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
使用情境
對磁碟I/O要求較高的應用。
可實現跨主機檔案分享權限設定,例如可作為檔案伺服器。
注意事項
在使用極速NAS檔案系統時,配置儲存卷的
path需要以/share為父目錄。例如,Pod掛載的NAS檔案系統子目錄可配置為/share/path1。NAS支援同時被多個Pod掛載,此時多個Pod可能同時修改相同資料,需要應用自行實現資料的同步。
說明NAS儲存的/目錄不支援修改許可權、屬主和屬組。
若您在應用模板中配置了securityContext.fsgroup參數,Kubelet在儲存卷掛載完成後會執行
chmod或chown操作,導致掛載時間延長。說明若已配置securityContext.fsgroup參數,且需要減少掛載時間。具體操作,請參見NAS儲存卷掛載時間延長。
通過控制台的方式使用NAS靜態儲存卷
步驟一:建立PV
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情。
在叢集管理頁左側導覽列,選擇。
在儲存卷頁面單擊右上方的建立。
在建立儲存卷對話方塊中配置參數。
參數
說明
儲存卷類型
本文中選擇為NAS。
名稱
建立的儲存卷的名稱。儲存卷名在叢集內必須唯一。本例為pv-nas。
總量
所建立儲存卷的容量。注意NAS檔案系統本身不限制使用量。此處不是NAS檔案系統的使用限額,只是所建立儲存卷的容量聲明。
訪問模式
選擇ReadWriteMany和ReadWriteOnce。預設為ReadWriteMany。
掛載點網域名稱
您可以通過選擇掛載點或者自訂的方式定義叢集在NAS檔案系統中掛載點的掛載地址。
進階選項(選填)
掛載路徑
要掛載的NAS子目錄。
如果未設定,則預設掛載到根目錄。
如果NAS中沒有該目錄,會自動建立後再進行掛載。
說明通用型NAS的根目錄為
/,極速型NAS的根目錄為/share。掛載極速型NAS的子目錄時,path必須以/share開頭,如/share/data。回收策略
預設為Retain。表示刪除PVC時,PV和NAS檔案不會被刪除,需要您手動刪除。
掛載選項
NAS的掛載參數,包括NFS協議版本等。推薦使用NFS v3協議,極速型NAS僅支援NFS v3。關於NFS協議的更多資訊,請參見NFS協議。
標籤
為該儲存卷添加標籤。
參數配置完成後,單擊建立。
步驟二:建立PVC
在叢集管理頁左側導覽列,選擇。
在儲存聲明頁面,單擊右上方的建立。
在彈出的建立儲存聲明對話方塊中,填寫介面參數。
參數
說明
儲存宣告類型
本文中選擇NAS。
名稱
建立的儲存聲明名稱在叢集內必須唯一。
分配模式
選擇已有儲存卷。
說明若未建立儲存卷,您可以設定分配模式為建立儲存卷,配置建立儲存卷參數。更多資訊,請參見建立PV。
已有儲存卷
單擊選擇已有儲存卷,在目標儲存卷右側操作列單擊選擇,選擇儲存卷。
總量
所建立儲存卷的容量。
說明所建立儲存卷聲明的容量不能超過待掛載的儲存卷容量。
單擊建立。
建立成功後可以在列表中看到建立的儲存聲明,並且已綁定相應的儲存卷。
步驟三:建立應用
在叢集管理頁左側導覽列,選擇。
在無狀態頁面,單擊使用鏡像建立。
配置建立應用的參數資訊,配置完成後,單擊建立。
主要參數如下,其他參數保持預設即可。更多資訊,請參見建立無狀態工作負載Deployment。
配置項
參數
說明
樣本
應用基本資料
應用程式名稱
Deployment名稱,自訂輸入。格式要求請參考介面提示。
nas-test
副本數量
Deployment的副本數量。
2
容器配置
鏡像名稱
用於部署應用的鏡像地址。
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
所需資源
所需的vCPU和記憶體資源。
0.25 Core,512 MiB
資料卷
單擊增加雲端儲存聲明,然後完成參數配置。
掛載源:選擇之前建立的PVC。
容器路徑:輸入NAS檔案系統要掛載到的容器路徑。
掛載源:pvc-nas
容器路徑:/data
查看應用部署狀態。
在無狀態頁面,單擊應用程式名稱。
在容器組頁簽下,確認Pod已正常運行(狀態為Running)。
通過kubectl命令列方式使用NAS靜態儲存卷
執行以下命令建立靜態PV。
kubectl create -f pv-nas.yaml以下為建立靜態卷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參數
說明
name
PV的名稱。
labels
設定PV的標籤。
storage
NAS的可使用量。
accessModes
配置訪問模式。
driver
驅動類型。本例中取值為
nasplugin.csi.alibabacloud.com,表示使用阿里雲NAS CSI外掛程式。volumeHandle
配置PV的唯一識別碼。若需要同時使用多個PV,則各個PV中該值必須不一致。
server
NAS掛載點。
path
掛載子目錄,極速NAS需要以/share為父目錄。
vers
掛載NAS儲存卷的NFS協議版本號碼,推薦使用v3,極速類型NAS只支援v3。
執行以下命令建立靜態PVC。
建立NAS儲存聲明PVC,使用
selector篩選PV,精確配置PVC和PV的綁定關係。kubectl create -f pvc-nas.yaml以下為建立靜態卷PVC的YAML樣本檔案。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nas參數
說明
name
PVC的名稱。
accessModes
配置訪問模式。
storage
聲明應用使用量,不能大於儲存卷的總量。
matchLabels
輸入PV的標籤,用於關聯PV。
執行以下命令建立名為nas-static的應用,並掛載PVC。
kubectl create -f nas.yaml以下為建立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: 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參數
說明
mountPath
NAS在容器中掛載的位置。
claimName
PVC的名稱,用於綁定PVC。
執行以下命令,查看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
驗證NAS的持久化儲存
查看部署應用和NAS檔案。
執行以下命令,查看部署的應用程式名稱。
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執行以下命令,查看任意一個應用的/data路徑下的檔案,本文以名為
nas-static-5b5cdb85f6-n****的Pod為例。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data無返回結果,說明/data路徑下無檔案。
執行以下命令,在名為
nas-static-5b5cdb85f6-n****Pod的/data路徑下建立檔案nas。kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas執行以下命令,查看名為
nas-static-5b5cdb85f6-n****Pod的/data路徑下的檔案。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data預期輸出:
nas執行以下命令,刪除Pod。
kubectl delete pod nas-static-5b5cdb85f6-n****同時在另一個視窗中,執行以下命令,查看Pod刪除及Kubernetes重建Pod的過程。
kubectl get pod -w -l app=nginx驗證刪除Pod後,NAS裡建立的檔案是否還存在。
執行以下命令,查看Kubernetes重建的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執行以下命令,查看名為
nas-static-5b5cdb85f6-n****的Pod在/data路徑下的檔案。kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data預期輸出:
nasnas檔案仍然存在,說明NAS的資料可持久化儲存。
驗證NAS的共用儲存
查看部署的應用所在的Pod和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執行以下命令,查看2個Pod /data路徑下的檔案。
kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data kubectl exec nas-static-c5bb4746c-4**** -- ls /data
執行以下命令,在任意一個Pod的/data路徑下建立檔案nas。
kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas執行以下命令,查看2個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。