Kubernetes在生产中的成功案例。 第10部分:Reddit

上周, 宣布从现在开始,所有新的Reddit服务都将在基于Kubernetes集群的基础架构上投入生产。 这是向最流行的在线资源之一的K8迁移过程中的一个重要里程碑,这就是它的实现方式...



Likbez :根据Alexa的数据,迄今为止,Reddit在全球排名前20位(在美国排名第6)。 这个来自美国的在线社区包含4亿活跃(每月内)用户,1200万种出版物和每天20亿张选票。

关于Reddit工程师为何以及如何来到Kubernetes,去年12月在KubeCon 2018上演讲 + 视频基础设施部项目工程发布工程组负责人Greg Taylor。



你为什么来Kubernetes?


在2016年初,该服务以整体应用程序的形式实现 ,只有大约20名工程师组成了3个团队,其中一个是故事的英雄-基础架构团队。 但是,今年带来了巨大的变化:到年底,公司有60多名工程师工作(到2018年底,他们的人数已增加到200名,即在短短3年中,员工人数增加了10倍 )。

如此高的增长率将单片应用程序体系结构的不相关性(低效率)提上了议事日程,因为(由不同的团队)对其各种组件进行大量更改已变得非常困难。 聚集在一起解决问题并考虑了许多选择之后,工程师们选择了面向服务的体系结构(SOA)路径

改用服务体系结构而不是庞大的组件,Reddit遇到了一个新问题。 基础结构团队已成为开发人员活动的瓶颈 ,这些开发人员在不同阶段非常依赖它:服务初始化期间,持续运行期间,调试和解决性能问题时。 为了快速解决此问题,该公司组建了更多的自给自足的团队,称为``面向基础设施'':这些团队的参与者在操作基础架构方面具有必要的技能,这使他们无需等待基础架构团队的行动即可克服许多困难,无数开发人员无休止地积压工作。

但是,这仍然是一个临时解决方案,实践表明,并非每个人都希望为自己的服务操作整个堆栈:



这种情况如何解决? 该组织引入了服务所有者(服务所有者)的概念,他们可以从头到尾开发他们的服务,及早且经常地部署服务, 操作该服务(包括其可用性和性能问题)。 但是如何实现呢?

与其期望拥有无懈可击技能的工程师团队将数十个他们可能不了解的砖头将服务组合在一起,您需要为他们提供一种经过深思熟虑的预定义路径,以将服务投入生产,从而影响最少的技术。 这将使工程师不必学习大量的新技术和工具,而这些新技术和工具可能很多:



“为了将这个想法付诸实践,我们需要将”我们的知识,流程,最佳实践以及更多内容”打包成更易于访问的形式。”

InfreRedd-Reddit中的Kubernetes


这就是基于Kubernetes的Reddit内部基础设施产品InfreRedd诞生的方式。

如何满足其定义中指定的服务所有者的三个需求?

1.发展


组织中的开发标准并不表示要选择特定的语言或框架,而是要设置服务所对应的一般“形式”。 该标准( 一种独立于编程语言的服务规范)包括RPC协议的定义,使用机密,返回指标,可追溯性以及发布日志的格式。 在底板项目中可以找到用Python实现此规范的示例,但是,对于实际使用的人来说,这可能不太有用,但这可能会给人以启发。

此外,还创建了一些材料,以便在编写新服务时快速入门:各种语言(Python,Go,Node)以及Dockerfile的代码存根,CI甚至Helm图表的配置。

为了帮助本地开发,Reddit工程师选择了Google产品-Skaffold ,该产品为开发人员提供了一个通读周期的编辑→重建→刷新,该产品:

  • 不需要深入了解Kubernetes;
  • 尽可能接近生产;
  • 允许您使用标准图表/图像;
  • 并且-与之前使用的Minikube不同-使用Skaffold 不需要从可工作的笔记本电脑中获取大量资源(因为向远程集群完成了推广)。

2.部署


Reddit使用持续交付平台Drone来运行测试和构建工件(通常是Docker映像)。

Kubernetes最初将Helm插件用于Drone进行部署,但是很快工程师得出结论,Helm对它不满意,因为他们想要一个“更好地了解已创建或更新对象的状态”的系统,并且部署流程的进一步自动化导致需要一种可以吸引所使用的工具并在出现故障或性能问题时暂停回滚的解决方案。

结果,选择了Spinnaker来协调Kubernetes中的部署。 对他来说,为典型的管道(在Jsonnet上)创建了模板。 接下来,将生成Helm图表,该图表已由 Spinnaker部署到Kubernetes中。 用户会收到有关部署进度的信息,并在出现任何问题时帮助进行诊断。 这是登台/生产中典型的部署过程的一般形式:



3.操作


首先,如何共享服务所有者和基础架构团队的义务?

  • 服务所有者 :了解Kubernetes的基础知识,部署和操作其服务;
  • 基础架构团队 :支持Kubernetes集群的可操作性(推出,支持,扩展),为它们提供所有必要的资源,并就可靠,高效,容错的服务设计向组织的工程师提供建议(尤其是定期举行培训课程,然后分发其记录)整个公司)。

服务所有者的权利受到限制。 但是,要获得对生产的访问权限(以诊断某些问题),可以(通过特殊的控制台实用程序)请求一个临时令牌,该令牌赋予他们对其名称空间的完全权限。

另一个重要的操作要点是最大程度地减少可能来自不同来源的潜在损害。 这是Reddit为此所做的:



为了使操作人员的工作更轻松,还涉及以下内容:


Reddit中Kubernetes的状态


截至去年12月,有关Kubernetes基础设施的一般统计如下:

  • 7个集群(在接下来的几个月中将添加3到6个新集群);
  • 所有工程团队中有三分之一到一半与Kubernetes进行交互;
  • K8正在生产约20个Reddit服务;
  • 在一个工作日内,将这些服务部署到K8的10-20次。

计划在2019年第一季度为整个组织提供InfreRedd和Kubernetes的服务,这意味着在Kubernetes服务的生产中将部署任何新服务。 (当时,这大约发生在4个新服务中的3个。)

如本文开头所述,这个里程碑是在上周成功实现的:



周期中的其他文章


Source: https://habr.com/ru/post/zh-CN441754/


All Articles