啊,Kubernetes!咱们DevOps应战的万灵药。

Kubernetes是一个开源的容器编列东西,本应加快软件交给、维护咱们的运用程序、下降成本并削减咱们的头痛问题,对吗?

不过说真的,Kubernetes已经彻底改变了咱们编写和交给软件的方式。跟着EKS、AKS、GKE、红帽OpenShift、Rancher和K3s的普及,Kubernetes真实赢得了容器编列战役。跟着咱们扩展运用程序、云渠道和数据,咱们开端识别出Kubernetes在安全性和易用性方面尚未彻底满足需求的领域。因而,咱们需求找到方法来帮助Kubernetes跟上咱们的增加。

Kubernetes实践者转向第三方东西进行网络、安全和有状况运用的弹性,这有助于使他们的布置更加可靠。

在这篇博客中,咱们将更深化地评论Kubernetes运用的数据弹性。

Kubernetes旨在处理运用编列的应战,假设是Kubernetes节点是时刻短的。但是,在现实中,运用程序的确会消费和/或产生数据。在Kubernetes中,这被称为StatefulSets。此外,Kubernetes对象、CRDs、工件等都是在集群失败时需求可用的细节,因而意识到即使是Kubernetes布置也需求灾祸康复战略。

StatefulSets的兴起

StatefulSets设计用于处理需求仅有网络标识符和安稳存储的有状况工作负载。数据库、消息队列或分布式文件体系的每个实例一般需求安稳的网络身份和耐久存储。StatefulSets经过为调集中的每个pod供给有序的、仅有的网络标识符和耐久存储来应对这一应战。当然,还有很多的Kubernetes存储布置依赖于静态卷附件,但它们没有水平扩展才能,因而现在不在这篇博客评论范围内。

除了供给仅有的ID和扩展才能外,StatefulSets还供给了将耐久卷挂载到每个pod的才能。这允许有状况运用存储和拜访在pod重启或重新调度时持续存在的数据。StatefulSets中的每个pod都会收到自己共同的耐久卷,完成数据本地性,最大极限地削减对其他pod的影响。

容器存储接口(CSI)规范是最广泛运用的API规范。它使得Kubernetes中的容器化工作负载能够拜访任何块或文件存储体系。2019年末发布的容器存储接口驱动程序和快照为StatefulSets打开了大门。参见Kubernetes CSI。

云原生计算基金会(CNCF)结构包含了各种项目,以满足Kubernetes的存储需求。但是,实践者有必要通晓存储基础知识,这一般不是与DevOps相关联的技能。

像Portworx by Pure、Rancher Longhorn、Rook和LINBIT这样的公司正在为容器存储设定新规范(此外还有NetApp和HPE等供应商的产品)。它们供给了多种企业特性,使容器存储更加高效。

有了这些布景,咱们转向考虑Kubernetes中多集群数据库弹性。

单集群运用

关于在单个集群中运转的运用程序,Kubernetes(与CSI存储组件一同)供给了卷仿制的功用。每个耐久卷能够设置为在本地具有必定数量的副本(一般是3个)。

如果节点失败,Kubernetes将采取举动。它将在新节点上重启服务,并将其附加到仿制的卷版本。这有助于避免数据丢掉。(暂时不考虑静态CSI或NFS驱动)

关于在本地仿制数据的东西,数据是同步仿制的,因为它是一个本地集群。运用Kubernetes操控平面,节点重启是即时完结的。因而,康复时刻被认为是零。

从康复视点来看,这被认为是零康复时刻方针(RTO)。康复点方针(RPO)在这种状况下也或许是零,但这当然取决于数据损坏、日志记录等的缓解办法。

放大到复杂环境,状况就更加复杂了。这些环境包含跨多个集群、渠道乃至云供给商的集群。

多集群数据库弹性

了解多集群 Kubernetes 的原因和方式或许很困难。走运的是,Traefiklabs 的朋友写的这篇文章 具体解说了 Kubernetes 多集群。

多集群 Kubernetes 的架构如下图所示:

多集群布置中的 Kubernetes 弹性 (RTO/RPO)

咱们评论中相关的是这些集群之间的流量路线。从用户的视点来看,运用请求经过全球负载均衡器被路由到美国集群或欧盟集群。

那么,当美国集群中的节点1的一个Pod需求与欧盟集群中的节点1通讯时会发生什么?因为两个集群之间的间隔和复杂性,这或许构成一个应战。至少,数据有必要穿过至少两个网络边界,从美国集群动身,穿越大西洋,进入欧盟集群。

这种在本地网络和外部网络之间的网络流量流称为南北流量。“北”指的是从本地网络到外部网络的出站流量。“南”指的是从外部网络到本地网络的入站流量。

从数据平面的视点来看,集群之间的南北流量引入了更高的推迟和比较本地集群内部流量的下降可靠性。而集群内部的流量是同步的(快速、可靠);长途集群之间的流量因而是异步的(更慢、不那么可靠)。

关于那些希望了解更多关于同步和异步流量的人来说,或许想要检查这篇文章。

南北流量和同步/异步通讯怎么与Kubernetes多集群数据库弹性相关联?

Kubernetes中的CSI存储衔接器运用同步通讯处理本地集群内的流量。这意味着数据一起写入到主数据卷和副本数据卷。

长途集群的数据首先在本地写入。然后,数据的快照副本定期发送到第二个集群。这是异步完结的。

这种方法的不同也对数据弹性以及在故障后怎么康复数据产生了影响。

Kubernetes在本地集群内的灾祸康复场景中的康复是即时的。这是因为数据被一起仿制到本地副本。因而,数据可用性也是即时的。

从技能术语来说,咱们追寻两个方针。康复时刻方针(RTO)是从故障中康复所需的时刻。康复点方针(RPO)是允许的最大数据丢掉量。

因而,本地Kubernetes集群内的灾祸康复能够说是零RPO / 零RTO

(关于Kubernetes中RPO和RTO考虑的深化评论,我强烈推荐Bijit Ghosh和Matt LeBlanc的文章。)

但是,在长途集群的状况下,状况有所不同。在评价跨多渠道或多云运用程序时,云架构师或SRE应考虑异步仿制对康复时刻方针(RTO)的影响。仿制副本的运输、南北流量以及在康复地点的活泼集群上的康复都需求时刻。这意味着灾祸康复操作有时刻推迟。

这种时刻推迟或许是明显的。保守估量标明,CSI处理方案能够将RTO削减到15分钟。这意味着咱们能够有零RPO和15分钟的RTO。

大多数DevOps团队和云架构师专心于单集群、单区域和单渠道布置。他们或许没有考虑灾祸康复架构和要求。因而,许多前期采用者或许会对15分钟的RTO感到满足。

传统的基础设施架构师和数据所有者或许想要探索市场上的新处理方案。这些处理方案能够帮助他们完成挨近零的康复时刻方针和跨多个Kubernetes渠道的灾祸康复。

像KubeSlice这样的东西能够经过在多个集群或渠道之间树立低推迟数据平面互连来下降RTO阈值。这有助于加快Kubernetes运用程序和数据的康复速度。

KubeSlice经过运用层虚拟化将南北流量转换为东西流量,经过安全/加密的衔接,从而消除了穿越网络边界的需求。这为数据平面创建了低推迟的衔接,并使数据在灾祸康复站点的同步仿制成为或许。

KubeSlice使长途集群看起来像是主集群的本地集群。这使康复挨近于完成零康复时刻方针(RTO)。

无论采用哪种康复方案,运用程序所有者都应仔细考虑他们的运用程序和数据弹性需求,并相应规划。

正如《Kubernetes上的数据》陈述指出的那样,将数据布置在Kubernetes上,三分之一的安排看到生产力增加了两倍,这关于各个技能成熟度水平的安排都有益处。

总结

容器存储接口(CSI)规范和像Portworx和Rancher Longhorn这样的项目是向Kubernetes耐久性运用的软件界说存储方法迈出的良好开端。

文章评论了Kubernetes中多集群数据库的弹性,从单集群运用的弹性开端。它解说了Kubernetes怎么处理节点故障时的卷仿制,确保单集群内零康复点方针(RPO)和零康复时刻方针(RTO)。但是,当处理跨多个渠道和云供给商的多集群环境时,复杂性就出现了。文章评论了南北流量和长途集群之间的异步通讯的应战,并解说了这些应战对灾祸状况下的数据弹性和康复的影响。

文章介绍了KubeSlice作为一种东西,能够经过在多个集群或渠道之间树立低推迟数据平面互连来下降RTO阈值。它将南北流量转换为东西流量,使Kubernetes运用程序和数据的康复更快,并完成数据在灾祸康复(DR)站点的同步仿制。文章强调了仔细考虑运用程序和数据弹性需求的重要性,并提到了在Kubernetes上布置数据的优点。

总的来说,文章聚焦于Kubernetes中与数据弹性相关的应战和处理方案,特别是在多集群布置中,并强调了像KubeSlice这样的东西在完成更快康复时刻方面的作用。


作者:Ray Edwards

更多技能干货请重视公号【云原生数据库

squids.cn,云数据库RDS,迁移东西DBMotion,云备份DBTwin等数据库生态东西。

irds.cn,多数据库管理渠道(私有云)。