通過容器網路檔案系統CNFS,可將NAS檔案系統作為原生Kubernetes資源進行管理,以聲明式方式完成NAS的建立、納管和使用。這為網站、資料分析等工作負載提供了簡單、高效的持久化儲存卷,並能靈活支援資料共用與隔離等多種業務情境。
準備工作
已建立1.20以上版本的ACK託管叢集Pro版。如需升級,請參見手動升級叢集。
通過kubectl使用CNFS時,支援1.20版本。
相關儲存群組件版本滿足以下要求。如需升級,請參見組件。
csi-plugin和csi-provisioner:v1.24.11-5221f79-aliyun及以上。
storage-operator:v1.26.2-1de13b6-aliyun及以上。
已開通Apsara File Storage NAS服務。NAS檔案系統限制如下,詳見使用限制。
僅支援通用型NAS的容量型、效能型和進階型,不支援極速型NAS。
每個帳號在單個地區內可建立的NAS檔案系統數量存在上限。
如需對NAS檔案系統進行KMS加密,需開通KMS服務,詳見購買專屬KMS執行個體。
建立NAS檔案系統
選擇NAS檔案系統的建立與接入方式
開始操作前,選擇如何為叢集提供NAS檔案系統。
方式 | 說明 | 卷提供方式 | 適用情境 |
CNFS自動建立並管理一個配置固定的NAS檔案系統,實現快速掛載。 | 動態磁碟區 |
| |
CNFS根據參數配置,建立一個全新的、可自訂的NAS檔案系統。 |
| 對效能、加密、成本等有特定要求,或需要精細化管理儲存。 | |
將已存在的NAS檔案系統接入CNFS進行統一管理。 |
| 將已有NAS平滑接入叢集。 |
方式一:自動建立並使用NAS檔案系統
通過CNFS自動建立一個預設配置的NAS檔案系統。CNFS會根據叢集環境完成建立,預設不加密。若當前地區不支援容量型NAS,則自動使用效能型NAS。
建立CNFS資源和StorageClass後,工作負載通過PVC請求儲存,即可在NAS上動態建立PV並掛載至Pod。
kubectl
1. 建立CNFS 建立一個 |
|
2. 建立StorageClass 建立 | |
3. 建立PVC 應用通過PVC申請儲存卷,並引用StorageClass作為配置模板。 | |
4. 建立應用並掛載PVC PVC建立後,部署樣本應用(如Deployment或StatefulSet),將PVC綁定的 PV 掛載到應用中。 |
|
5. 結果驗證 |
|
控制台
1. 建立CNFS |
|
2. 建立StorageClass |
|
3. 建立PVC |
|
4. 建立應用並掛載NAS | 建立Deployment或建立StatefulSet時,在容器配置頁面的資料卷地區,可以配置PVC掛載到容器。 以下樣本表示將通過CNFS建立的NAS檔案系統掛載到容器中的/data路徑下。
|
方式二:自訂參數建立並使用NAS檔案系統
通過CNFS建立一個具有自訂參數的NAS檔案系統。
定義一個
ContainerNetworkFileSystem資源,執行個體化一個新的NAS檔案系統。通過建立靜態PV或動態StorageClass,將該檔案系統暴露給叢集內的應用進行掛載。
kubectl
1. 建立自訂的NAS檔案系統 建立一個 |
|
2. 建立PV或StorageClass 建立CNFS後,選擇應用如何接入並使用NAS。
| 待用資料卷PV參數詳見使用NAS靜態儲存卷。 動態資料卷StorageClass參數詳見使用NAS動態儲存裝置卷。 |
3. 建立PVC 根據此前建立的靜態PV和動態StorageClass,建立引用NAS檔案系統的PVC。 | 待用資料卷動態資料卷 |
4. 建立應用並掛載NAS PVC建立後,將其綁定的 PV 掛載到應用中。 | |
5. 結果驗證 |
|
控制台
|
|
| PV
StorageClass
|
|
|
| 建立Deployment或建立StatefulSet時,在容器配置頁面的資料卷地區,可以配置PVC掛載到容器。 以下樣本表示將通過CNFS建立的NAS檔案系統掛載到容器中的/data路徑下。
|
方式三:納管並使用已有的NAS檔案系統
通過CNFS納管一個已存在的NAS檔案系統,並將其接入叢集供應用進行掛載和使用。
kubectl
1. 使用已有NAS建立CNFS 建立一個 |
|
2. 建立PV或StorageClass 建立CNFS後,選擇應用如何接入並使用NAS。
| 待用資料卷PV參數詳見使用NAS靜態儲存卷。 動態資料卷StorageClass參數詳見使用NAS動態儲存裝置卷。 |
3. 建立PVC 根據此前建立的靜態PV和動態StorageClass,建立引用NAS檔案系統的PVC。 | 待用資料卷動態資料卷 |
4. 建立應用並掛載NAS PVC建立後,將其綁定的 PV 掛載到應用中。 | |
5. 結果驗證 |
|
控制台
|
|
| PV
StorageClass
|
|
|
| 建立Deployment或建立StatefulSet時,在容器配置頁面的資料卷地區,可以配置PVC掛載到容器。 以下樣本表示將通過CNFS建立的NAS檔案系統掛載到容器中的/data路徑下。
|
應用情境配置:共用與隔離
完成NAS檔案系統的建立或納管後,可根據業務需求,通過不同的配置方式實現資料的共用或隔離。
配置NAS共用儲存卷(多個Pod共用同一資料目錄)
為解決Pod間的資料共用問題,可將NAS檔案系統中的同一個目錄作為共用儲存,掛載給多個Pod使用。
核心機制:通過靜態儲存卷方式實現。在PV中,聲明的
path與CSI最終掛載的路徑完全一致。因此,當多個Pod通過同一個PVC掛載該靜態PV時,均可訪問同一個儲存目錄,從而實現資料共用。關鍵配置:在工作負載的Pod模板(
.spec.template)中,將volumes欄位下的persistentVolumeClaim.claimName參數統一設定為同一個PVC名稱。
1. 建立指向特定目錄的PV和PVC | |
2. 建立樣本Deployment | |
3. 結果驗證 |
配置NAS隔離儲存卷(每個Pod擁有獨立資料目錄)
為滿足多租戶等情境的資料隔離需求,可為每個Pod或每組Pod提供獨立的、相互隔離的儲存目錄。
核心機制:通過動態儲存裝置卷方式實現。在StorageClass中,CSI會在聲明的
path路徑下,自動建立一個與PV同名的獨立子目錄作為掛載點。因此,每個PVC都會綁定到一個獨立的儲存目錄,從而實現資料隔離。關鍵配置:
在StatefulSet關聯的StorageClass中,通過
parameters的volumeAs: subpath(預設值)為每個PVC建立獨立的子目錄。在StatefulSet中定義
volumeClaimTemplates,為每個Pod自動建立並綁定一個獨立的PVC。
1. 建立支援動態子目錄的StorageClass | |
2. 建立樣本StatefulSet | |
3. 結果驗證 |
生產環境使用建議
資料安全
資料加密:建立新NAS檔案系統時,建議在CNFS的
parameters中設定encryptType: SSE-KMS,以啟用NAS服務端的待用資料加密,提升資料安全性。資料保護與回收策略:CNFS的
reclaimPolicy固定為Retain,刪除Kubernetes中的CNFS對象不會刪除後端的NAS執行個體。但PV的回收策略由其StorageClass定義,生產環境建議設定為Retain,避免誤刪。資源回收筒功能:建立NAS時,建議通過
enableTrashCan: "true"參數開啟資源回收筒功能,避免誤刪。並發寫入:當多個Pod掛載同一個共用儲存卷時,應在應用程式層面避免多個執行個體同時寫入同一個檔案,以免因並發寫入導致檔案損壞。
營運管理
效能隔離:隔離儲存卷僅實現資料層面隔離,所有隔離卷共用後端同一個NAS執行個體的IOPS和輸送量。對於IO效能要求嚴苛且需要穩定延遲的核心應用,建議為其規劃獨立的專用NAS檔案系統。
容量管理:在StorageClass中設定
allowVolumeExpansion: true,以便對儲存卷的目錄配額進行擴容。PVC中
requests.storage取值主要用於調度決策,並非整個NAS檔案系統的配額上限。監控與警示:利用容器儲存監控對NAS的容量使用率、IOPS、輸送量等關鍵計量配置警示,及時發現容量或效能瓶頸。
成本最佳化
參考資訊
驗證共用儲存、資料隔離、持久化儲存
NAS掛載完成後,可進一步驗證儲存行為是否符合預期。
驗證Deployment的共用儲存和持久化儲存
驗證StatefulSet的資料隔離和持久化儲存
CNFS YAML說明
執行kubectl get cnfs/<cnfsName> -o yaml查看CNFS YAML時,可查看CNFS對象的全部配置和即時狀態。
此處以方式二中執行kubectl get cnfs/cnfs-nas-filesystem -o yaml查看cnfs-nas-filesystem YAML為例。
YAML樣本
參數說明
資源釋放指引
為避免產生預期外費用並確保資料安全,請遵循以下流程釋放無需使用的資源。
刪除工作負載
操作:刪除所有使用相關PVC的應用,如Deployment、StatefulSet等,停止Pod並卸載儲存卷。
命令樣本:
kubectl delete deployment <your-deployment-name>
刪除PVC
操作:刪除應用關聯的PVC,PV刪除結果取決於回收策略(
reclaimPolicy)。Retain(推薦):刪除PVC後,後端NAS上的資料和目錄會完整保留。Delete:刪除PVC後,其綁定的PV也會被刪除。後端NAS上的資料和目錄將根據StorageClass中archiveOnDelete參數的設定進行處理。"true"(預設):不會真正刪除目錄或檔案,而是將其重新命名,格式為archived-{pvName}.{timestamp}。"false":資料被永久刪除,此操作無法復原,請謹慎使用。
命令樣本:
kubectl delete pvc <your-pvc-name>
刪除PV
操作:刪除PV。主要針對靜態PV,或在上一步中使用
Retain策略後處於Released狀態的PV。此操作僅移除Kubernetes中的資源定義,不刪除後端NAS資料。
命令樣本:
kubectl delete pv <your-pv-name>
刪除Kubernetes儲存定義(可選)
操作:刪除不再需要的StorageClass和CNFS對象。
此操作僅移除Kubernetes中的資源定義,不刪除後端NAS資料。
命令樣本:
kubectl delete sc <your-storageclass-name>、kubectl delete cnfs <your-cnfs-name>
刪除後端NAS檔案系統
操作:請參見刪除檔案系統。此操作將永久刪除該NAS上的所有資料,且無法恢複,請謹慎操作。執行前,請務必確認該NAS已無任何業務依賴。
