NAS提供了共用儲存和持久化儲存的服務,滿足您需要多個Pod共用資料的應用情境。本文介紹如何使用NAS實現共用儲存和持久化儲存。
前提條件
已在檔案儲存體控制台建立一個檔案系統,請參見掛載NFS協議檔案系統。建立的檔案系統需要與您的Kubernetes叢集在同一可用性區域。
已在建立好的檔案系統中添加Container ServiceKubernetes叢集的掛載點,請參見管理掛載點。檔案系統掛載時的VPC網路要與您Kubernetes叢集所在的VPC網路保持一致。
背景資訊
NAS支援同時被多個Pod掛載,此時多個Pod可能同時修改相同資料,需要應用自行實現資料的同步。
具狀態服務-NAS的使用情境:
對磁碟I/O要求較高的應用。
讀寫效能相對於Object Storage Service更高。
可實現跨主機檔案分享權限設定,例如可作為檔案伺服器。
具狀態服務-NAS的使用方式:
手動建立檔案系統,並添加掛載點。
手動建立PV及PVC。
本文介紹如何利用阿里雲提供的flexvolume外掛程式,通過PV或PVC的方式使用阿里雲NAS。
建立PV
建立pv-nas.yaml檔案。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas labels: alicloud-pvname: pv-nas spec: capacity: storage: 5Gi accessModes: - ReadWriteMany flexVolume: driver: "alicloud/nas" options: server: "***-**.cn-hangzhou.nas.aliyuncs.com" # 請替換為您實際的掛載點。 path: "/k8s1" vers: "4.0"參數
描述
alicloud-pvnamePV的名稱。
serverNAS的掛載點可在檔案儲存體控制台,單擊左側導覽列的檔案系統列表,選擇目標檔案系統,單擊操作列中的列管理,在管理頁面單擊左側掛載使用,在掛載點地區,掛載地址即為NAS資料盤的掛載點。
pathNAS的掛載目錄,支援掛載NAS的子目錄,當子目錄不存在時,會在NAS上自動建立子目錄並掛載。
vers(可選)NFS掛載協議的版本號碼,支援3和4.0,預設情況是3。
mode(可選)掛載目錄的存取權限,預設情況是不配置。
說明掛載NAS的根目錄無法配置存取權限。
當NAS中資料量很大時,配置
mode會導致掛載非常慢,甚至掛載失敗,不建議配置。
執行以下命令,建立PV。
kubectl create -f pv-nas.yaml
預期結果:
在控制台左側導覽列中,單擊叢集。
在叢集列表頁面中,單擊目的地組群名稱或者目的地組群右側操作列下的詳情。
在叢集管理頁左側導覽列中,選擇,可以看到剛剛建立的PV。

建立PVC
建立NAS儲存聲明PVC,使用selector篩選PV,精確配置PVC和PV的綁定關係。
建立pvc-nas.yaml檔案。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nas執行以下命令,建立PVC。
kubectl create -f pvc-nas.yaml
預期結果:
在控制台左側導覽列中,單擊叢集。
在叢集列表頁面中,單擊目的地組群名稱或者目的地組群右側操作列下的詳情。
在叢集管理頁左側導覽列中,選擇,可以看到剛剛建立的PVC。

建立應用
建立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: nginx ports: - containerPort: 80 volumeMounts: - name: pvc-nas mountPath: "/data" volumes: - name: pvc-nas persistentVolumeClaim: claimName: pvc-nas執行以下命令,建立Deployment。
kubectl create -f nas.yaml
預期結果:
在控制台左側導覽列中,單擊叢集。
在叢集列表頁面中,單擊目的地組群名稱或者目的地組群右側操作列下的應用管理。
在目標叢集頁面下,選擇左側導覽列的,可以看到剛剛建立的Deployment。

NAS的共用儲存
執行以下命令,查看部署的Deployment所在Pod的名稱。
kubectl get pod預期輸出:
NAME READY STATUS RESTARTS AGE nas-static-f96b6b5d7-r**** 1/1 Running 0 9m nas-static-f96b6b5d7-w**** 1/1 Running 0 9m執行以下命令,查看/data路徑下的檔案。
kubectl exec nas-static-f96b6b5d7-r**** -- ls /data預期輸出:
kubectl exec nas-static-f96b6b5d7-w**** -- ls /data說明/data路徑下為空白,沒有檔案。
執行以下命令,在任意一個Pod的/data路徑下建立檔案nas。
kubectl exec nas-static-f96b6b5d7-r**** -- touch /data/nas查看Pod下的檔案。
執行以下命令,查看Pod的/data路徑下的檔案。
kubectl exec nas-static-f96b6b5d7-r**** -- ls /data預期輸出:
nas執行以下命令,查看另一個Pod的/data路徑下的檔案。
kubectl exec nas-static-f96b6b5d7-w**** -- ls /data預期輸出:
nas說明在任意一個Pod的/data下建立的檔案,兩個Pod的/data路徑下均存在此檔案,說明兩個Pod共用一個NAS。
NAS的持久化儲存
執行以下命令,刪除該應用的所有Pod。
kubectl delete pod nas-static-f96b6b5d7-r**** nas-static-f96b6b5d7-wthmb預期輸出:
pod "nas-static-f96b6b5d7-r****" deleted pod "nas-static-f96b6b5d7-w****" deleted執行以下命令,查看Pod刪除及Kubernetes重建Pod的過程。
kubectl get pod -w -l app=nginx預期輸出:
NAME READY STATUS RESTARTS AGE nas-static-f96b6b5d7-r**** 1/1 Running 0 27m nas-static-f96b6b5d7-w**** 1/1 Running 0 27m nas-static-f96b6b5d7-r**** 1/1 Terminating 0 28m nas-static-f96b6b5d7-w**** 0/1 Pending 0 0s nas-static-f96b6b5d7-w**** 0/1 Pending 0 0s nas-static-f96b6b5d7-w**** 0/1 ContainerCreating 0 0s nas-static-f96b6b5d7-w**** 1/1 Terminating 0 28m nas-static-f96b6b5d7-n**** 0/1 Pending 0 0s nas-static-f96b6b5d7-n**** 0/1 Pending 0 0s nas-static-f96b6b5d7-n**** 0/1 ContainerCreating 0 0s nas-static-f96b6b5d7-r**** 0/1 Terminating 0 28m nas-static-f96b6b5d7-w**** 0/1 Terminating 0 28m nas-static-f96b6b5d7-r**** 0/1 Terminating 0 28m nas-static-f96b6b5d7-r**** 0/1 Terminating 0 28m nas-static-f96b6b5d7-w**** 1/1 Running 0 10s nas-static-f96b6b5d7-w**** 0/1 Terminating 0 28m nas-static-f96b6b5d7-w**** 0/1 Terminating 0 28m nas-static-f96b6b5d7-n**** 1/1 Running 0 17s執行以下命令,查看Kubernetes重建的Pod名稱。
kubectl get pod預期輸出:
NAME READY STATUS RESTARTS AGE nas-static-f96b6b5d7-n**** 1/1 Running 0 21s nas-static-f96b6b5d7-w**** 1/1 Running 0 21s查看Pod下的檔案。
執行以下命令,查看Pod的/data路徑下的檔案。
kubectl exec nas-static-f96b6b5d7-n**** -- ls /data預期輸出:
nas執行以下命令,查看另一個Pod的/data路徑下的檔案。
kubectl exec nas-static-f96b6b5d7-w**** -- ls /data預期輸出:
nas說明剛剛建立的檔案nas並沒有被刪除,說明NAS的資料可持久儲存。