QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

平台抽象拯救 Reddit: Kubernetes 配置变化不再是难题

  • 2025-01-27
    北京
  • 本文字数:3379 字

    阅读完需:约 11 分钟

大小:1.59M时长:09:16
平台抽象拯救Reddit: Kubernetes配置变化不再是难题

三年前,Reddit 的基础设施工程师团队大部分时间都在忙于救火。本文谈的就是他们如何通过开发一个平台抽象来简化运维并重新掌控局面的故事。


Reddit 于 2022 年 3 月 13 日瘫痪的事件是一个粗暴的警示,提醒这家公司需要以新的方式管理它的基础设施。

 

臭名昭著的“Pi Day”全站中断事件持续了刚好 314 分钟。事件源于从 Kubernetes 1.23 到 1.24 的集群范围升级操作,该升级导致了一些微妙的不可预测行为,迫使基础设施团队进行回滚,这本身就是一项高风险行动。

 

即使在那时,公司工程师也知道运维方式需要改变了。

 

这个广受欢迎的社交新闻论坛彼时正在扩展其服务器堆栈,使服务器跨多个可用区以提高可靠性,最终目标是在全球范围内提供服务。其他一些围绕广告投放和机器学习的项目也面临着各自的挑战。此外,公司高管正在为 IPO 做准备。

 

Reddit 基础设施团队的高级软件工程师 Karan Thukral 那时指出,该公司需要一个新的平台抽象。随着公司的发展,他们需要新的平台抽象来继续高效运维。

 

Thukral 与 Reddit 软件工程师 Harvey Xia 在最近的 KubeCon+CloudNativeCon 北美会议上发表了演讲,介绍了他们的基础设施团队如何创建新的平台抽象,从而提前做好计划,摆脱被动的救火模式。

 

“从技术上讲,我们做到了用更少的人手来解决更具挑战性的问题,”Thukral 说。“由于我们在过去几年中投入了大量资源,我们得以有更多的专门工程时间来主动解决问题,而不是被动地救火。”

神秘的命名空间

2022 年,该公司运行着 20 个 Kubernetes 驱动的生产集群。基础设施团队有 92 名工程师,比公司部署的 706 名应用工程师少得多。他们的大部分工作都是帮助应用工程师。

 

一个问题是命名空间的创建。在 Reddit 中,每个在 Kubernetes 上运行的应用程序都需要一个命名空间,可以通过 Helm 图表或 Kustomize 清单指定。应用程序开发人员并不是编写这些规范的专家。

 

这导致了大量剪切和粘贴操作。结果错误悄然而至,而审阅者并不总能发现这些错误。这块的审查流程为应用审查过程增加了额外的 24 小时。

 

Thukral 说,由于时区差异,可能需要将近一周的时间才能获得命名空间。而且,糟糕的配置设置仍然渗透到了整个持续集成流程中,这可能会导致停机故障。

 

Reddit 对命名空间的管理并不一致。 Thukral 表示:“我们无法推断命名空间的来源,无法推断它是否正在使用。”因此公司制定了一条不销毁任何命名空间的规则,因为工程师无法判断命名空间是否仍在某个地方使用。

 

并且所有过时的命名空间(随着公司将其单体应用程序迁移到微服务中,这样的命名空间很多)仍然占用着 Kubernetes 资源。

手工集群和受困扰的基础设施

与此同时,基础设施团队也面临着自己的挑战,Xia 说道。

 

工程师需要 30 多个小时才能启动一个集群,其中包括 100 多个步骤,诸如配置网络、配置硬件或选择云供应商、安装控制平面以及添加可观察性和自动扩展工具等等。

 

此外,正如 Pi Day 所警示的那样,集群的就地升级是不稳定的,而且根本没有退役集群的流程。仍在运行的集群的配置逐渐偏移,越来越特别,还没有文档记录这些变化。

 

Xia 说,退役一个集群相当于“进行成本高昂的考古搜索,以找到必须退役的所有基础设施”。

 

“这是一个自我强化的低效率循环”——Reddit 的 Harvey Xia

 

那时,该组织没有很好的方法来管理整个集群。 Xia 表示,有时,基础设施会偏离指定配置太远,以至于被称为“闹鬼”。

 

“任何工程师都很难自信地推断出集群应该如何运行,或者正在如何运行,这使得所有生命周期操作都极其危险。”Xia 说道。

 

因此,基础设施团队的时间主要用来保持一切内容的运行和修复中断。

 

Xia 表示,这种“被动、救火的心态”使得“想象、规划或构建更可持续的未来”变得非常困难。

Reddit 选择 K8s 控制器而不是 IaC 的原因

一个抽象会将用户的关注点与底层实现分开来,从而隐藏复杂性。根据 Xia 的定义,平台是开发人员可以在其基础上构建的可组合工具生态系统。它以公司开发人员的最佳实践为依据。

 

Reddit 决定通过一组由 Kubernetes 控制流程支持的声明性 API 来实现一个平台。它的接口被定义为自定义资源。期望的状态是规范,观察到的状态通过当前状态来报告。

 

自定义资源会启动 Kubernetes 控制器,后者将活动状态转变为期望状态来实现其 API。

 

工程师最初考虑使用基础设施即代码工具,但后来改用基于 Kubernetes 控制器的工具。

 

使用标准 IaC 很难表示任意业务逻辑,这是构建 Reddit 基础设施的主要要求。

 

“我无法建模我要的工作流,在工作流中我需要从证书颁发机构提供 TLS 证书,将其卸载到 Amazon 证书管理器,并将其附加到负载均衡器上,”Xia 说。标准 IaC 平台也不是动态的。你不能依赖 IaC 来续订过期的证书。



相比之下,Kubernetes 控制器将确保当前状态始终处于所需状态下,或至少一直朝着所需的状态移动。这将包括所有生命周期操作。

大脑和负载集群

如今,Reddit 基础设施工程师花在集群管理上的时间更少了。他们有一组 API,可以通过“单一管理平台”管理多个集群。



该公司有两种类型的集群。一种是控制集群,可以被认为是运维的大脑。它为其他易于替换的“负载”集群生成配置。

 

“我们开始将这些集群视为牛,而不是宠物,”Thukral 说。

 

这样,集群有了明确定义的属性,所有适用的配置更新都会自动流入该集群。可以执行多集群运维操作。

 

每个负载集群都有自己的自定义资源,并带有属性标签,例如其运维阶段(测试、生产或准备)、地理位置和支持的云供应商。这为多集群 API 控制奠定了基础。一个联合控制器通过 K8s 标签选择器管理集群。

 

集群定位是动态的。如果启动了新的测试集群,它会自动加入测试命名空间。

 

“这为我们的工程师节省了大量时间,”Xia 说。

 

这种方法有一些潜在的缺点。首先,编排集群是单点故障。但系统的设计使得 worker 集群即使无法更新也能继续运行和自我修复。限制可以启动的集群类型也会限制可以构建的集群种类,从而使它们整体上更易管理。

 

FluxCD 用于将源配置与集群同步。Crossplane 用于将 Kubernetes API 桥接到云供应商资源。Cluster API 提供用于管理 Kubernetes 控制平面的 API。

 

这些资源或基础原语都由 Reddit 自己的自定义资源来中介,允许公司在需要时交换各种实现。

 

命名空间的创建也为开发人员带来了便利。现在,Reddit 应用程序开发人员无需学习 Helm 或 Kustomize,只需创建一个名为 Reddit 命名空间的自定义资源,并将其定位到一组集群即可。对于用户来说,基于角色的访问控制(RBAC)简化为两个选项:operator 或 reader 状态。

没有致命弱点

为了帮助基础设施工程师更轻松地创建控制器和 operator,Reddit 构建了 Achilles SDK,它建立在 Kubernetes 控制器运行时之上。



Thukral 表示,该 SDK 将整个协调循环表示为一个有限状态机。目前,这由单个函数处理,这可能会变得相当笨重。Thukral 表示,使用 Achilles 构建集群所需的步骤比在 Terraform 下组装相同集群所需的少得多。

 

Achilles 自动跟踪所有子资源和状态条件。

 

“我们希望让我们的基础设施工程师能够专注于构建业务逻辑,而不必成为 Kubernetes 专家,”Thukral 说。

结果

Reddit 仍在构建新的基础设施,不过该公司已经看到了很多成果,工程师们引以为傲。

 

该平台的可扩展性更强了:不再需要为命名空间的编写和管理而头疼。安全性和应用程序栈的简单性也得到了提升。

 

建立新集群的周转时间现在约为两个小时。升级可以在一小时内完成。多亏了 Achilles,可以在不到两周的时间内创建和测试控制器,“这对我们来说是一个巨大的成功,”Thukral 说。

 

该公司今年年初在生产中部署了 4 个 Kubernetes 控制器,截至 KubeCon,该公司已拥有 12 个。这些控制器管理基础设施的各个方面,包括 Kubernetes Ingress 栈、AWS 网络、Redis、Cassandra、HashiCorp Vault 和 Kubernetes 本身。

 

“对平台抽象的投资已获得了回报,”Xia 说。“自助服务界面已经取代了我们以前大部分的白手套流程。我们许多繁重的内部工作流程已被自动化所取代。”

 

在本次演讲中,Xia 还提供了有关何时自动化工作流程的一些提示。第一步:一切都必须是可编程的。

 

他说,该平台让工程师们能够专注于那些“我们希望投入主要时间解决的重大问题”。

 

演讲视频:https://youtu.be/ruto5Sak-jI

 

原文链接:https://thenewstack.io/reddit-no-longer-haunted-by-drifting-kubernetes-configurations/

2025-01-27 08:002

评论

发布
暂无评论

金融行业采购堡垒机选择哪家好?理由有哪些?

行云管家

网络安全 金融 等保测评 IT管理

北京汽车牵手火山引擎数智平台,探寻车企数字化升级新通路

字节跳动数据平台

数字化 数字化升级 车企 企业号 7 月 PK 榜

码中寻趣:低码专家与开发者的「神秘会议」 ——华为云Astro扫地僧出山

华为云PaaS服务小智

云计算 低代码 华为云 华为开发者大会2023 Astro

成都企业买云管平台选择行云管家可以吗?靠谱吗?

行云管家

云计算 成都 云资源 云管理

看完这篇异地多活的改造,我决定和架构师battle一下

得物技术

架构 构架师

技术领先、“忠”于业务,用友助力企业实现价值化国产替代

用友BIP

如何在 Ubuntu 22.04 下编译 StoneDB for MySQL 8.0 | StoneDB 使用教程 #1

StoneDB

数据库 StoneDB

TP-LINK面试真题和答案,您能做对几道?

王磊

Java java面试

ChatGPT 来了,MySQL DBA 会失业吗?| StoneDB 数据库观察 #10

StoneDB

数据库 StoneDB ChatGPT

服务端应用多级缓存架构方案 | 京东云技术团队

京东科技开发者

架构设计 缓存架构 QPS 企业号 7 月 PK 榜 服务端架构

解密Prompt系列4. 升级Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

不在线第一只蜗牛

架构 指令

华为云张鹏:华为云盘古大模型及MetaStudio亮相新媒体大会,使能融媒创新

新消费日报

方言语音识别数据驱动人工智能的多元文化发展

来自四九城儿

方言语音

MyBatis条件查询

猫九

移动端APP组件化架构实践 | 京东云技术团队

京东科技开发者

APP开发 组件化开发 企业号 7 月 PK 榜 移动端组件化 组件化架构

【ACL 2023】具有高效推理速度的中文领域文图生成扩散模型和工具链

阿里云大数据AI技术

人工智能 自然语言处理 nlp 图文生成 企业号 7 月 PK 榜

Boundless Hackathon @Stanford 主题黑客松活动闭幕,一文回顾

西柚子

速度与技能的较量!飞桨黑客松 OpenVINO™ 任务获奖者经验分享

飞桨PaddlePaddle

7.12下午两点开启直播!《数智企业@中国》走进泰开集团

用友BIP

数智企业

春去夏来,火热发版:StoneDB-8.0-v1.0.1-beta 版本正式发布!

StoneDB

数据库 StoneDB

2023年最具威胁的25种安全漏洞(CWE TOP 25)

华为云开发者联盟

安全 华为云 安全漏洞 华为云开发者联盟 企业号 7 月 PK 榜

IPQ4019 IPQ4029 what’s the difference?|802.11AC solution

wallyslilly

IPQ4019 ipq4029

一次元数据空间内存溢出的排查记录 | 京东云技术团队

京东科技开发者

elasticsearch springdata 元数据 内存溢出 企业号 7 月 PK 榜

首批!无垠代码模糊测试系统通过中国信通院模糊测试能力评估

云起无垠

语音平台源码搭建开发之表情功能的实现

山东布谷科技

软件开发 语音 直播 源码搭建 语音厅平台搭建

MySQL 中索引是如何实现的,有哪些类型的索引,如何进行优化索引

EquatorCoco

MySQL 数据库 索引

人工智能机器学习底层原理剖析,人造神经元,您一定能看懂,通俗解释把AI“黑话”转化为“白话文”

快乐非自愿限量之名

人工智能 机器学习

IoTDB Timecho 产品负责人赵馨逸《IoTDB 如何赋能工业物联网数据管理》

Apache IoTDB

IoTDB Apache IoTDB

数智化的核心在于构建底座,看这家数科公司如何与传统厂商双赢双生

用友BIP

数智底座 数科公司

响应式编程:Vert.x官网学习

越长大越悲伤

响应式编程 JVM Vert.x

Apache IoTDB 及云上部署实践

Apache IoTDB

时序数据库 IoTDB Apache IoTDB

平台抽象拯救Reddit: Kubernetes配置变化不再是难题_云原生_Joab Jackson_InfoQ精选文章