對於共用資料,I/O要求較高的應用情境,可以使用NAS作為持久化儲存卷。本文介紹如何為應用靜態掛載NAS儲存卷,並驗證NAS的共用儲存和持久化儲存。
背景資訊
NAS是一種可共用訪問、彈性擴充、高可靠以及高效能的Distributed File System,適用於共用資料,以及I/O要求較高的應用情境。更多資訊,請參見儲存概述。
ACS支援靜態和動態掛載NAS儲存卷。本文介紹靜態掛載方式,動態掛載方式請參見動態掛載NAS儲存卷。
前提條件
ACS叢集中已安裝managed-csiprovisioner組件。
您可以在ACS叢集管理頁的左側導覽列選擇
,在儲存頁簽下查看managed-csiprovisioner組件的安裝情況。使用限制
不支援掛載SMB協議的NAS檔案系統。
NAS檔案系統只能掛載到相同VPC的Pod上,不支援跨VPC掛載。
僅支援通過NFSv3協議掛載NAS檔案系統。
注意事項
NAS為共用儲存,一個NAS儲存卷可以掛載到多個Pod上。此時多個Pod可能同時修改相同資料,需要應用自行實現資料的同步。
掛載NAS時,請勿在應用的YAML中配置
securityContext.fsgroup
,這可能會造成掛載失敗。說明NAS檔案系統的
/
目錄不支援修改許可權、屬主和屬組。掛載NAS後,請勿刪除掛載點,否則會造成作業系統無響應。
建立NAS檔案系統和掛載點
NAS掛載點所屬VPC必須與ACS叢集中Pod所屬VPC一致,否則會導致掛載失敗。如果在Pod使用的VPC和交換器下,您已有NAS檔案系統和掛載點,可跳過該步驟。
擷取Pod使用的VPC和交換器ID。
說明以下步驟為控制台操作,您也可以執行
kubectl get cm -n kube-system acs-profile -o yaml
命令查看acs-profile的YAML,在vpcId
和vSwitchIds
中擷取Pod使用的VPC ID和交換器ID。登入容器計算服務控制台。
在叢集頁面,單擊目的地組群ID,進入該叢集的管理頁面。
在左側導覽列,選擇
。在配置項頁面上方將命名空間改為kube-system,然後找到acs-profile,單擊YAML 編輯。
在
vpcId
和vSwitchIds
中擷取Pod使用的VPC ID和交換器ID。
建立NAS檔案系統和掛載點。
登入NAS檔案系統控制台。
建立檔案系統。
在檔案系統列表頁面,單擊建立檔案系統,然後選擇建立通用型NAS或建立極速型NAS。
在彈出面板完成NAS相關參數配置,然後單擊立即購買,並完成後續操作。
本文以通用型NAS為例,需要注意的參數如下,更多資訊,請參見建立檔案系統。
參數
說明
地區
與ACS叢集一致。
可用性區域
根據步驟1所擷取的Pod使用的交換器ID,選擇對應的可用性區域。
協議類型
選擇NFS。目前不支援掛載SMB協議的NAS檔案系統。
Virtual Private Cloud、虛擬交換器
選擇ACS叢集中Pod使用的VPC和交換器。可根據步驟1所擷取的VPC ID和交換器ID在專用網路控制台查詢。
查看掛載點,並擷取掛載點地址。
說明通用型NAS在建立檔案系統時會自動建立一個掛載點,極速型NAS需要手動建立掛載點。具體操作,請參見管理掛載點。
在檔案系統列表頁面,單擊檔案系統ID。
在檔案系統詳情頁左側導覽列,單擊掛載使用。
在掛載點地區,確認已有掛載點,且掛載點的狀態為可用。
靜態掛載NAS儲存卷
通過kubectl命令
步驟一:建立PVC
串連叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集或在CloudShell上通過kubectl管理Kubernetes叢集。
將以下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
相關參數說明如下:
參數
說明
csi.alibabacloud.com/mountpoint
要掛載的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
使用以下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
查看掛載路徑。
命令樣本如下,預期會返回NAS檔案系統掛載目錄下的資料。預設為空白。
kubectl exec nas-test-****-***a -- ls /data
通過控制台
步驟一:建立PVC
登入容器計算服務控制台。
在叢集頁面,單擊目的地組群ID,進入該叢集的管理頁面。
在叢集管理頁面的左側導覽列,選擇
。在儲存聲明頁面,單擊建立。
在彈出的對話方塊中,完成參數配置,然後單擊建立。
參數
說明
樣本
儲存宣告類型
選擇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
在叢集管理頁面的左側導覽列,選擇
。在無狀態頁面,單擊使用鏡像建立。
完成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的共用儲存和持久化儲存
按照上文樣本建立的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