决定如何为容器实现持久存储的***步是确定您将使用的存储系统的基础类型。在这方面, 通常有三种主要选项:文件系统存储、块存储和对象存储。
文件系统存储
文件系统存储是将数据存储为文件,这一存储形式已存在数十年了。每个文件都有一个文件名, 并且通常具有与其关联的属性。一些常用的文件系统包括NFS和NTFS。
当涉及到配置容器以持久存储数据时,文件系统存储是实现持久存储数据的最普遍的方法之一。
容器驻留在主机服务器上。这个主机服务器包含它自己的操作系统和它自己的文件系统。可以将容器配置为在主机服务器的文件存储的专用文件夹内存储持久数据。
普通主机持久性引起的主要问题是,它完全破坏了容器的可移植性。当使用主机持久性时,依赖项资源(持久存储)驻留在宿主服务器的原生文件系统的容器外。为了解决此问题, 已经创建了其他的主机持久性。
结论
文件系统存储可能是最笨拙的方法,因为文件系统在设计之初并没有把可移植性纳入考虑范围。有一些方法可以实现容器友好型的文件存储系统,而这通常要通过跨多个服务器分布文件系统来实现。
块存储
块存储是容器的另一个存储选项。块存储存储块中的数据块。块仅通过其地址识别。块没有文件名,也没有自己的元数据。只有当块与其他块组合形成完整的数据块时,它们才具有意义。
由于其性能,块存储通常用于数据库应用程序。块存储也通常用于提供快照功能,它允许将volume回滚到特定时间点,而无需还原备份。
对于容器,块存储有时以容器定义的存储的形式实现。容器定义的存储是一种软件定义的存储形式,但专门用于容器化环境中。此存储通常在专用存储容器内部实现。
存储系统可以包含多个块存储volumes,并且这些volumes中的每一个只能由单个主机加载。在这种情况下,将块存储控制器划分为大量较小的块存储控制器,每个存储控制器都可以映射到不同的块存储volume。如果所有这些块存储volumes都驻留在物理磁盘的公共池中,那么将允许编排引擎根据需要创建块存储volumes。
结论
块存储比文件系统存储更灵活,这样更容易适应容器环境的块存储。唯一的挑战是确保块存储数据在由多台主机组成的环境中可用。这可以通过分布式存储来解决。
对象存储
对象存储与文件系统存储或块存储不同。它不是通过块地址或文件名引用数据,而是将数据存储为对象并由对象ID引用。对象存储的优点在于它具有很强的伸缩性,并且在将属性与对象相关联方面具有高度的灵活性。使用对象存储的缺点是它执行起来不如块储存。
由于对象存储主要是为实现可伸缩性而设计的,因此它是公共云提供商的热门选择。而典型的应用程序可能被设计为通过文件系统或SCSI调用访问数据,对象存储需要基于HTTP的REST调用,例如Get或Put。因此,应该将对象存储保存在需要大规模可伸缩存储的应用程序或需跨地域的存储上。
结论
由于依赖于REST调用,对象存储可能更复杂。但对象存储提供的可伸缩性使它成为一个很好的选择, 因为在容器环境中,大规模可伸缩性常常是大家优先考虑的。