NAS儲存卷提供資料持久化(Pod重建後資料不丟失)和資料共用(多Pod同時讀寫)能力。ACK支援將已有的NAS檔案系統,以靜態儲存卷的方式掛載給工作負載使用。
靜態儲存卷:需預先建立PV來代表已有的儲存資源(如NAS檔案系統)。應用通過建立PVC來“匹配”並申請使用此PV。常用於納管存量儲存資源。但其綁定的PVC預設不支援線上擴容。
如需使用儲存卷自動擴容,請選擇使用NAS動態儲存裝置卷或使用CNFS自動擴容NAS儲存卷。
動態儲存裝置卷:無需預先建立PV。應用建立PVC時,系統會根據PVC指定的StorageClass,按需自動建立一個全新的儲存卷及與之對應的PV。此模式更靈活,且支援儲存卷擴容。
流程指引
在ACK叢集中掛載NAS靜態儲存卷主要流程如下。
|
準備工作
已安裝csi-plugin組件和csi-provisioner組件。
CSI組件預設安裝,請確保未手動卸載。可在頁面查看安裝情況。建議升級CSI組件至最新版本。
已建立NAS檔案系統,且滿足以下條件。否則請重新建立檔案系統或者使用NAS動態儲存裝置卷。
NAS在掛載連通性、檔案系統數量、協議類型等方面存在使用限制。
協議類型:僅支援NFS。
Virtual Private Cloud:NAS檔案系統需與叢集VPC保持一致。NAS支援跨可用性區域掛載,不支援跨VPC掛載。
掛載點:添加與叢集處於同一VPC內且狀態可用的掛載點,具體操作請參見管理掛載點。請記錄掛載點地址。
(可選)加密類型:如需加密儲存卷資料,請在建立NAS檔案系統時配置加密類型。
注意事項
禁止刪除掛載點:儲存卷使用期間,請勿在NAS控制台刪除其對應的掛載點,以免導致節點I/O異常。
並發寫入:NAS為共用儲存。當多個Pod同時掛載一個儲存卷時,應用自身需要處理並發寫入可能帶來的資料一致性問題。
關於NAS並發寫入的一些限制條件,請參見如何避免多進程或多用戶端並發寫同一記錄檔可能出現的異常?和讀寫訪問檔案類問題。
掛載效能:若在應用中配置了
securityContext.fsgroup,kubelet會在掛載後遞迴執行chmod或chown操作,可能導致Pod啟動時間顯著延長。如需最佳化,請參見NAS儲存卷FAQ。
步驟一:建立PV
建立PV,在叢集中“註冊”已有的NAS檔案系統。
kubectl
參見以下內容建立
pv-nas.yaml檔案。apiVersion: v1 kind: PersistentVolume metadata: # PV名稱,需在叢集內保持唯一 name: pv-nas # PV標籤,用於後續匹配PVC labels: alicloud-pvname: pv-nas spec: capacity: # 容量聲明僅作標識,實際容量由NAS檔案系統決定 storage: 5Gi accessModes: - ReadWriteMany # PV回收策略 persistentVolumeReclaimPolicy: Retain csi: # 驅動類型,使用NAS儲存卷時固定為此值 driver: nasplugin.csi.alibabacloud.com # 需與 metadata.name 保持一致 volumeHandle: pv-nas volumeAttributes: server: "0c47****-mpk25.cn-shenzhen.nas.aliyuncs.com" # 替換為NAS掛載點地址 # 待掛載的NAS子目錄,若不存在會自動建立 path: "/csi" mountOptions: - nolock,tcp,noresvport - vers=3參數
說明
storagePV容量聲明。此聲明僅為PVC匹配依據,不限制實際可用容量。應用實際可用儲存上限為NAS檔案系統總容量。
NAS實際容量上限由其規格決定,請參見通用型NAS和極速型NAS。
accessModes配置訪問模式。可取值:
ReadWriteMany(預設):多節點讀寫。ReadWriteOnce:單節點讀寫。ReadOnlyMany:多節點唯讀。
persistentVolumeReclaimPolicyPV的回收策略,即PVC被刪除後如何處理對應的PV及後端NAS資料。
Retain(推薦):刪除PVC後,PV進入Released狀態,後端NAS資料被完整保留,需手動刪除。Delete:刪除PVC後,PV也會被刪除。需配合archiveOnDelete一起使用。靜態PV不支援archiveOnDelete,即使配置為Delete,刪除PVC時也不會真正刪除PV和NAS檔案。如需配置
archiveOnDelete,請參見使用NAS動態儲存裝置卷。
driver驅動類型。使用阿里雲NAS CSI組件時固定為
nasplugin.csi.alibabacloud.com。volumeHandlePV在後端儲存系統中的唯一識別碼,需與PV Name(即
metadata.name)保持一致。如需同時使用多個PV,則各個PV中該值須唯一。serverNAS掛載點地址。
關於如何查看掛載點地址,請參見管理掛載點。
path待掛載的NAS子目錄。如果未設定,則預設掛載到根目錄。
如果NAS中沒有該目錄,系統會自動建立並進行掛載。
通用型NAS:根目錄為
/。極速型NAS:根目錄為
/share。掛載子目錄時,path需以/share開頭(如/share/data)。
mountOptionsNAS的掛載參數,包括NFS協議版本等。預設使用v3協議掛載,可通過
vers=4.0方式指定協議版本。關於不同NAS類型支援的NFS協議,請參見NFS協議。建立PV。
kubectl create -f pv-nas.yaml查看PV狀態和屬性。
kubectl get pv預期輸出:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pv-nas 5Gi RWX Retain Available <unset> 25s預期輸出表明,PV 已成功建立,容量為 5Gi,當前處於Available狀態,即未被任何應用通過 PVC 佔用。
控制台
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在儲存卷頁面,單擊建立,在彈出的對話方塊完成參數配置,然後單擊建立。
配置項
說明
儲存卷類型
選擇NAS。
名稱
PV名稱,在叢集內保持唯一。
總量
PV容量聲明。此聲明僅為PVC匹配依據,不限制實際可用容量。應用實際可用儲存上限為NAS檔案系統總容量。
NAS實際容量上限由其規格決定,請參見通用型NAS和極速型NAS。
訪問模式
配置訪問模式。可取值:
ReadWriteMany:多節點讀寫。
ReadWriteOnce:單節點讀寫。
是否使用CNFS
是否使用容器網路檔案系統CNFS,利用其在自動化營運、緩衝加速、效能監控等方面提供的增強能力。
如需使用CNFS管理已有NAS,請參見建立CNFS管理NAS檔案系統(推薦)。
掛載點網域名稱
未開啟CNFS時可配置
NAS掛載點地址。
如需擷取地址,請參見管理掛載點。
選擇掛載點:選擇此前添加的掛載點地址。
自訂:使用自訂網域名作為掛載地址。請確保已完成自訂網域名到目標NAS掛載點的解析配置。
進階選項(選填)
掛載路徑
待掛載的NAS子目錄。如果未設定,則預設掛載到根目錄。
如果NAS中沒有該目錄,系統會自動建立並進行掛載。
通用型NAS:根目錄為
/。極速型NAS:根目錄為
/share。掛載子目錄時,path需以/share開頭(如/share/data)。
回收策略
Retain(預設):刪除PVC時,PV和NAS檔案不會被刪除,需手動刪除。
刪除:刪除PVC後,PV也會被刪除。需配合
archiveOnDelete一起使用。靜態PV不支援archiveOnDelete,即使配置為Delete,刪除PVC時也不會真正刪除PV和NAS檔案。如需配置
archiveOnDelete,請參見使用NAS動態儲存裝置卷。
掛載選項
NAS的掛載參數,包括NFS協議版本等。預設使用v3協議掛載,可通過
vers=4.0方式指定協議版本。關於不同NAS類型支援的NFS協議,請參見NFS協議。標籤
PV的標籤。
建立完成後,可在儲存卷頁面查看新建立的PV。
步驟二:建立PVC
建立PVC,為應用聲明其所需的持久化儲存容量。
kubectl
建立pvc-nas.yaml檔案,關聯此前建立的PV。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas # PVC名稱,需在命名空間內保持唯一 spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nas # 通過標籤精確匹配此前建立的PV參數
說明
accessModes訪問模式。可取值:
ReadWriteMany(預設):多節點讀寫。ReadWriteOnce:單節點讀寫。ReadOnlyMany:多節點唯讀。
storage聲明所需使用的儲存卷的容量。此處聲明的所需容量僅為 PV 匹配的依據,並非實際容量的限制。
NAS實際容量上限由規格決定,請參見通用型NAS和極速型NAS確認。
matchLabels輸入PV標籤,用於關聯PV。
建立PVC。
kubectl create -f pvc-nas.yaml查看PVC狀態。
kubectl get pvc預期輸出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-nas Bound pv-nas 5Gi RWX <unset> 5s預期輸出表明,PVC已成功分配5Gi的儲存容量,綁定(Bound)到名為 pv-nas 的PV上,可被應用掛載和使用。
控制台
步驟三:建立應用並掛載NAS
PVC建立後,可將其綁定的 PV 掛載到應用中。
kubectl
參見以下內容建立
deploy.yaml,引用此前建立的PVC。該應用會建立2個Pod,掛載至同一NAS檔案系統,以便後續驗證NAS的共用儲存。
建立Deployment。
kubectl create -f deploy.yaml查看應用Pod部署情況。
kubectl get pod -l app=nginx預期輸出:
NAME READY STATUS RESTARTS AGE nas-test-****-***a 1/1 Running 0 32s nas-test-****-***b 1/1 Running 0 32s
控制台
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在無狀態頁面,單擊使用鏡像建立,按照頁面提示完成應用的配置。
主要參數如下,其他參數保持預設即可,詳見建立無狀態工作負載Deployment。
配置項
參數
說明
應用基本資料
應用程式名稱
Deployment名稱。
副本數量
Deployment的副本數量。
多個副本會掛載至同一NAS檔案系統,以便後續驗證NAS的共用儲存。
容器配置
鏡像名稱
應用鏡像地址。
所需資源
所需的vCPU和記憶體資源。
數據卷
單擊增加雲端儲存聲明(PersistentVolumeClaim),完成參數配置。
掛載源:此前建立的PVC。
容器路徑:NAS檔案系統需要掛載到的容器路徑,如/data。
部署後,可在無狀態頁面單擊應用程式名稱,在容器組頁簽下確認Pod已正常運行(狀態為Running)。
驗證共用儲存和持久化儲存
成功部署應用後,可驗證儲存卷是否按預期工作。
共用儲存 | 持久化儲存 |
在一個Pod中建立檔案,然後另一個Pod中查看,驗證資料的共用儲存。
| 重建Deployment,在建立Pod中查看檔案系統中的資料是否存在,驗證資料的持久化儲存。
|
適用於生產環境
安全與許可權管理
使用許可權組進行存取控制:NAS通過許可權組來管理網路存取權限。請遵循最小許可權原則,在許可權組中僅添加叢集節點的私網IP地址或其所屬的vSwitch網段,避免授權範圍過大(如
0.0.0.0/0)。
效能與成本最佳化
選擇合適的NAS類型:參見檔案系統選型,根據應用對IOPS和輸送量的要求合理選擇NAS類型。
最佳化掛載選項 (
mountOptions):根據工作負載特性調整NFS掛載參數。例如,使用vers=4.0或vers=4.1協議版本可能在某些情境下獲得更好的效能和檔案鎖定能力。對於大規模檔案讀寫,可測試調整rsize和wsize參數以最佳化讀寫效能。
營運與可靠性
配置健全狀態檢查:為應用Pod配置存活探針(Liveness Probe),檢查掛載點是否正常。當掛載失效時,ACK可自動重啟Pod,觸發儲存卷的重新掛載。
監控與警示:利用容器儲存監控配置警示,及時發現儲存卷的異常或效能瓶頸。
使用
Retain回收策略:對於生產資料,將PV的persistentVolumeReclaimPolicy設定為Retain,防止因誤刪PVC而導致後端NAS檔案系統中的資料被意外刪除。
資源釋放指引
為避免產生預期外費用,當您不再需要使用NAS儲存卷時,請按照以下順序釋放相關資源。
刪除工作負載
操作:刪除所有使用該NAS儲存卷的應用(如Deployment、StatefulSet等)。此操作將停止應用Pod對儲存卷的掛載和讀寫。
命令樣本:
kubectl delete deployment <your-deployment-name>
刪除PVC
操作:刪除應用所關聯的PVC。刪除後,其綁定PV的後續行為取決於該PV的
persistentVolumeReclaimPolicy。回收策略說明:
Retain(推薦):刪除PVC後,其綁定的PV會進入Released(已釋放)狀態。PV對象和後端NAS資料都會被完整保留,需手動刪除。Delete:刪除PVC後,對應的PV對象會被刪除。請注意:PV指向NAS根目錄時,後端的NAS資料仍會保留,防止誤刪除。
當一個靜態PV的
volumeHandle值是path值的尾碼時(如volumeHandle為app,而path為/exports/app),刪除PVC將觸發後端NAS子目錄的自動刪除。請務必謹慎使用。
命令樣本:
kubectl delete pvc <your-pvc-name>
刪除PV
操作:當PV處於
Available或Released狀態時,可執行刪除操作。此操作僅從Kubernetes叢集中移除該PV的定義,不會刪除後端NAS檔案系統上的資料。命令樣本:
kubectl delete pv <your-pv-name>
刪除後端NAS檔案系統(可選)
操作:請參見刪除檔案系統。此操作將永久刪除該NAS上的所有資料,且無法恢複,請謹慎操作。執行前,請務必確認該NAS已無任何業務依賴。
相關文檔
在掛載和使用NAS儲存卷的過程中,如果遇到問題,可參考以下文檔進行排查。
通過CNFS可以實現對NAS檔案系統的獨立管理,提升NAS檔案系統的效能和QoS控制。具體操作,請參見通過CNFS管理NAS檔案系統。