ACS的容器存儲功能基于Kubernetes容器存儲接口(CSI),融合云盤、NAS、OSS等阿里云存儲服務,并兼容Kubernetes原生的EmptyDir、ConfigMap等存儲。本文主要介紹ACS支持的阿里云存儲服務,包括各類存儲服務的特點、應用場景、掛載方式等。
存儲基礎知識
Volume
容器中的文件在磁盤上是臨時存放的,這給容器中運行的應用程序帶來一些問題:
當一個Pod同時運行多個容器時,無法在這些容器之間共享文件。
當容器崩潰時,容器重建不會保留容器運行過程中產生的文件,這將導致文件丟失。
對于上述問題,Kubernetes抽象出了Volume(數據卷)來實現共享存儲、持久化存儲等能力。
Volume是Pod的一部分,只能在Pod中定義,不能獨立創建。Pod中的所有容器都可以使用Volume,但需要將Volume掛載到容器中的目錄下。
Volume是Pod與外部存儲設備進行數據傳遞的通道,也是Pod內部容器之間、Pod與Pod之間、Pod與外部環境進行數據共享的方式。
Volume有多種類型,例如EmptyDir、ConfigMap、PersistentVolumeClaim(PVC)等。
更多信息,請參見Volume。
PV與PVC
并非所有的Volume都具有持久化特性,為了實現持久化的存儲,容器存儲需依賴于一個遠程存儲服務,為此Kubernetes引入了PV和PVC兩個資源對象,來定義和使用存儲資源。
PV(PersistentVolume,存儲卷)
PV用于存儲持久化數據,是一種抽象的存儲卷,可以是網絡存儲、云存儲等。PV可以由集群管理員提前創建,也可以通過SC(StorageClass,存儲類)動態創建。PV獨立于Pod存在,可以被多個Pod共享。
PVC(PersistentVolumeClaim,存儲聲明)
PVC表達的是用戶對存儲的請求,它指定了Pod需要的PV的容量大小和訪問模式。PVC與PV是一一對應關系,在Pod中使用Volume關聯PVC,即可讓Pod使用到存儲資源。
更多信息,請參見Persistent Volumes和Storage Classes。
選擇云存儲
阿里云提供針對各種存儲資源(塊、文件和對象)的低成本、高可靠、高可用的存儲服務,您可以根據業務負載的存儲需求,考慮數據量、數據訪問頻率、IOPS和吞吐量等因素,選擇合適的云存儲服務。
云存儲 | 特點 | 應用場景 | 選型參考 |
非共享、低時延、高可靠的數據塊級隨機存儲。類似物理硬盤,支持分區格式化并建立文件系統。 |
| 支持以下類型的云盤:
| |
可共享訪問、彈性擴展、高可靠、高性能的分布式文件系統。提供高吞吐和高IOPS的同時,支持文件的隨機讀寫和在線修改。 |
| 支持通用性NAS和極速型NAS。 | |
面向智算業務,提供超高吞吐和IOPS,支持端到端RDMA網絡。 |
| 僅支持CPFS智算版。 CPFS智算版目前處于邀測中,目前僅部分地域和可用區支持。更多信息,請參見CPFS智算版。 | |
低成本的海量共享存儲空間,適合存儲寫入后較少修改的數據。 |
|
掛載云存儲
存儲插件
CSI是當前Kubernetes社區推薦的存儲插件實現方案,ACS提供了managed-csiprovisioner作為ACS集群的CSI插件,支持基于阿里云存儲資源的存儲卷。
在存儲卷的掛載、卸載、創建、刪除等操作上,CSI插件需要您授予其訪問阿里云其他產品資源的權限。CSI插件使用RAM角色授權的方式申請創建AliyunCCCSIPluginRole角色,從而訪問您在其他云產品中的資源。更多信息,請參見授權概述。
掛載方式
通過PV描述阿里云存儲資源(如云盤、NAS文件系統等),通過PVC綁定PV,然后在Pod的Volume中聲明要使用的PVC,可以實現掛載云存儲。根據云存儲資源對應PV在創建方式上的差異,掛載云存儲的方式可以分為以下兩種:
靜態掛載
根據已有的云存儲資源創建PV(即靜態存儲卷),在PVC中直接綁定PV,以此可以實現靜態掛載。該方式可以保證PV在容器啟動前已經就緒,適用于已有存儲資源的場景。
動態掛載
通過StorageClass定義要動態創建的云存儲資源,在PVC中關聯StorageClass,系統會根據PVC和StorageClass的配置,自動創建并綁定PV(即動態存儲卷),以此可以實現動態掛載。該方式無需提前創建PV,更加靈活和自動化。
各類型存儲卷的掛載操作參考如下:
云存儲 | 靜態掛載 | 動態掛載 |
云盤 | 暫不支持 | |
NAS | ||
CPFS智算版 | 暫不支持 | |
OSS | 暫不支持 |
除持久化存儲外,云盤也可以作為臨時存儲卷來存儲臨時數據。這類存儲卷會隨Pod一起創建和刪除。具體操作,請參見掛載臨時存儲卷。