容器云平台存储不仅仅是数据的持久化存储,也包括容器云平台自身的存储需求以及镜像存储需求,甚至需要考虑云上中间件,比如Kafka等对存储的需求。
互联网公司的金融业务对金融行业的发展带来的巨大冲击和挑战,逼迫金融行业不得不考虑互联网金融业务和移动业务的发展,这又对技术平台和技术能力提出了新的要求和挑战。互联网金融业务和移动业务要求对业务需求快速响应,甚至是小时、分钟级,这就要求能实现业务的敏捷响应、敏捷开发、持续集成、持续部署、持续改进,实现自动化的运维、容错、异常修复、弹性伸缩、灰度发布等能力,要支持这些能力,环境一致性要求、基础设施服务平台等要求需要满足,才能在激烈的竞争中生存下来。金融公司业务的发展趋势,恰如如逆水行舟,不进则退,不得不采用新的技术和平台。
容器云平台提供了环境一致性能力、支持弹性伸缩、灰度发布、蓝绿部署等能力,又和DevOps开发运维一体化方法论、微服务架构契合,实现持续集成、持续部署、持续监控、持续反馈、持续改进闭环。另外大数据、AI等应用的部署运维也需要考虑构建共同的基础设施服务平台,容器云生逢其时。
随着容器技术的成熟和容器云平台的实际落地,越来越多的企业已经建设或者尝试正在建设容器云平台。容器云平台如何管理并使用好基础资源CPU、内存、存储、网络等资源是其关键的能力之一,而存储作为容器云平台的基础设施资源,保证着容器云数据的安全,使数据能安全持久的存储、查询、不丢失。不过容器技术和容器云平台对存储的使用与原来相比是不同的,容器内部存储是不支持持久化数据存储,这就需要考虑采用外部存储挂载到容器上,在容器迁移、消亡、重启等活动中保证数据的安全。数据是企业的核心资产,在激烈的市场竞争中,已经越来越体现出其巨大的价值。因此,在建设容器云平台的时候,是必须要考虑容器的存储的,如:存储方式、存储介质、存储产品、存储数据量、性能需求等。此外,容器云平台存储不仅仅是数据的持久化存储,也包括容器云平台自身的存储需求以及镜像存储需求,甚至需要考虑云上中间件,比如Kafka等对存储的需求。
一、容器存储方式
存储资源是容器云的基础设施资源之一,保证着容器云平台的正常运行和数据持久化能力。容器云存储的方式有容器内部存储方式、容器宿主机磁盘存储方式、容器远程卷存储方式等。
容器内部存储方式
容器内部存储即容器的读写层,但在容器销毁时读写层也销毁,在读写层的数据会丢失,就象内存中的数据,应用进程关闭,内存中数据就会清空。容器内部存储方式只可作为容器运行时临时的存储方式。
容器宿主机本地磁盘存储方式
容器宿主机本地磁盘存储是使用本地存储卷,其是对本机磁盘的映射。本地卷不可创建快照。优点是不需要独立存储,创建操作简单,读写效率高。缺点是不能在节点间实现容器漂移。
容器远程卷存储方式
远程卷包括NFS和分布式远程存储卷,NFS的创建需要增加设备、读写权限、设备目录的信息;分布式存储卷包括Ceph、GlusterFS、ScaleIO、Portworx等。
二、容器云存储的重要性
存储是容器云平台提供的基础资源之一,要安全稳定的使用容器云平台,对容器云平台的存储资源,在采用和实施容器云平台之前,需要提前做些研究和规划,因为:
数据是企业的重要资产,保证数据不丢失,数据完整,才能更好的开展业务。
容器和虚拟机或物理机技术实现侧重不同,容器侧重无状态应用,要支持有状态应用,数据存储必须基于业务需求提前进行考虑和规划。
容器云是基础平台,涉及平台组件、镜像、应用、中间件等多个方面,每个方面都可能有不同的存储需求。要获得理想的性能和结果,需要全面的考虑每个方面,存储等作为基础设施资源,更是必不可少的部分。
容器是用来承载应用的,这点要深刻理解。应用各个层次的数据具有潜在的价值,捕获并处理、存储、分析这些数据是获取价值的步骤。因此,应用数据的持久化是容器云平台支撑业务应用的重要的基础能力之一。建好基础,才能更好的服务于业务应用。
凡事预则立,不预则废。说明了规划计划的重要性。临时抱佛脚总会对业务产生或多或少的影响,容器云是基础设施平台,存储是容器云的基础资源,基础设施资源决定上层应用服务的能力,目前IaaS层还无法直接为容器云平台提供需要的所有存储资源,和 IaaS的对接也存在技术难点,没有完整的数据就难以快速响应业务需求,难以快速超越或者跟随对手,大数据、AI等技术支撑的云上业务应用就难以顺利实施。
说到底,数据、还是数据!是核心资产,需要重视其安全的保存和备份、重视其存储方式、介质、存储性能等影响。
三、容器云存储需要考虑的几个方面
在采用容器云平台时,存储的使用大概有这几个方面需要考虑:容器云平台自身需要的存储、应用数据持久化存储、镜像存储、中间件部署需要的存储。最重要的是容器云平台自身的存储和数据持久化存储。数据持久化存储数据量有些公司可能会比较大,有些可能较小。在有大量存储需求的时候就更要做好规划。数据存储很重要的一点是支持容器迁移,随容器迁移。不同的业务应用对存储的需求不同,所以这里没有明确的标准,需要根据实际情况来确定。越重要的数据存储的安全性要求越高。
容器云平台自身的存储:容器云平台自身有很多组件,比如ETCD,会存储容器云平台的状态和配置信息,其对存储的性能有较高的要求。etcd一旦出现意外,容器云平台可能瘫痪,所以etcd的存储对稳定性、安全性、性能等方面要求比较高。同时可能还需考虑etcd的集群部署。
应用数据持久化存储:包括宿主机本地存储卷和远程存储卷。本地存储卷是对本机磁盘的映射,本地卷容量和读写性能由磁盘的规格和性能决定,本地卷不可创建快照。优点是不需要独立存储,创建操作简单,读写效率高;缺点是不能在节点间实现容器漂移。远程卷包括NFS和分布是远程存储卷,通常是容器云平台的首选。
镜像存储:镜像仓库用于存储应用镜像和中间件镜像等所需的空间。
中间件部署需要的存储:运行某些中间件需要的存储需求。不同的中间件可能对存储有不同的需求。
四、持久化存储需求
作为用户,我们关注存储其实更多的是关注数据持久化存储,数据是核心资产,重要数据必须持久化存储并备份,而容器的内部存储难以做到持久化,本地存储又难以迁移,所以更多的话是采用远程存储卷来满足持久化存储需求。这是因为:
从业务角度,应用运行时异常,状态、数据等存储起来用于恢复或重试执行。
日志数据是业务跟踪、查询、统计、分析等的重要基础,所有的操作都要基于数据的持久化存储。
容器弹性伸缩特性非常切合微服务扩缩需求,日志、运行时数据、结果等跟随容器迁移且不随容器销毁而消失。
Kafka、mysql等需要持久化的存储支持来部署并保存数据。
数据量累积,会带来质变影响。
大数据业务、AI业务等基于容器云的部署需求。
大数据、人工智能都需要数据来支撑,所以这块的数据存储量将会越来越大。比如每天的日志数据可能就有几十个G,几百个G,这些数据经过清洗处理分析,可能会带来新的价值增长点,也会带来越来越多的新业务创新。但随着数据量的累积,也会给存储带来压力。所以不同的数据可能需要考虑采用不同的存储方案。这可能有涉及到数据的治理问题了。远程卷有NFS、NAS、SAN、Ceph、GusterFS等产品可以选择,不同需求选择不同的产品。
镜像对存储的需求相对简单,镜像通常也是需要不断的更新的。不过镜像需要考虑不同环境镜像库的镜像存储。通常情况下,镜像仓库可以非容器化部署,相对来说主机存储资源管理起来会更方便。
中间件存储更多是因为中间件部署时,不同中间件对存储的需求可能不同。最典型的比如Kafka,需要多块磁盘、文件系统使用XFS以及Mount 文件系统时使用noatime选项等以达到更好的性能。这就需要基于不同的组件来确定选择什么样的存储。不过在容器云上实现目前还不是特别便利。可以考虑非容器部署。
五、无容器存储思路
目前说起容器云存储,大家都会想到Ceph或GlusterFS等。我们PoC测试的时候也随大流测试了一下。大家都说这么配,所以我们也就这么配了。不过后来想想,我们mount存储卷,目的是为了数据持久化,为了有状态应用。但是如果按照云原生的理念,不是为了云而硬性迁云,可能不需要太多存储资源。还有就是数据可以通过实时数据流方式采集到数据中心或数据处理终端,让数据运转起来、流转起来,而不是仅仅存储起来,充分开发数据的价值。沉睡和静止的数据无法带来价值,运转起来的数据才有价值,实时性越高的数据越有价值。这也是构建大数据平台大数据分析的价值。
从这个角度来说,我们可以让数据运转起来,不用都存储于磁盘,或者在容器云平台可以采用这种思想,把数据从容器中抛出来,然后再进一步处理或存储。这样存储资源的使用可能就简单多了。比如应用服务日志,可以直接从容器中把日志信息从日志文件或标准输出中采集到,然后扔到ES或Kafka等消息中间件。这个功能由容器云平台来提供,用户也就不需要关心实现的细节。更重要的是,通过ES或Kafka可以实时进行数据的进一步处理,也避免数据在容器平台持久化存储的一些问题。
这只是个人的一点想法,具体的可能更多还是要考虑数据在容器云平台的持久化存储。相应的产品和技术,大家讨论的也挺多,这里就不赘述。
六、容器云存储方案选择
采用容器云选择存储时,需要基于实际的业务需求来确定,深刻理解容器云平台是用来承载应用的,是为企业业务应用服务的。这也是我们在选择容器云产品时一再强调的。我们采用容器云不是为了容器,而是为了业务应用,为了业务。不同业务对存储的需求不同。有安全性要求比较高的,也有可以容忍数据丢失的等。不同的业务需求,采取的存储方案、存储产品就会不同,因为产品不一样,所付出的资金代价是不一样的。
选择产品时还需要考虑企业自身的技术实力,开源产品有开源产品的优点,商用产品也有商用产品的优点,对于像我们这样的金融公司来说,更多要考虑的是数据的安全性,在采用开源产品时就会很谨慎,后期服务是一个很重要因素。得有公司来兜底,哪怕多花些钱,买个心安。
另外还要考虑是否有能力驾驭选择产品或技术。开源产品对技术能力要求比较高,选择开源产品,最好有相应的技术人员储备。开源产品技术领先,版本迭代变化也比较快,需要有相应的人力去把控。如果做不到这点,选择商用产品是合适的,虽然成本高点,但经过了众多企业的技术验证。特别对传统企业来说,技术实力一时还比较难达到要求,无法把控产品,最好不要轻易使用开源的产品。
还有可能需要考虑容器云产品和架构方案,以及是否有IaaS层的技术支持,IaaS层采用的技术等方面。
七、存储、容器云和大数据
我们考虑存储不仅仅是容器云需要,大数据平台也需要,存储可以单独作为一块来考虑,可以不绑在容器云项目上。综合容器云平台,大数据平台建设,统一来考虑存储资源的建设,可能会更好些。我们的最终目的是能为容器云平台提供存储资源也就够了。