對於共用資料,I/O要求較高的應用情境,可以使用NAS檔案系統作為持久化儲存卷。本文介紹如何為應用掛載NAS儲存卷,並驗證NAS的共用儲存和持久化儲存。
背景資訊
NAS是一種可共用訪問、彈性擴充、高可靠以及高效能的Distributed File System,適用於共用資料,以及I/O要求較高的應用情境。更多資訊,請參見儲存概述。
根據是否已有NAS檔案系統,可選擇以下方式掛載使用NAS儲存卷:
如果已有可用的NAS檔案系統,可直接掛載,共用使用。具體操作,請參見使用已有NAS檔案系統作為儲存卷。
如果沒有可用的NAS檔案系統,可通過StorageClass自動建立,並掛載使用。具體操作,請參見建立NAS檔案系統作為儲存卷。
前提條件
ACS叢集中已安裝csi-provisioner組件。
您可以在ACS叢集管理頁的左側導覽列單擊組件管理,然後在儲存頁簽下確認csi-provisioner組件的安裝情況。
使用限制
不支援掛載SMB協議的NAS檔案系統。
NAS檔案系統只能掛載到相同VPC的Pod上,不支援跨VPC掛載。
說明同一VPC下,NAS可以跨可用性區域掛載。
僅支援通過NFSv3協議掛載NAS檔案系統。
注意事項
NAS為共用儲存,一個NAS儲存卷可以掛載到多個Pod上。此時多個Pod可能同時修改相同資料,需要應用自行實現資料的同步。
掛載NAS時,請勿在應用的YAML中配置
securityContext.fsgroup,這可能會造成掛載失敗。說明NAS檔案系統的
/目錄不支援修改許可權、屬主和屬組。掛載NAS後,請勿刪除掛載點,否則會造成作業系統無響應。
使用已有NAS檔案系統作為儲存卷
步驟一:擷取NAS檔案系統資訊
擷取ACS Pod使用的VPC和交換器ID。
說明以下步驟為控制台操作,也可以執行
kubectl get cm -n kube-system acs-profile -o yaml命令查看acs-profile的YAML,在vpcId和vSwitchIds中擷取Pod使用的VPC ID和交換器ID。登入容器計算服務控制台。
在叢集列表頁面,單擊目的地組群名稱,進入該叢集的管理頁面。
在左側導覽列,選擇。
在配置項頁面上方將命名空間改為kube-system,然後找到acs-profile,單擊YAML 編輯。
在
vpcId和vSwitchIds中擷取Pod使用的VPC ID和交換器ID。
確認已有的NAS檔案系統滿足要求,並擷取掛載點地址。
登入NAS檔案系統控制台,在左側導覽列,單擊檔案系統列表。
找到目標NAS檔案系統,確認地區、可用性區域和協議類型滿足要求。
NAS不支援跨VPC掛載,即不支援跨地區使用。請確保已有NAS的所屬地區與ACS一致。
同一VPC下,NAS可以跨可用性區域掛載,但建議和ACS叢集中Pod使用的可用性區域一致,效能相對更優。
確認NAS檔案系統的協議類型為NFS。目前不支援掛載SMB協議的NAS檔案系統。

確認掛載點滿足要求,並擷取掛載點地址。
單擊檔案系統ID。
在檔案系統詳情頁左側導覽列,單擊掛載使用。
在掛載點地區,確認已有掛載點滿足要求,然後擷取掛載點地址。
說明通用型NAS在建立檔案系統時會自動建立一個掛載點,極速型NAS需要手動建立掛載點。
如果已有掛載點不滿足要求,可建立新的掛載點。具體操作,請參見管理掛載點。
掛載點的VPC必須和ACS叢集中Pod使用的VPC一致,否則會導致掛載失敗。
掛載點的交換器建議和ACS叢集中Pod使用的交換器一致,效能相對更優。
掛載點的狀態為可用。

步驟二:建立PVC
kubectl
將以下YAML內容儲存為nas-pvc.yaml。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-pvc annotations: csi.alibabacloud.com/mountpoint: *******-mw***.cn-shanghai.nas.aliyuncs.com csi.alibabacloud.com/mount-options: nolock,tcp,noresvport spec: accessModes: - ReadWriteMany resources: requests: storage: 20Gi storageClassName: alibaba-cloud-nas相關參數說明如下:
重要根據上述YAML建立PVC時,系統會根據
annotations中關於NAS的配置先建立靜態PV,然後再建立PVC,關聯該PV。參數
說明
csi.alibabacloud.com/mountpoint要掛載的NAS檔案系統目錄。用於關聯之前建立的NAS檔案系統。
如果輸入掛載點地址,例如
****-****.<region>.nas.aliyuncs.com,則表示掛載的目錄為NAS檔案系統的根目錄(/)。如果輸入掛載點地址和子目錄,例如
****-****.<region>.nas.aliyuncs.com:/dir,則表示掛載的目錄為NAS檔案系統的/dir目錄。如果/dir目錄不存在,系統會自動建立。
csi.alibabacloud.com/mount-options掛載參數。建議使用
nolock,tcp,noresvport。accessModes訪問模式。
storage分配給Pod的儲存容量,即要建立的NAS儲存卷容量。
建立PVC。
kubectl create -f nas-pvc.yaml查看PV。
kubectl get pv預期返回如下,在建立PVC時已基於傳入的NAS檔案系統掛載點等資訊,自動建立對應的PV。
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE nas-ea7a0b6a-bec2-4e56-b767-47222d3a**** 20Gi RWX Retain Bound default/nas-pvc alibaba-cloud-nas 1m58s查看PVC。
kubectl get pvc預期返回如下,PVC已關聯自動建立的PV。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE nas-pvc Bound nas-ea7a0b6a-bec2-4e56-b767-47222d3a**** 20Gi RWX alibaba-cloud-nas <unset> 2m14s
控制台
登入容器計算服務控制台。
在叢集列表頁面,單擊目的地組群名稱,進入該叢集的管理頁面。
在叢集管理頁面的左側導覽列,選擇。
在儲存聲明頁面,單擊建立。
在彈出的對話方塊中,完成參數配置,然後單擊建立。
參數
說明
樣本
儲存宣告類型
選擇NAS。
NAS
名稱
PVC名稱,自訂輸入。格式要求請參考介面提示。
nas-pvc
分配模式
選擇使用掛載點網域名稱建立。
使用掛載點網域名稱建立
儲存驅動
預設已選擇CSI。
CSI
總量
分配給Pod的儲存容量,即要建立的NAS儲存卷容量。
20Gi
訪問模式
支援ReadWriteMany和ReadWriteOnce。
ReadWriteMany
掛載點網域名稱
配置要掛載的NAS檔案系統目錄。
如果輸入掛載點地址,例如
****-****.<region>.nas.aliyuncs.com,則表示掛載的目錄為NAS檔案系統的根目錄(/)。如果輸入掛載點地址和子目錄,例如
****-****.<region>.nas.aliyuncs.com:/dir,則表示掛載的目錄為NAS檔案系統的/dir目錄。如果/dir目錄不存在,系統會自動建立。
350514****-mw***.cn-shanghai.nas.aliyuncs.com
建立完成後,在儲存聲明頁面可以看到新建立的PVC,該PVC已綁定自動建立的PV(即NAS儲存卷)。可在儲存卷頁面查看對應PV的詳細資料。


步驟三:建立應用並掛載NAS
kubectll
使用以下YAML內容,建立nas-test.yaml檔案。
以下YAML樣本可以建立包含2個Pod的Deployment,2個Pod均通過名為
nas-pvc的PVC申請儲存資源,掛載路徑均為/data。apiVersion: apps/v1 kind: Deployment metadata: name: nas-test 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: nas-pvc建立Deployment並掛載NAS。
kubectl create -f nas-test.yaml查看Deployment中Pod的部署情況。
kubectl get pod | grep nas-test返回樣本如下,已建立2個Pod。
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s查看掛載路徑。
kubectl exec nas-test-****-***a -- df -h /data預期輸出:
Filesystem Size Used Avail Use% Mounted on 350514*****-mw***.cn-shanghai.nas.aliyuncs.com:/ 10P 0 10P 0% /data如果輸出類似資訊,則表示掛載檔案系統成功。
控制台
在叢集管理頁面的左側導覽列,選擇。
在無狀態頁面,單擊使用鏡像建立。
完成Deployment的參數配置,單擊建立。
需要注意的參數如下,其他參數保持預設即可。更多資訊,請參見建立無狀態工作負載Deployment。
配置頁
參數
說明
樣本
應用基本資料
應用程式名稱
Deployment名稱,自訂輸入。格式要求請參考介面提示。
nas-test
副本數量
配置Deployment的副本數量。
2
容器配置
鏡像名稱
輸入用於部署應用的鏡像地址。
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
所需資源
設定所需的vCPU和記憶體資源。
0.25 vCPU,0.5 GiB
資料卷
單擊增加雲端儲存聲明,然後完成參數配置。
掛載源:選擇之前建立的PVC。
容器路徑:輸入NAS檔案系統要掛載到的容器路徑。
掛載源:nas-pvc
容器路徑:/data
查看應用部署情況。
在無狀態頁面,單擊應用程式名稱。
在容器組頁簽下,確認Pod已正常運行(狀態為Running)。
建立NAS檔案系統作為儲存卷
步驟一:建立StorageClass
參考參數說明表修改以下YAML內容,並儲存為nas-sc.yaml。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-fs mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: filesystem fileSystemType: standard storageType: Performance regionId: cn-shanghai zoneId: cn-shanghai-e vpcId: "vpc-2ze2fxn6popm8c2mzm****" vSwitchId: "vsw-2zwdg25a2b4y5juy****" accessGroupName: DEFAULT_VPC_GROUP_NAME deleteVolume: "false" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain相關參數說明如下:
重要不同類型和儲存規格的NAS檔案系統支援的地區、可用性區域不同。請根據業務的儲存需求、ACS叢集所屬地區和ACS叢集中Pod使用的VPC和交換器資訊等確定需要在哪個地區、可用性區域,以及哪個VPC、交換器下建立什麼類型的NAS檔案系統和掛載點。相關參考如下:
參數
說明
volumeAs目前僅支援
filesystem,表示會自動建立一個NAS檔案系統,即一個NAS儲存卷對應一個NAS檔案系統。fileSystemTypeNAS檔案系統的類型。
storageTypeNAS檔案系統的儲存規格。
對於通用型NAS,可選值如下:
Performance(預設):效能型Capacity:容量型
對於極速型NAS,可選值如下:
standard(預設):標準型advanced:進階型
regionIdNAS檔案系統所屬地區。需與ACS叢集所屬地區保持一致。
zoneIdNAS檔案系統所屬可用性區域。請根據ACS叢集中Pod所使用的交換器,選擇對應的可用性區域。
說明同一VPC下,NAS可以跨可用性區域掛載。建議選擇同一可用性區域,效能相對更優。
vpcId、vSwitchIdNAS檔案系統掛載點所屬的VPC ID和交換器ID。需配置為ACS叢集中Pod使用的VPC ID和交換器ID。
accessGroupNameNAS檔案系統掛載點的許可權組。預設為
DEFAULT_VPC_GROUP_NAME。provisioner驅動類型。必須配置為
nasplugin.csi.alibabacloud.com,表示使用阿里雲NAS CSI外掛程式。reclaimPolicyPV的回收策略。目前僅支援
Retain,表示刪除PV時,會保留對應的NAS檔案系統和掛載點。建立StorageClass。
kubectl create -f nas-sc.yaml查看StorageClass。
kubectl get sc預期返回:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE alicloud-nas-fs nasplugin.csi.alibabacloud.com Retain Immediate false 13m ......
步驟二:建立PVC
將以下YAML內容儲存為nas-pvc-fs.yaml。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-pvc-fs spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-fs resources: requests: storage: 20Gi相關參數說明如下:
參數
說明
accessModes訪問模式。
storage分配給Pod的儲存容量,即要建立的NAS儲存卷容量。
說明由於極速型NAS有100 GiB的最小容量限制,如果StorageClass中定義的NAS檔案系統類型為極速型NAS,此處
storage的值必須≥100 GiB,否則無法建立對應的PV。storageClassName要綁定的StorageClass名稱。
建立PVC。
kubectl create -f nas-pvc-fs.yaml查看PVC。
kubectl get pvc返回樣本如下,PVC已關聯自動建立的PV。可前往NAS檔案系統控制台查看對應的NAS檔案系統。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE nas-pvc-fs Bound nas-04a730ba-010d-4fb1-9043-476d8c38**** 20Gi RWX alicloud-nas-fs <unset> 14s
步驟三:建立應用並掛載NAS
使用以下YAML內容,建立nas-test-fs.yaml檔案。
以下YAML樣本可以建立包含2個Pod的Deployment,2個Pod均通過名為
nas-pvc-fs的PVC申請儲存資源,掛載路徑均為/data。apiVersion: apps/v1 kind: Deployment metadata: name: nas-test 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: nas-pvc-fs建立Deployment並掛載NAS。
kubectl create -f nas-test-fs.yaml查看Deployment中Pod的部署情況。
kubectl get pod | grep nas-test返回樣本如下,已建立2個Pod。
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s查看掛載路徑。
kubectl exec nas-test-****-***a -- df -h /data預期輸出:
Filesystem Size Used Avail Use% Mounted on 350514*****-mw***.cn-shanghai.nas.aliyuncs.com:/ 10P 0 10P 0% /data如果輸出類似資訊,則表示掛載檔案系統成功。
通過NFS Volume方式掛載已有NAS檔案系統
步驟一:擷取NAS檔案系統資訊
請參考擷取NAS檔案系統資訊,擷取NAS掛載點地址。
步驟二:建立應用並掛載NAS
使用以下YAML內容,建立
nas-test-nfs.yaml檔案。以下YAML樣本可以建立包含2個Pod的Deployment,2個Pod均通過名為
nfs-nas的volume將NAS檔案系統掛載至/data路徑。apiVersion: apps/v1 kind: Deployment metadata: name: nas-test 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: nfs-nas mountPath: /data volumes: - name: nfs-nas nfs: server: file-system-id.region.nas.aliyuncs.com # 阿里雲NAS檔案系統掛載點地址,請根據實際值替換。例如,7bexxxxxx-xxxx.ap-southeast-1.nas.aliyuncs.com。 path: / # NAS檔案系統目錄路徑。該目錄必須為已經存在的目錄或根目錄。通用型NAS的根目錄為“/”,極速型NAS的根目錄為“/share”。建立Deployment並掛載NAS。
kubectl create -f nas-test-nfs.yaml查看Deployment中Pod的部署情況。
kubectl get pod | grep nas-test返回樣本如下,已建立2個Pod。
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s查看掛載路徑。
kubectl exec nas-test-****-***a -- df -h /data預期輸出:
Filesystem Size Used Avail Use% Mounted on 350514*****-mw***.cn-shanghai.nas.aliyuncs.com:/ 10P 0 10P 0% /data如果輸出類似資訊,則表示掛載檔案系統成功。
驗證NAS的共用儲存和持久化儲存
按照上文樣本建立的Deployment中含有2個Pod,2個Pod掛載了同一NAS檔案系統。可通過以下方式進行驗證:
在一個Pod中建立檔案,然後另一個Pod中查看檔案,以此來驗證共用儲存。
重建Deployment,然後在新建立的Pod中查看檔案系統中的資料是否存在,以此來驗證持久化儲存。
查看Pod資訊。
kubectl get pod | grep nas-test返回樣本如下:
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s驗證共用儲存。
在一個Pod中建立檔案。
以名為
nas-test-****-***a的Pod作為樣本:kubectl exec nas-test-****-***a -- touch /data/test.txt在另一個Pod中查看檔案。
以名為
nas-test-****-***b的Pod作為樣本:kubectl exec nas-test-****-***b -- ls /data預期返回如下,可以看到已共用建立的檔案
test.txt。test.txt
驗證持久化儲存。
重建Deployment。
kubectl rollout restart deploy nas-test查看Pod,等待新Pod建立成功。
kubectl get pod | grep nas-test返回樣本如下:
nas-test-****-***c 1/1 Running 0 67s nas-test-****-***d 1/1 Running 0 49s在新Pod中查看檔案系統中的資料是否存在。
以名為
nas-test-c***的Pod作為樣本:kubectl exec nas-test-****-***c -- ls /data預期返回如下,可以看到NAS檔案系統中的資料依然存在,在新Pod的掛載目錄下可以重新擷取。
test.txt