當您在ACK集群中運行工作負載時,您可能會有應用數據持久化存儲、敏感和配置數據存儲、存儲資源動態供應等存儲需求。ACK集群基于CSI插件實現了容器存儲功能,借助阿里云存儲服務提供并管理靜態或動態存儲卷資源。
支持的存儲卷概覽
容器存儲接口(CSI)插件是當前Kubernetes社區推薦的插件實現方案。容器服務ACK的容器存儲功能基于CSI插件實現,深度融合塊存儲EBS、文件存儲NAS、CPFS、對象存儲OSS、本地盤等,完全兼容Kubernetes原生的存儲卷類型,例如EmptyDir、HostPath、Secret、ConfigMap等。CSI插件支持的存儲卷如下。
容器服務ACK支持Pod自動綁定阿里云云盤、NAS、OSS、CPFS、本地卷等存儲服務。每種存儲卷的主要特點、應用場景及相關計費如下。
CSI插件支持靜態存儲卷掛載和動態存儲卷掛載兩種方式。在靜態存儲卷掛載的方式中,通常需要手動編輯和創建一個PV和PVC進行掛載。當需要大量的PV和PVC時,您可以創建動態存儲卷進行掛載。PV和PVC的概念如下:
PersistentVolume(PV)
集群內的存儲資源。PV獨立于Pod的生命周期,可根據不同的StorageClass類型創建不同類型的PV。
PersistentVolumeClaim(PVC)
集群內的存儲請求。例如,PV是Pod使用的節點資源,PVC則聲明使用PV資源。當PV資源不足時,PVC可動態創建PV。
存儲服務 | 靜態存儲卷 | 動態存儲卷 | 默認部署 | 主要特點 | 應用場景 | 計費說明 |
阿里云云盤 | 支持 | 支持 | 是 | 非共享存儲,每個云盤只能在單個節點掛載。 |
更多信息,請參見云盤存儲卷概述。 | |
阿里云NAS | 支持 | 支持 | 是 | 共享存儲,可提供高性能、高吞吐存儲服務。 |
更多信息,請參見NAS存儲卷概述。 | |
阿里云OSS | 支持 | 支持(通過CNFS實現) | 是 | 共享存儲,用戶態文件系統。 |
說明 OSS數據卷通過ossfs掛載,可以支撐一些小文件的讀場景,對于寫場景穩定性欠佳。在寫場景下,推薦使用其他存儲卷類型。 更多信息,請參見OSS存儲卷概述。 | |
阿里云CPFS | 支持 | 支持 | 否 | 高性能、高帶寬、共享存儲。 |
更多信息,請參見CPFS2.0靜態卷和使用CNFS管理CPFS隔離存儲卷。 | |
阿里云ENS云盤 | 支持 | 支持 | 否 | 低延時,靠近終端用戶,非高可用,只能在單節點掛載。 | 更多信息,請參見什么是邊緣節點服務ENS、在ACK Edge集群中使用ENS云盤 | 支持按量付費方式,詳情請參見計費概述。 |
本地卷 | 支持 | 支持 | 否 | 低延遲、高IO,非高可用。 |
更多信息,請參見本地存儲卷概述。 |
不同阿里云存儲服務提供存儲卷的使用限制不同,請閱讀下文。
使用限制
您在使用ACK存儲CSI插件時需要注意CSI插件本身的使用限制,也需要注意使用CSI插件時涉及的阿里云存儲產品的使用限制。
集群版本限制
使用CSI插件時,需確保ACK集群版本為v1.14及以上,且kubelet運行參數--enable-controller-attach-detach
需要設置為true
。如需升級集群,請參見手動升級集群。
CSI插件使用限制
阿里云CSI插件已在社區開源,主要支持ACK集群。對于非ACK集群(非阿里環境集群、阿里云自建集群),由于集群配置、權限管理、網絡差異等原因,插件無法無縫支持。如果您處于這樣的集群環境,可以通過閱讀源碼、修改配置等方式進行適配。更多信息,請參見alibaba-cloud-csi-driver。
存儲卷使用限制
存儲卷類型 | 使用限制 |
云盤存儲卷 | 請參見使用限制。 |
NAS存儲卷 |
|
OSS存儲卷 |
|
CPFS存儲卷 |
|
本地存儲卷 |
|
容器存儲功能概覽
ACK不同集群形態與各存儲服務能力的對應關系如下表。
存儲分類 | 存儲能力 | ACK托管和專有集群 | ACK Serverless集群 | ACK安全沙箱 |
塊存儲 | 云盤掛載和卸載 | |||
在線擴容(Resize) | ||||
快照(Snapshot) | ||||
容器IO監控 | ||||
文件系統 | 支持XFS、 Ext4 | 支持XFS、 Ext4 | 支持XFS、 Ext4 | |
塊、裸設備 | ||||
快照恢復 | ||||
云盤隊列設置 | ||||
數據加密CMK和BYOK | ||||
多可用區感知 | ||||
用戶自定義標簽 | ||||
跨主機遷移 | ||||
文件存儲NAS | NAS創建,掛載,卸載 | |||
Samba掛載卸載 | ||||
高吞吐并行文件系統(CPFS) | ||||
回收站 (CNFS) | ||||
動態數據卷-子目錄/共享目錄(CNFS) | ||||
數據加密CMK(CNFS,極速NAS) | ||||
容量控制Quota(CNFS) | 僅支持托管版 | |||
容量/IO監控 (CNFS) | ||||
在線擴容(CNFS) | ||||
對象存儲OSS | OSS掛載和卸載 | |||
數據加密BYOK | ||||
本地存儲 | 塊存儲LVM管理 | |||
VolumeGroup自動化配置 | ||||
節點LVM容量感知調度 | ||||
PMEM Direct Mem | ||||
PMEM LVM卷 |
容器網絡文件系統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組件。
快速入門
關于ACK使用存儲卷的快速入門,請參見以下視頻:
FAQ
如何判斷集群使用的存儲插件模式?
您可以在控制臺查看節點注釋,或使用kubectl查看kubelet參數。
通過控制臺查看節點注釋
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在目標節點操作列選擇
。在基本信息頁簽下查看節點注釋。如果存在
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角色來訪問您在其他云產品中的資源。更多信息,請參見容器服務ACK服務角色。關于如何為RAM角色授權,請參見為RAM角色授權。
ACK托管集群:CSI使用的RAM角色權限的Token被保存在名為addon.csi.token的Secret中,CSI插件掛載該Secret即可實現RAM角色授權,并訪問OpenAPI。
ACK專有集群:CSI使用其Pod所在的ECS節點的RAM角色。