当决策者考虑在Kubernetes上部署数据库时,第一个问题是:“Kubernetes为有状态的工作负载做好了准备吗?”多年来,答案都是“不要这样做”,而且理由充分。Kubernetes最初设计用于处理无状态工作负载的编排。但这项技术已经成熟,是时候重新考虑在Kubernetes上运行数据了。
这涉及三个重要的技术话题:Kubernetes成熟度、Kubernetes对有状态的处理能力、容器中运行数据库的可用性和性能特征。
Kubernetes有多成熟?
虽然评估任何技术的成熟度都不是一个简单的过程,但可以使用可靠的信号。Kubernetes是一个CNCF毕业项目,2020年调查报告显示,“91%使用容器的受访者使用Kubernetes,其中83%在生产中”。
自2017年11月以来,分析公司Thoughtworks将Kubernetes视为公司应该采用的成熟技术,并解释说“在将容器部署到机器集群中时,它已成为我们大多数客户的默认解决方案。”
Kubernetes为有状态做好准备了吗?
Kubernetes的有状态功能经常受到质疑,第一代有状态技术Persistent set(“PetSet”)是(部分)罪魁祸首。这个功能被弃用,取而代之的是Kubernetes中当前的有状态技术:StatefulSets。2018年GA,如今它被用于无数为Kubernetes容器提供持久、非短暂存储的解决方案。这就是Vitess或其他云原生数据库在Kubernetes中部署的原因。
最值得注意的是,StatefulSets将PersistentVolumes(“PV”)挂载到容器中。这些PV通常由Kubernetes节点外部的存储提供,以网络驱动器或软件定义的存储解决方案(如OpenEBS)的形式提供。本质上,Kubernetes和云中使用的存储与AWS上使用的EBS卷或GCP上使用的持久磁盘相同,我们可以期待同样的成熟度。
K8s上运行数据的性能
当然,Kubernetes的数据库性能会受到影响,不是吗?容器被错误地认为是“轻量级虚拟机”,它们是非常薄的抽象层,包装着Linux内核提供的文件系统、进程和网络空间。如果只使用短暂的容器存储数据,可能会有一些开销。但是,如果使用外部PV存储,开销可以忽略不计。
那么容器的短暂性又如何呢?这不会影响高可用性吗?容器只是进程的“包装器”,所以它们的生命周期与进程的生命周期有关。换句话说,容器将与其中运行的数据库进程一样稳定。
在Kubernetes上运行数据库彻底改变了运行数据库的方式
在Kubernetes上运行数据库有明显的优势:部署简单、使用相同的编排工具管理整个堆栈、自动修复和自动重新设置失败的容器从而提高可用性。例如,如果运行数据库的一个节点出现故障,Kubernetes将自动进行自我修复,重新调度另一个节点上的工作负载。通过与数据库管理软件的合作,它可以选择一个在以前存在的副本上运行的新数据库主节点,并将新节点重新初始化为一个新副本,所有操作都是自动完成的。不过,还有其他更重要的原因让你想在Kubernetes中运行数据库。
大多数公司希望将数据库作为DBaaS(“数据库即服务”)。自我配置自愈数据库,包括备份和监控。虽然这是大多数云提供商提供的,但通过使用Kubernetes自己动手可以节省大量成本,并提供额外的功能,如多云和云可移植性。
这些功能通过Kubernetes Operators提供。Operators是Kubernetes的特定于应用程序的扩展,它对部署和操作自动化进行编码,同时向用户公开简单的接口。高级数据库Kubernetes Operators带来了以下好处:
——部署和更新的声明性方法,使其100%对GitOps友好,非常适合任何使用CI/CD的公司。Operators定义的CRD(自定义资源定义)是高级对象(通常作为简单的YAML文件接口),允许以简单的方式部署和管理复杂的数据库架构。
——自动化“第二天操作”:部署、高可用性、备份和监控;打补丁、“吸尘”、去除膨胀、重新索引等。Operators可以将这些操作编码到CRD、YAML文件中,以便自动执行这些操作。这种方法的一个例子是StackGres,一个在Kubernetes上运行Postgres的高级operator,它完全自动化了上面提到的所有操作。
——将数据库功能外部化到第三方、知名的Kubernetes组件,如Envoy代理;进行监控的Prometheus和Grafana;或用于SSL证书管理的Cert Manager。数据库operators可能依赖这些组件来卸载数据库功能,减少用户操作它们的认知知识,因为它更熟悉,并获得更高级的功能。
正如高盛、Zalando和Flipkart等领先公司所表明的那样,在Kubernetes上运行数据库不仅是未来,也是现在。与任何技术一样,在部署生产工作负载之前,都应该进行仔细和客观的评估。
毫不奇怪,Data on Kubernetes 2021报告中的数据发现,90%的公司认为Kubernetes已经为有状态工作负载做好了准备。这些组织中的绝大多数(70%)在生产中运行有状态的工作负载,数据库排在首位。那些运行75%或更多生产负载的人说,他们的生产率提高了2倍或更高。
考虑到在Kubernetes上运行数据库的所有优点,企业应该有所行动。在Kubernetes上运行数据是全面编排基础设施的最新前沿,笔者相信这一转变将为企业带来可观的价值。
原文链接:
https://thenewstack.io/kubernetes-will-revolutionize-enterprise-database-management/