全部產品
Search
文件中心

Container Service for Kubernetes:儲存CSI外掛程式的儲存方案概覽

更新時間:Jun 19, 2024

當您在ACK叢集中運行工作負載時,您可能會有應用資料持久化儲存、敏感和配置資料存放區、儲存資源動態供應等儲存需求。ACK叢集基於CSI外掛程式實現了容器儲存功能,藉助阿里雲儲存服務提供並管理靜態或動態儲存裝置卷資源。

支援的儲存卷概覽

容器儲存介面(CSI)外掛程式是當前Kubernetes社區推薦的外掛程式實現方案。Container ServiceACK的容器儲存功能基於CSI外掛程式實現,深度融合Block StorageEBS、Apsara File Storage NAS、Object Storage Service、本地碟等,完全相容Kubernetes原生的儲存卷類型,例如EmptyDir、HostPath、Secret、ConfigMap等。CSI外掛程式支援的儲存卷如下。

Container ServiceACK支援Pod自動綁定阿里雲雲端硬碟、NAS、OSS、本地卷等儲存服務。每種儲存卷的主要特點、應用情境及相關計費如下。

說明

CSI外掛程式支援靜態儲存卷掛載和動態儲存裝置卷掛載兩種方式。在靜態儲存卷掛載的方式中,通常需要手動編輯和建立一個PV和PVC進行掛載。當需要大量的PV和PVC時,您可以建立動態儲存裝置卷進行掛載。PV和PVC的概念如下:

  • PersistentVolume(PV)

    叢集內的儲存資源。PV獨立於Pod的生命週期,可根據不同的StorageClass類型建立不同類型的PV。

  • PersistentVolumeClaim(PVC)

    叢集內的儲存請求。例如,PV是Pod使用的節點資源,PVC則聲明使用PV資源。當PV資源不足時,PVC可動態建立PV。

儲存服務

待用資料卷

動態資料卷

預設部署

主要特點

應用情境

計費說明

阿里雲雲端硬碟

支援

支援

非共用儲存,每個雲端硬碟只能在單個節點掛載。

  • 高IO、低延時情境。

    雲端硬碟Block Storage裝置適用於對IO、延遲要求較高的應用情境,例如:資料庫、中介軟體等服務。

  • 非共用情境

    雲端硬碟卷是獨享模式,同時只能給一個Pod使用,在非共用資料業務情境可以考慮使用雲端硬碟卷。

更多資訊,請參見雲端硬碟儲存卷概述

關於雲端硬碟計費項目資訊,請參見Block Storage計費。關於雲端硬碟的價格資訊,請參見Elastic Compute Service產品詳情頁

阿里雲NAS

支援

支援

共用儲存,可提供高效能、高吞吐儲存服務。

  • 共用資料情境

    NAS支援多個Pod同時訪問一份資料,如果您有共用資料需求,推薦使用NAS。

  • 巨量資料分析情境

    NAS提供了較高的資料吞吐能力,能滿足大批量作業對共用儲存訪問的需求。

  • Web應用情境

    為Web應用、內容管理系統提供儲存支撐。

  • 儲存日誌情境

    如果您希望將日誌儲存到儲存卷,推薦使用NAS資料卷。

更多資訊,請參見NAS儲存卷概述

NAS計費說明

阿里雲OSS

支援

支援

共用儲存,使用者態檔案系統。

  • 媒體、圖片等媒體檔案唯讀情境

    您可以通過OSS資料卷讀取上述檔案類型。

  • 網頁、應用設定檔唯讀情境

    OSSFS網路效能欠佳,可以支撐一些小檔案的讀情境。

說明

OSS資料卷通過OSSFS掛載,是一種通過FUSE方式類比實現的使用者態檔案系統。對於寫情境穩定性欠佳,因此在寫情境中推薦使用其他儲存卷類型。

更多資訊,請參見OSS儲存卷概述

OSS計費概述

不同阿里雲儲存服務提供儲存卷的使用限制不同,請閱讀下文。

使用限制

您在使用ACK儲存CSI外掛程式時需要注意CSI外掛程式本身的使用限制,也需要注意使用CSI外掛程式時涉及的阿里雲儲存產品的使用限制。

叢集版本限制

使用CSI外掛程式時,需確保ACK叢集版本為v1.14及以上,且kubelet運行參數--enable-controller-attach-detach需要設定為true。如需升級叢集,請參見手動升級叢集

CSI外掛程式使用限制

阿里雲CSI外掛程式已在社區開源,主要支援ACK叢集。對於非ACK叢集(非阿里環境叢集、阿里雲自建叢集),由於叢集配置、許可權管理、網路差異等原因,外掛程式無法無縫支援。如果您處於這樣的叢集環境,可以通過閱讀源碼、修改配置等方式進行適配。更多資訊,請參見alibaba-cloud-csi-driver

儲存卷使用限制

儲存卷類型

使用限制

雲端硬碟儲存卷

  • 雲端硬碟類型:訂用帳戶的雲端硬碟不能進行掛載、卸載操作。

  • 共用儲存:雲端硬碟為阿里雲儲存團隊提供的非共用儲存,只能同時被一個Pod掛載。

  • 掛載數量及容量:每個節點最多掛載雲端硬碟數量由ECS機型決定,更多資訊,請參見執行個體規格類型系列。單塊雲端硬碟容量最小為1 GiB (ESSD PL0, ESSD AutoPL),最大32 TiB(32768 GiB)。

  • 與ECS執行個體的關係:雲端硬碟類型和ECS類型需要匹配才可以掛載,否則會掛載失敗。關於雲端硬碟類型和ECS類型的匹配關係,請參見執行個體規格類型系列。此外,雲端硬碟只能掛載到相同可用性區域的ECS執行個體,不支援跨可用性區域掛載。

  • 掛載應用類型:推薦使用有狀態應用(StatefulSet)掛載使用雲端硬碟。無狀態應用(Deployment)掛載雲端硬碟時Replica需要配置為1,無法為每個Pod配置獨立的儲存卷,且不能保證掛載、卸載的優先順序。此外,由於Deployment的升級策略,重啟Pod時新的Pod可能一直無法掛載,故不推薦使用。

  • 應用參數配置:使用雲端硬碟儲存卷時,如果在應用模板中配置了securityContext.fsgroup參數,kubelet在儲存卷掛載完成後會執行chmodchown操作,導致掛載時間延長。若需要減少掛載時間,具體操作,請參見NAS儲存卷掛載時間延長OSS儲存卷掛載時間延長

NAS儲存卷

  • NAS為共用儲存,可以同時為多個Pod提供共用儲存服務,即一個PVC可以同時被多個Pod使用。

  • CSI外掛程式不支援SMB掛載。

  • 資料卷掛載協議推薦使用NFSv3。

  • NAS卷只能掛載到相同VPC的ECS執行個體,不支援不同VPC網路的掛載。

  • 通用NAS與極速NAS在掛載連通性、檔案系統數量及協議類型等方面存在相應約束條件。更多資訊,請參見使用限制

  • 使用NAS資料卷前,建議將CSI儲存外掛程式升級到最新版本。

  • NAS掛載點建立後,等待一定時間,待掛載點狀態可用後方可使用。

  • 在沒有卸載NAS檔案系統前,務必不要刪除NAS掛載點,否則會造成作業系統無響應。

  • ACK Serverless叢集中,subpath類型的PV刪除後,相應子目錄的不會自動刪除。也就意味著,當PV的reclaimPolicyDelete時,即使PV刪除,NAS中實際的目錄檔案也並不會被刪除。如需刪除,需在手動掛載後執行刪除。

OSS儲存卷

  • OSS為共用儲存,可以同時為多個Pod提供共用儲存服務。

  • 目前支援CentOS、Alibaba Cloud Linux、ContainerOS和龍蜥作業系統。

  • 使用資料卷時,每個應用使用獨立的PV名稱。

  • 如需掛載OSS Bucket中的子目錄,建議直接使用PV中的path欄位,而非subpath方式。若您的業務需要使用subpath或subpathExpr配置,為避免因許可權配置錯誤等原因導致掛載異常,請先閱讀常見問題中的使用subpath或subpathExpr方式掛載OSS儲存卷異常

  • OSS資料卷是使用ossfs檔案進行掛載的FUSE檔案系統。

    • 適合於讀檔案情境。例如,讀設定檔、視頻、圖片檔案等情境。 更多使用限制,請參見ossfs使用限制

    • 不適用於寫檔案的應用情境。如需寫入檔案,建議您使用SDK實現寫操作或者使用NAS儲存卷服務。關於使用SDK實現寫操作的具體操作,請參見OSS儲存讀寫分離最佳實務

  • ossfs可以通過調整配置參數的方式,最佳化其在緩衝、許可權等方面的表現,請參見常見問題ossfs異常問題排查OSS儲存卷FAQossfs/README-CN.mdFAQ

容器儲存功能概覽

ACK不同叢集形態與各儲存服務能力的對應關係如下表。

存放裝置分類

儲存能力

ACK託管和專有叢集

ACK Serverless叢集

ACK安全沙箱

Block Storage

雲端硬碟掛載和卸載

image.png

image.png

image.png

線上擴容(Resize)

image.png

image.png

image.png

快照(Snapshot)

image.png

image.png

image.png

容器IO監控

image.png

image.png

image.png

檔案系統

支援XFS、 Ext4

支援XFS、 Ext4

支援XFS、 Ext4

塊、裸裝置

image.png

image.png

image.png

快照恢複

image.png

image.png

image.png

雲端硬碟隊列設定

image.png

image.png

image.png

資料加密CMK和BYOK

image.png

image.png

image.png

多可用性區域感知

image.png

image.png

image.png

使用者自訂標籤

image.png

image.png

image.png

跨主機遷移

image.png

image.png

image.png

Apsara File Storage NAS

NAS建立,掛載,卸載

image.png

image.png

image.png

Samba掛載卸載

image.png

image.png

image.png

資源回收筒 (CNFS)

image.png

image.png

image.png

動態資料卷-子目錄/共用目錄(CNFS)

image.png

image.png

image.png

資料加密CMK(CNFS,極速NAS)

image.png

image.png

image.png

容量控制Quota(CNFS)

image.png僅支援託管版

image.png

image.png

容量/IO監控 (CNFS)

image.png

image.png

image.png

線上擴容(CNFS)

image.png

image.png

image.png

Object Storage Service

OSS掛載和卸載

image.png

image.png

image.png

資料加密BYOK

image.png

image.png

image.png

本機存放區

Block StorageLVM管理

image.png

image.png

image.png

VolumeGroup自動化配置

image.png

image.png

image.png

節點LVM容量感知調度

image.png

image.png

image.png

PMEM Direct Mem

image.png

image.png

image.png

PMEM LVM卷

image.png

image.png

image.png

容器網路檔案系統CNFS

管理容器儲存資源時,您可以在ACK叢集Pro版中使用容器網路檔案系統CNFS(Container Network File System)。CNFS可以提升NAS、OSS儲存卷的效能和QoS控制,將阿里雲的檔案儲存體抽象為一個K8s對象(CRD)進行獨立管理,包括建立、刪除、描述、掛載、監控及擴容等營運操作,提供資源回收筒、資源配額、儲存卷IO效能監控等功能。關於CNFS的更多資訊,請參見容器網路檔案系統CNFS概述對NAS生命週期管理對OSS生命週期管理

CSI組件

CSI外掛程式包括CSI-Plugin和CSI-Provisioner兩個組件,用於實現資料卷的自動建立、掛載和卸載。CSI組件已在ACK託管叢集ACK專有叢集中預設部署。關於CSI組件的更多資訊和升級步驟,請參見管理CSI組件

FAQ

如何判斷叢集使用的儲存外掛程式模式?

您可以在控制台查看節點注釋,或使用kubectl查看kubelet參數。

通過控制台查看節點注釋

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點

  3. 在目標節點操作列選擇更多 > 詳情

    基本資料頁簽下查看節點注釋。如果存在volumes.kubernetes.io/controller-managed-attach-detach: true,表示叢集儲存外掛程式為CSI;如果沒有,表示叢集儲存外掛程式為Flexvolume。

通過命令查看kubelet參數

執行以下命令查看kubelet參數。

ps -ef | grep kubelet

預期輸出:

--enable-controller-attach-detach=true
  • --enable-controller-attach-detach的值為true,則表示叢集儲存外掛程式為CSI。

  • --enable-controller-attach-detach的值為false,則表示叢集儲存外掛程式為Flexvolume。

如何手動為CSI外掛程式授權?

CSI外掛程式在資料卷的掛載、卸載、建立、刪除等操作上都需要您授予訪問其他產品資源的許可權。通常叢集已預設安裝CSI組件且已有相關許可權。如果您需要在叢集中手動完成授權,CSI外掛程式支援直接使用AccessKey授權,也支援使用RAM角色授權的方式(預設)進行授權。

  • 使用AccessKey資訊授權

    • 直接在CSI部署模板中寫入AccessKey資訊。

    • 也可以通過Secret方式將AccessKey資訊傳入環境變數。

  • 使用RAM角色授權:CSI外掛程式使用AliyunCSManagedCsiRole角色來訪問您在其他雲產品中的資源。更多資訊,請參見Container ServiceACK服務角色。關於如何為RAM角色授權,請參見為RAM角色授權

    • ACK託管叢集:CSI使用的RAM角色許可權的Token被儲存在名為addon.csi.token的Secret中,CSI外掛程式掛載該Secret即可實現RAM角色授權,並訪問OpenAPI。

    • ACK專有叢集:CSI使用其Pod所在的ECS節點的RAM角色。