多集群部署中的 Kubernetes 弹性 (RTO/RPO)

news2024/11/24 20:47:03

啊,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 的架构如下图所示:

我们讨论中相关的是这些集群之间的流量路线。从用户的角度来看,应用请求通过全球负载均衡器被路由到美国集群或欧盟集群。

那么,当美国集群中的节点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,多数据库管理平台(私有云)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1258034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kali系统复现环境:Vulfocus 提示服务器内部错误,请联系管理员的解决方法

Linux-kali系统复现环境:Vulfocus&&提示服务器内部错误,请练习管理员的解决方法 第一步: 先下载docker和docker-compose apt-get update apt-get install docker apt-get install docker-compose输入如下图命令,有版本…

HarmonyOS应用开发者基础认证【题库答案】

HarmonyOS应用开发者高级认证【题库答案】 一、判断 首选项preferences是以Key-Value形式存储数据,其中Key是可以重复。(错)使用http模块发起网络请求时,必须要使用on(‘headersReceive’)订阅请求头,请…

恒温恒湿试验设备故障维修指南

恒温恒湿试验设备是一种用于模拟特定温度和湿度条件下的环境的设备,通常用于测试产品在不同环境条件下的性能。设备可能会出现故障,导致温湿度控制不准确或其他问题。以下是一般的故障排除和维修指南,但请注意,具体的维修步骤可能…

01:编译lua及C调用

我们今天在windows平台编译lua,生成 lua动态库,lua.exe,luac.exe 我把这个目录上传到giee,使用下面命令获取它: git clone gitgitee.com:jameschenbo/lua_c_application.git 或者直接访问:访问网页 目录结构如下: build.cmd 是…

美女骑士开箱VELO Angel TT,银色天使,无痛骑行

阳光、女孩、自行车,脸上的笑容或明媚,或神秘,或青涩,在这个时候,世界上没有什么比骑行女孩更美的了!      在北京,有一个热爱骑行的女孩,名叫季思铭,目前是中国农业…

开发测试利器之Fiddler网络调试工具详细安装使用教程(包含汉化脚本)

一、Fiddler简介 Fiddler 是一款功能强大的网络调试工具,可以帮助开发人员和测试人员分析和调试网络流量。它通过截取计算机和服务器之间的HTTP/HTTPS请求,并提供详细的请求和响应信息来帮助我们理解和诊断网络通信。 Fiddler 可以用于各种用途&#x…

案例说法:智能网联车背后的安全隐患

随着汽车智能化、网联化的发展,汽车数据处理能力日益增强,未经授权对个人信息和重要数据采集、利用等数据安全问题逐步凸显。对车辆网络攻击、网络侵入等网络安全问题恐将危及个人生命安全、合法权益,甚至危害公共利益、国家安全,…

【活动回顾】sCrypt在柏林B2029开发者周

B2029 是柏林的一个区块链爱好者、艺术家和建设者聚会,学习、讨论和共同构建比特币区块链地方。 在2023年6月9日至11日,举行了第7次Hello Metanet研讨会。本次研讨会旨在为参与者提供一个学习、讨论和共同构建比特币区块链的平台。 在这个充满激情和创意…

js moment时间范围拿到中间间隔时间

2023.11.27今天我学习了如何对只返回的开始时间和结束时间做处理,比如后端返回了: [time:{start:202301,end:202310}] 我们需要把中间的间隔渲染出来。 [202301,202302,202303,202304,202305,202306,202307,202308,202309,202310] 利用moment的add进…

图解算法数据结构-LeetBook-树03_层序遍历奇数偶数行方向不同

一棵圣诞树记作根节点为 root 的二叉树,节点值为该位置装饰彩灯的颜色编号。请按照如下规则记录彩灯装饰结果: 第一层按照从左到右的顺序记录 除第一层外每一层的记录顺序均与上一层相反。即第一层为从左到右,第二层为从右到左。 示例 1&…

需要更改你的Apple ID吗?你可以在iPhone上管理它!一文教你如何更改Apple ID

你的iCloud帐户用于将你的数据存储在苹果的云存储服务中。它还连接到你的Apple ID,该ID用于使用iPhone和iPad进行在线购买。更改你的联系信息、发货地址和Apple ID密码很容易。 如何在iPhone和iPad上更改你的Apple ID联系信息 你可以在iPhone或iPad上更改你的姓名、电子邮件…

【数据库】MongoDB 简介:一种文档数据库

MongoDB 简介:一种文档数据库 1.MongoDB 介绍2.MongoDB 数据存储方式3.MongoDB 概念与操作3.1 Create Operations3.2 Read Operations3.3 Update Operations3.4 Delete Operations 4.MongoDB 特点5.MongoDB 应用场景 1.MongoDB 介绍 MongoDB 是一个基于分布式文件存…

Node——Node.js简介

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,它能够让JavaScript脚本运行在服务端,这使得JavaScript成为与PHP、Python等服务端语言平起平坐的脚本语言。 1、认识Node.js Node.js是当今网站开发中非常流行的一种技术,它以简单易…

Eureka简单使用做微服务模块之间动态请求

创建一个eureka模块,引入eureka 为启动项加上EnableEurekaServer注解 配置信息 orderService和userService的操作是一样的 这里以orderService为例: 引入eureka客户端 加上 LoadBalanced注解 配置 orderService和userService都配置好了之后 启动 这样我们在http://localhos…

Matplotlib画图接口_Python数据分析与可视化

Matplotlib画图接口 导入matplotlib显示图像画图接口 导入matplotlib 和numpy,pandas一样,在导入matplotlib时我们也可以用一些常用的简写形式: import matplotlib as mpl import matplotlib.pyplot as pltpyplot是最常用的画图模块接口,功…

KaiwuDB 亮相中国 5G + 工业互联网大会,助力新型工业化

11月19-21日,由各相关政府部门共同主办的“2023 中国 5G工业互联网大会”在湖北武汉盛大举行。作为我国“5G工业互联网”领域的国家级顶会,本届大会以“数实融合,大力推进新型工业化”为主题,聚焦新型基础设施、产业转型升级、技术…

麒麟V10服务器搭建FTP服务

概念 1.1介绍 FTP:File transfer protocol 文件传输协议 1.2原理 默认采用被动模式 被动模式FTP 为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被 动方式,或者叫做PASV,当客户端通…

计算机组成原理-Cache替换算法

文章目录 总览随机算法(RAND)先进先出算法(FIFO)近期最少使用算法(LRU)最不经常使用算法(LFU)总结 总览 随机算法(RAND) 没有选择性地考虑替换哪一块Cache&a…

Glare or Gloom, I Can Still See You – End-to-End Multi-Modal Object Detection

SENSOR-AWARE MULTI-MODAL FUSION G-log(-log(U)),U~Uniform[0,1] 辅助信息 作者未提供代码

解密Spring Cloud微服务调用:如何轻松获取请求目标方的IP和端口

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 目的 Spring Cloud 线上微服务实例都是2个起步,如果出问题后,在没有ELK等日志分析平台,如何确定调用到了目标服务的那个实例,以此来排…