對于共享數(shù)據(jù),I/O要求較高的應用場景,可以使用NAS作為持久化存儲卷。本文介紹如何為應用靜態(tài)掛載NAS存儲卷,并驗證NAS的共享存儲和持久化存儲。
背景信息
NAS是一種可共享訪問、彈性擴展、高可靠以及高性能的分布式文件系統(tǒng),適用于共享數(shù)據(jù),以及I/O要求較高的應用場景。更多信息,請參見存儲概述。
ACS支持靜態(tài)和動態(tài)掛載NAS存儲卷。本文介紹靜態(tài)掛載方式,動態(tài)掛載方式請參見動態(tài)掛載NAS存儲卷。
前提條件
ACS集群中已安裝managed-csiprovisioner組件。
您可以在ACS集群管理頁的左側導航欄選擇
,在存儲頁簽下查看managed-csiprovisioner組件的安裝情況。使用限制
不支持掛載SMB協(xié)議的NAS文件系統(tǒng)。
NAS文件系統(tǒng)只能掛載到相同VPC的Pod上,不支持跨VPC掛載。
僅支持通過NFSv3協(xié)議掛載NAS文件系統(tǒng)。
注意事項
NAS為共享存儲,一個NAS存儲卷可以掛載到多個Pod上。此時多個Pod可能同時修改相同數(shù)據(jù),需要應用自行實現(xiàn)數(shù)據(jù)的同步。
掛載NAS時,請勿在應用的YAML中配置
securityContext.fsgroup
,這可能會造成掛載失敗。說明NAS文件系統(tǒng)的
/
目錄不支持修改權限、屬主和屬組。掛載NAS后,請勿刪除掛載點,否則會造成操作系統(tǒng)無響應。
創(chuàng)建NAS文件系統(tǒng)和掛載點
NAS掛載點所屬VPC必須與ACS集群中Pod所屬VPC一致,否則會導致掛載失敗。如果在Pod使用的VPC和交換機下,您已有NAS文件系統(tǒng)和掛載點,可跳過該步驟。
獲取Pod使用的VPC和交換機ID。
說明以下步驟為控制臺操作,您也可以執(zhí)行
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。
創(chuàng)建NAS文件系統(tǒng)和掛載點。
創(chuàng)建文件系統(tǒng)。
在文件系統(tǒng)列表頁面,單擊創(chuàng)建文件系統(tǒng),然后選擇創(chuàng)建通用型NAS或創(chuàng)建極速型NAS。
在彈出面板完成NAS相關參數(shù)配置,然后單擊立即購買,并完成后續(xù)操作。
本文以通用型NAS為例,需要注意的參數(shù)如下,更多信息,請參見創(chuàng)建文件系統(tǒng)。
參數(shù)
說明
地域
與ACS集群一致。
可用區(qū)
根據(jù)步驟1所獲取的Pod使用的交換機ID,選擇對應的可用區(qū)。
協(xié)議類型
選擇NFS。目前不支持掛載SMB協(xié)議的NAS文件系統(tǒng)。
專有網絡VPC、虛擬交換機
選擇ACS集群中Pod使用的VPC和交換機。可根據(jù)步驟1所獲取的VPC ID和交換機ID在專有網絡控制臺查詢。
查看掛載點,并獲取掛載點地址。
說明通用型NAS在創(chuàng)建文件系統(tǒng)時會自動創(chuàng)建一個掛載點,極速型NAS需要手動創(chuàng)建掛載點。具體操作,請參見管理掛載點。
在文件系統(tǒng)列表頁面,單擊文件系統(tǒng)ID。
在文件系統(tǒng)詳情頁左側導航欄,單擊掛載使用。
在掛載點區(qū)域,確認已有掛載點,且掛載點的狀態(tài)為可用。
靜態(tài)掛載NAS存儲卷
通過kubectl命令
步驟一:創(chuàng)建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
相關參數(shù)說明如下:
參數(shù)
說明
csi.alibabacloud.com/mountpoint
要掛載的NAS文件系統(tǒng)目錄。
如果輸入掛載點地址,例如
****-****.<region>.nas.aliyuncs.com
,則表示掛載的目錄為NAS文件系統(tǒng)的根目錄(/
)。如果輸入掛載點地址和子目錄,例如
****-****.<region>.nas.aliyuncs.com:/dir
,則表示掛載的目錄為NAS文件系統(tǒng)的/dir
目錄。如果/dir
目錄不存在,系統(tǒng)會自動新建。
csi.alibabacloud.com/mount-options
掛載參數(shù)。建議使用
nolock,tcp,noresvport
。accessModes
訪問模式。
storage
分配給Pod的存儲容量,即要創(chuàng)建的NAS存儲卷容量。
創(chuàng)建PVC。
kubectl create -f nas-pvc.yaml
查看PV。
kubectl get pv
預期返回如下,在創(chuàng)建PVC時已基于傳入的NAS文件系統(tǒng)掛載點等信息,自動創(chuàng)建對應的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已關聯(lián)自動創(chuàng)建的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
步驟三:創(chuàng)建應用并掛載NAS
使用以下YAML內容,創(chuàng)建nas-test.yaml文件。
以下YAML示例可以創(chuàng)建包含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
創(chuàng)建Deployment并掛載NAS。
kubectl create -f nas-test.yaml
查看Deployment中Pod的部署情況。
kubectl get pod | grep nas-test
返回示例如下,已創(chuàng)建2個Pod。
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s
查看掛載路徑。
命令示例如下,預期會返回NAS文件系統(tǒng)掛載目錄下的數(shù)據(jù)。默認為空。
kubectl exec nas-test-****-***a -- ls /data
通過控制臺
步驟一:創(chuàng)建PVC
登錄容器計算服務控制臺。
在集群頁面,單擊目標集群ID,進入該集群的管理頁面。
在集群管理頁面的左側導航欄,選擇
。在存儲聲明頁面,單擊創(chuàng)建。
在彈出的對話框中,完成參數(shù)配置,然后單擊創(chuàng)建。
參數(shù)
說明
示例
存儲聲明類型
選擇NAS。
NAS
名稱
PVC名稱,自定義輸入。格式要求請參考界面提示。
nas-pvc
分配模式
選擇使用掛載點域名創(chuàng)建。
使用掛載點域名創(chuàng)建
存儲驅動
默認已選擇CSI。
CSI
總量
分配給Pod的存儲容量,即要創(chuàng)建的NAS存儲卷容量。
20Gi
訪問模式
支持ReadWriteMany和ReadWriteOnce。
ReadWriteMany
掛載點域名
配置要掛載的NAS文件系統(tǒng)目錄。
如果輸入掛載點地址,例如
****-****.<region>.nas.aliyuncs.com
,則表示掛載的目錄為NAS文件系統(tǒng)的根目錄(/
)。如果輸入掛載點地址和子目錄,例如
****-****.<region>.nas.aliyuncs.com:/dir
,則表示掛載的目錄為NAS文件系統(tǒng)的/dir
目錄。如果/dir
目錄不存在,系統(tǒng)會自動新建。
350514****-mw***.cn-shanghai.nas.aliyuncs.com
創(chuàng)建完成后,在存儲聲明頁面可以看到新創(chuàng)建的PVC,該PVC已綁定自動創(chuàng)建的PV(即NAS存儲卷)。您可以在存儲卷頁面查看對應PV的詳細信息。
步驟二:創(chuàng)建應用并掛載NAS
在集群管理頁面的左側導航欄,選擇
。在無狀態(tài)頁面,單擊使用鏡像創(chuàng)建。
完成Deployment的參數(shù)配置,單擊創(chuàng)建。
需要注意的參數(shù)如下,其他參數(shù)保持默認即可。更多信息,請參見創(chuàng)建無狀態(tài)工作負載Deployment。
配置頁
參數(shù)
說明
示例
應用基本信息
應用名稱
Deployment名稱,自定義輸入。格式要求請參考界面提示。
nas-test
副本數(shù)量
配置Deployment的副本數(shù)量。
2
容器配置
鏡像名稱
輸入用于部署應用的鏡像地址。
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
所需資源
設置所需的vCPU和內存資源。
0.25 vCPU,0.5 GiB
數(shù)據(jù)卷
單擊增加云存儲聲明,然后完成參數(shù)配置。
掛載源:選擇之前創(chuàng)建的PVC。
容器路徑:輸入NAS文件系統(tǒng)要掛載到的容器路徑。
掛載源:nas-pvc
容器路徑:/data
查看應用部署情況。
在無狀態(tài)頁面,單擊應用名稱。
在容器組頁簽下,確認Pod已正常運行(狀態(tài)為Running)。
驗證NAS的共享存儲和持久化存儲
按照上文示例創(chuàng)建的Deployment中含有2個Pod,2個Pod掛載了同一NAS文件系統(tǒng)。您可以通過以下方式進行驗證:
在一個Pod中創(chuàng)建文件,然后另一個Pod中查看文件,以此來驗證共享存儲。
重建Deployment,然后在新創(chuàng)建的Pod中查看文件系統(tǒng)中的數(shù)據(jù)是否存在,以此來驗證持久化存儲。
查看Pod信息。
kubectl get pod | grep nas-test
返回示例如下:
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s
驗證共享存儲。
在一個Pod中創(chuàng)建文件。
以名為
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創(chuàng)建成功。
kubectl get pod | grep nas-test
返回示例如下:
nas-test-****-***c 1/1 Running 0 67s nas-test-****-***d 1/1 Running 0 49s
在新Pod中查看文件系統(tǒng)中的數(shù)據(jù)是否存在。
以名為
nas-test-c***
的Pod作為示例:kubectl exec nas-test-****-***c -- ls /data
預期返回如下,可以看到NAS文件系統(tǒng)中的數(shù)據(jù)依然存在,在新Pod的掛載目錄下可以重新獲取。
test.txt