如果是用了容器云,有持久化数据需求的应用应该如何部署,后端是否只能接nas,是否能在容器上部署oracle数据库,升级oracle数据库时能否直接部署一个新版本的数据库再挂载原有的数据升级数据字典即可,如果可以应该如何规划?是否又成功案例?
1、数据库可以容器化,但一般在开发测试环境,生产环境不建议数据库容器化;
2、有状态应用发布后端存储可以用NAS,也可以使用分布式存储,如ceph、glusterfs等存储,具体需根据业务使用场景,如有业务对性能要求较高,一般的存储可能都不行;
3、oracle可以容器化,主要是拉起来比较快,使用很方便,但oracle的一些高级特性在容器化以后无法使用或者配置很麻烦;
K8s已经是现在容器云的事实标准了。
在最开始(K8s 1.0时代),k8s是为无状态应用设计的。无状态应用可以被重启和重新调度,或者快速的扩展出多个副本实例,K8s的优势(自动化、弹性、故障自愈)被充分发挥。这时,虽然说也可以在k8s中运行容器化的数据库实例,但是要管理这些数据库,保障数据的可用性是相当复杂的,这个阶段k8s对数据库是不友好的。
随着K8s 1.5版本开始支持StatefulSet,有状态应用正式成为了k8s的一等公民,通过持久卷(Persistent Volume)可以解决数据库的数据持久性问题。尤其是到K8s 1.10有了CSI之后,企业也可以使用性能更高、可靠性更好的外置存储了,当数据库Pod被调度到其它节点重启的时候,共享的持久卷可以在新的节点上重新挂载给数据库Pod。这些解决了数据库的数据安全性和可用性的基础设施问题,但k8s本身并不理解每个数据库的运维的逻辑,因此数据库的运维部分仍然有很多地方需要管理员来处理,比如数据库状态的监控、主/从数据库的切换、数据备份等。
让数据库能真正在k8s上变得好用的是Operator的出现。Operator使得数据库厂商和第三方可以去扩展K8s API,将数据库运维的能力由Operator来实现出来。这大幅简化了在k8s中运维和管理数据库的操作,把K8s变成一个优质的数据库运行平台。
目前主流的开源数据库都已经有了K8s支持,并提供了相应的Operator来方便数据库在k8s上的运维,包括Cassandra、MySQL、PostgreSQL、MongoDB等,以及国产的TiDB。
传统的大型商业化数据库现在也提供了K8s支持,包括微软的SQL Server,IBM的DB2和Oracle。
综上所属,数据库在K8s上运行是大势所趋,并且从开发环境和测试环境的试水,已逐渐走向生产环境的应用。
收起可以是可以,但是不建议。
oracle数据库通常是追求稳定、而且笨重,IO要求也比较高,不太适合容器化部署
因为应用通常是分层的,所以应用服务是可以容器化部署,而数据库尽可能在物理服务器上部署,通过网络访问数据库。
测试环境可以把oracle等部署到容器,为的是敏捷、一致性考虑,容器重部署则状态重置,就不需要每次清理测试数据,对于回归测试等还是很方便的
总的来说,要根据实际考虑合适的技术特性和应用场景,选择合适的方法
收起