存儲(chǔ)概述
當(dāng)您在ACK集群中運(yùn)行工作負(fù)載時(shí),您可能會(huì)有應(yīng)用數(shù)據(jù)持久化存儲(chǔ)、敏感和配置數(shù)據(jù)存儲(chǔ)、存儲(chǔ)資源動(dòng)態(tài)供應(yīng)等存儲(chǔ)需求。ACK集群基于CSI插件實(shí)現(xiàn)了容器存儲(chǔ)功能,借助阿里云存儲(chǔ)服務(wù)提供并管理靜態(tài)或動(dòng)態(tài)存儲(chǔ)卷資源。
支持的存儲(chǔ)卷概覽
容器存儲(chǔ)接口(CSI)插件是當(dāng)前Kubernetes社區(qū)推薦的插件實(shí)現(xiàn)方案。容器服務(wù)ACK的容器存儲(chǔ)功能基于CSI插件實(shí)現(xiàn),深度融合塊存儲(chǔ)EBS、文件存儲(chǔ)NAS、CPFS、對(duì)象存儲(chǔ)OSS、本地盤等,完全兼容Kubernetes原生的存儲(chǔ)卷類型,例如EmptyDir、HostPath、Secret、ConfigMap等。CSI插件支持的存儲(chǔ)卷如下。
容器服務(wù)ACK支持Pod自動(dòng)綁定阿里云云盤、NAS、OSS、CPFS、本地卷等存儲(chǔ)服務(wù)。每種存儲(chǔ)卷的主要特點(diǎn)、應(yīng)用場(chǎng)景及相關(guān)計(jì)費(fèi)如下。
CSI插件支持靜態(tài)存儲(chǔ)卷掛載和動(dòng)態(tài)存儲(chǔ)卷掛載兩種方式。在靜態(tài)存儲(chǔ)卷掛載的方式中,通常需要手動(dòng)編輯和創(chuàng)建一個(gè)PV和PVC進(jìn)行掛載。當(dāng)需要大量的PV和PVC時(shí),您可以創(chuàng)建動(dòng)態(tài)存儲(chǔ)卷進(jìn)行掛載。PV和PVC的概念如下:
PersistentVolume(PV)
集群內(nèi)的存儲(chǔ)資源。PV獨(dú)立于Pod的生命周期,可根據(jù)不同的StorageClass類型創(chuàng)建不同類型的PV。
PersistentVolumeClaim(PVC)
集群內(nèi)的存儲(chǔ)請(qǐng)求。例如,PV是Pod使用的節(jié)點(diǎn)資源,PVC則聲明使用PV資源。當(dāng)PV資源不足時(shí),PVC可動(dòng)態(tài)創(chuàng)建PV。
存儲(chǔ)服務(wù) | 靜態(tài)存儲(chǔ)卷 | 動(dòng)態(tài)存儲(chǔ)卷 | 默認(rèn)部署 | 主要特點(diǎn) | 應(yīng)用場(chǎng)景 | 計(jì)費(fèi)說明 |
阿里云云盤 | 支持 | 支持 | 是 | 非共享存儲(chǔ),每個(gè)云盤只能在單個(gè)節(jié)點(diǎn)掛載。 |
更多信息,請(qǐng)參見云盤存儲(chǔ)卷。 | 關(guān)于云盤計(jì)費(fèi)項(xiàng)信息,請(qǐng)參見塊存儲(chǔ)計(jì)費(fèi)。關(guān)于云盤的價(jià)格信息,請(qǐng)參見詳細(xì)定價(jià)。 |
阿里云NAS | 支持 | 支持 | 是 | 共享存儲(chǔ),可提供高性能、高吞吐存儲(chǔ)服務(wù)。 |
更多信息,請(qǐng)參見NAS存儲(chǔ)卷概述。 | |
阿里云OSS | 支持 | 支持(通過CNFS實(shí)現(xiàn)) | 是 | 共享存儲(chǔ),用戶態(tài)文件系統(tǒng)。 |
說明 OSS數(shù)據(jù)卷通過ossfs掛載,可以支撐一些小文件的讀場(chǎng)景,對(duì)于寫場(chǎng)景穩(wěn)定性欠佳。在寫場(chǎng)景下,推薦使用其他存儲(chǔ)卷類型。 更多信息,請(qǐng)參見OSS存儲(chǔ)卷。 | |
阿里云CPFS | 支持 | 支持 | 否 | 高性能、高帶寬、共享存儲(chǔ)。 |
更多信息,請(qǐng)參見CPFS2.0靜態(tài)卷和管理CPFS隔離存儲(chǔ)卷。 | |
阿里云ENS云盤 | 支持 | 支持 | 否 | 低延時(shí),靠近終端用戶,非高可用,只能在單節(jié)點(diǎn)掛載。 | 更多信息,請(qǐng)參見什么是邊緣節(jié)點(diǎn)服務(wù)ENS、在ACK Edge集群中使用ENS云盤 | 支持按量付費(fèi)方式,詳情請(qǐng)參見計(jì)費(fèi)概述。 |
本地卷 | 支持 | 支持 | 否 | 低延遲、高IO,非高可用。 |
更多信息,請(qǐng)參見本地存儲(chǔ)卷。 | 本地盤的費(fèi)用包括在本地盤掛載的實(shí)例的費(fèi)用里。更多信息,請(qǐng)參見包年包月和按量付費(fèi)。 |
不同阿里云存儲(chǔ)服務(wù)提供存儲(chǔ)卷的使用限制不同,請(qǐng)閱讀下文。
使用限制
您在使用ACK存儲(chǔ)CSI插件時(shí)需要注意CSI插件本身的使用限制,也需要注意使用CSI插件時(shí)涉及的阿里云存儲(chǔ)產(chǎn)品的使用限制。
集群版本限制
使用CSI插件時(shí),需確保ACK集群版本為v1.14及以上,且kubelet運(yùn)行參數(shù)--enable-controller-attach-detach
需要設(shè)置為true
。如需升級(jí)集群,請(qǐng)參見手動(dòng)升級(jí)集群。
CSI插件使用限制
阿里云CSI插件已在社區(qū)開源,主要支持ACK集群。對(duì)于非ACK集群(非阿里環(huán)境集群、阿里云自建集群),由于集群配置、權(quán)限管理、網(wǎng)絡(luò)差異等原因,插件無法無縫支持。如果您處于這樣的集群環(huán)境,可以通過閱讀源碼、修改配置等方式進(jìn)行適配。更多信息,請(qǐng)參見alibaba-cloud-csi-driver。
存儲(chǔ)卷使用限制
存儲(chǔ)卷類型 | 使用限制 |
云盤存儲(chǔ)卷 | 請(qǐng)參見使用限制。 |
NAS存儲(chǔ)卷 |
|
OSS存儲(chǔ)卷 |
|
CPFS存儲(chǔ)卷 |
|
本地存儲(chǔ)卷 |
|
容器存儲(chǔ)功能概覽
ACK不同集群形態(tài)與各存儲(chǔ)服務(wù)能力的對(duì)應(yīng)關(guān)系如下表。
存儲(chǔ)分類 | 存儲(chǔ)能力 | ACK托管和專有集群 | ACK Serverless集群 | ACK安全沙箱 |
塊存儲(chǔ) | 云盤掛載和卸載 | |||
在線擴(kuò)容(Resize) | ||||
快照(Snapshot) | ||||
容器IO監(jiān)控 | ||||
文件系統(tǒng) | 支持XFS、 Ext4 | 支持XFS、 Ext4 | 支持XFS、 Ext4 | |
塊、裸設(shè)備 | ||||
快照恢復(fù) | ||||
云盤隊(duì)列設(shè)置 | ||||
數(shù)據(jù)加密CMK和BYOK | ||||
多可用區(qū)感知 | ||||
用戶自定義標(biāo)簽 | ||||
跨主機(jī)遷移 | ||||
文件存儲(chǔ)NAS | NAS創(chuàng)建,掛載,卸載 | |||
Samba掛載卸載 | ||||
高吞吐并行文件系統(tǒng)(CPFS) | ||||
回收站 (CNFS) | ||||
動(dòng)態(tài)數(shù)據(jù)卷-子目錄/共享目錄(CNFS) | ||||
數(shù)據(jù)加密CMK(CNFS,極速NAS) | ||||
容量控制Quota(CNFS) | 僅支持托管版 | |||
容量/IO監(jiān)控 (CNFS) | ||||
在線擴(kuò)容(CNFS) | ||||
對(duì)象存儲(chǔ)OSS | OSS掛載和卸載 | |||
數(shù)據(jù)加密BYOK | ||||
本地存儲(chǔ) | 塊存儲(chǔ)LVM管理 | |||
VolumeGroup自動(dòng)化配置 | ||||
節(jié)點(diǎn)LVM容量感知調(diào)度 | ||||
PMEM Direct Mem | ||||
PMEM LVM卷 |
容器網(wǎng)絡(luò)文件系統(tǒng)CNFS
管理容器存儲(chǔ)資源時(shí),您可以在ACK集群Pro版中使用容器網(wǎng)絡(luò)文件系統(tǒng)CNFS(Container Network File System)。CNFS可以提升NAS、OSS存儲(chǔ)卷的性能和QoS控制,將阿里云的文件存儲(chǔ)抽象為一個(gè)K8s對(duì)象(CRD)進(jìn)行獨(dú)立管理,包括創(chuàng)建、刪除、描述、掛載、監(jiān)控及擴(kuò)容等運(yùn)維操作,提供回收站、資源配額、存儲(chǔ)卷IO性能監(jiān)控等功能。關(guān)于CNFS的更多信息,請(qǐng)參見容器網(wǎng)絡(luò)文件系統(tǒng)CNFS、管理NAS生命周期、管理OSS生命周期。
CSI組件
CSI插件包括CSI-Plugin和CSI-Provisioner兩個(gè)組件,用于實(shí)現(xiàn)數(shù)據(jù)卷的自動(dòng)創(chuàng)建、掛載和卸載。CSI組件已在ACK托管集群和ACK專有集群中默認(rèn)部署。關(guān)于CSI組件的更多信息和升級(jí)步驟,請(qǐng)參見管理csi-plugin和csi-provisioner組件。
快速入門
關(guān)于ACK使用存儲(chǔ)卷的快速入門,請(qǐng)參見以下視頻:
FAQ
如何判斷集群使用的存儲(chǔ)插件模式?
您可以在控制臺(tái)查看節(jié)點(diǎn)注釋,或使用kubectl查看kubelet參數(shù)。
通過控制臺(tái)查看節(jié)點(diǎn)注釋
登錄容器服務(wù)管理控制臺(tái),在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在目標(biāo)節(jié)點(diǎn)操作列選擇
。在基本信息頁簽下查看節(jié)點(diǎn)注釋。如果存在
volumes.kubernetes.io/controller-managed-attach-detach: true
,表示集群存儲(chǔ)插件為CSI;如果沒有,表示集群存儲(chǔ)插件為Flexvolume。
通過命令查看kubelet參數(shù)
執(zhí)行以下命令查看kubelet參數(shù)。
ps -ef | grep kubelet
預(yù)期輸出:
--enable-controller-attach-detach=true
若
--enable-controller-attach-detach
的值為true
,則表示集群存儲(chǔ)插件為CSI。若
--enable-controller-attach-detach
的值為false
,則表示集群存儲(chǔ)插件為Flexvolume。
如何手動(dòng)為CSI插件授權(quán)?
CSI插件在數(shù)據(jù)卷的掛載、卸載、創(chuàng)建、刪除等操作上都需要您授予訪問其他產(chǎn)品資源的權(quán)限。通常集群已默認(rèn)安裝CSI組件且已有相關(guān)權(quán)限。如果您需要在集群中手動(dòng)完成授權(quán),CSI插件支持直接使用AccessKey授權(quán),也支持使用RAM角色授權(quán)的方式(默認(rèn))進(jìn)行授權(quán)。
使用AccessKey信息授權(quán)
直接在CSI部署模板中寫入AccessKey信息。
也可以通過Secret方式將AccessKey信息傳入環(huán)境變量。
使用RAM角色授權(quán):CSI插件使用AliyunCSManagedCsiRole角色來訪問您在其他云產(chǎn)品中的資源。更多信息,請(qǐng)參見容器服務(wù)ACK服務(wù)角色。關(guān)于如何為RAM角色授權(quán),請(qǐng)參見為RAM角色授權(quán)。
ACK托管集群:CSI使用的RAM角色權(quán)限的Token被保存在名為addon.csi.token的Secret中,CSI插件掛載該Secret即可實(shí)現(xiàn)RAM角色授權(quán),并訪問OpenAPI。
ACK專有集群:CSI使用其Pod所在的ECS節(jié)點(diǎn)的RAM角色。