目前由于K8S生态对于有状态应用的支持还在不断完善中,建议可以试验性的将一些单机数据库在K8S上跑起来,支持CSI的分布式块存储或文件存储都可以。不建议将核心数据库跑在K8S上,因为核心一点的数据库,除了性能要求之外,对高可用、业务连续性等的要求可能是首要的,如何保证数据库实例在故障切换后始终可以更新有序、零数据丢失,对于K8S的存储子系统目前还是比较大的挑战。
收起现在市面上成熟的分布式存储有很多, 适应不同的存储场景,选哪种要考虑数据库的要求。随着k8s对local Storage的支持逐渐成熟,现在很多数据库(比如TiDB)直接使用lv,性能上没有损耗,然后在db层做高可用。
收起据我所知,很多公司已经把非核心业务的数据库容器化,同时也把大数据平台的组件容器化了,因此,从技术层面看,不成问题,但是要考虑一点,存储选型很重要,节点可以转移,数据是唯一的,不管存储具备多少个副本,数据的唯一性一定要保证,而且性能要高。
举一个实际的例子,通过nfs做持久化数据存储,熟悉docker的朋友都知道docker适合无状态的服务,而其实MySQL是需要持久化数据的,所以这里使用了nfs,自己搭建也是可以的,或者是用hostpath也是可以的,为什么推荐这俩,因为简单,新手很容易上手,而越是简单的东西越是好维护。数据库实例是会自己根据mysql的逻辑备份文件.sql后缀的备份文件自己恢复进实例里面的,yaml里面有注释,hubdocke上也有说明是把这个文件挂载到/docker-entrypoint-initdb.d 容器的这个目录下面即可。