容器技术尚未彻底解决的难题之一就是永久存储。自容器技术出现以来,就有假设——容器本身是虚拟的,而且可以围绕基础设施随意迁移。如果一个容器/应用要被迁移,只需在其它地方重新进行实例部署。不过事实证明,这将伴随两个问题——第一,客户倾向于容器要有一定的持久性,第二,应用数据必须要保存在某地。
宠物,家畜然后再是宠物
虚拟机与容器之间的大类比就是宠物VS家畜。虚拟机是宠物得饲养,爱护和照顾。容器是家畜任君挑选,随时还可以再换一批。除去一个显而易见的事实——我们提供容器时,它们必须对应用进行配置和映射,包括配置安全性和网络设置,存储等其它权限或访问应用数据以及其它部分的应用层次,这确实是一个很好的类比。这也意味着如今我们再次回归到了保养宠物的时代,只不过这次的宠物是一系列配置文件——说明如何协调应用程序而不是应用程序以基础设施为中心的展现。
结果是人们对使用容器技术的犹疑时间超出了预料,维护部署清单仍需再接再厉。
通过容器输入或访问数据
那么,就数据而论,我们该把数据(灵活地)放置到容器内还是增加更多永久性数据库(可能放在虚拟机上)以便容器访问?从简单形式出发,我们应该以前者为目标,但相比将应用的无状态部分(比如网络服务器)迁移到容器同时以更传统的形式保存数据,我们要做的工作会更多。
这两个问题造成了一个难题。数据具有的惯性和延迟令应用很难远程访问数据,除非数据访问协议允许特殊容迟(latency tolerant)。不过市场上已经出现了一些解决方案来解决这些问题,解决方案供应商包括ClusterHQ Flocker,Portworx, Hedvig以及StorageOS(将在DockerCon大会上发布测试版)。在需求方面,我们要将数据(容器)从一个地方迁移到另一个地方的能力——并确保权限不会对错误应用显示。如果数据正在迁移和传输的时候被访问,我们还要保持数据完整。当然,不论以后应用程序保存到哪儿,我们都必须要备份数据并确保能够修复它。