使用Kubernetes在Wercker指导自动化平台

编者注:今天的来宾帖子是Wercker的首席技术官Andy Smith,他分享了Kubernetes如何帮助他们节省时间并加快开发速度。  

维尔克 我们运行数百万个执行用户CI / CD作业的容器。它们中的绝大多数都是临时性的,只有在构建,测试和部署需要运行的情况下才能持续使用,其余的也是临时性的-不是我们所有人-但倾向于持续更长的时间并运行我们的基础架构。当我们在许多节点上运行许多容器时,我们需要一个高度可扩展的调度程序,这将使我们的生活更轻松,因此决定实施Kubernetes。

维尔克 是一个以容器为中心的自动化平台,可帮助开发人员构建,测试和部署其应用程序。我们支持任何数量的管道,从构建代码,测试微服务之间的API合同到将容器推送到注册表,再部署到调度程序。所有这些管道作业都在Docker容器内运行,每个工件都可以是Docker容器。

当然,我们使用Wercker构建Wercker,并将其部署到Kubernetes上!

总览

因为我们是运行多服务云原生代码的平台,所以我们围绕隔离性做出了许多设计决策。在基础层面上,我们使用 酷睿 云初始化 引导一组我称为Patricians,Peasants的异构节点,以及一个没有很酷名称的控制器节点,这些控制器节点仅称为Controllers。也许我们应该改用警员了。

k8s-architecture.jpg

Patrician节点是我们大部分基础结构运行的地方。这些节点具有适当的网络接口以与我们的后端服务进行通信,并且可以由各种负载平衡器路由。这是我们的日志汇总和发送到日志服务的地方,我们用于报告和处理作业运行结果的许多微服务,以及用于处理API调用的许多微服务。

在另一端是运行公共作业的农民节点。公共作业包括从工作队列中读取的工作人员吊舱,并动态生成新的跑步者吊舱以处理作业的执行。这份工作本身就是我们开源的化身 CLI工具,您可以在安装了Docker的笔记本电脑上运行同一台计算机。这些节点对其余基础结构的访问非常有限,并且作业本身运行的容器甚至进一步隔离。

控制器就是控制器,我敢打赌我们的外观与您的完全一样。

动态豆荚

我们对Kubernetes API的最大使用肯定是我们创建动态Pod的系统,该系统可以用作实际作业执行的运行时环境。从队列中提取作业描述后,我们定义一个新的pod,其中包含用于检出代码,管理缓存,执行作业和上传工件的所有相关环境。我们启动吊舱,监视其进度,并在完成工作时销毁它。

入口

为了提供HTTP API调用的后端并允许处理程序进行自注册,我们在Kubernetes中使用了Ingress系统。设置起来不是最清楚的事情,但请仔细阅读 nginx示例 最终使我们到达了一个易于将服务连接到前端的好地方。

1.3中即将发布的功能

虽然我们通常将所有吊舱和容器视为短暂的,并期望在发生故障时能够快速重启,但我们希望将Pet Sets和Init Containers作为优化某些流程的方式。我们也很高兴获得官方的支持 迷你库 随之而来,因为它改善了我们的本地测试和开发。 

结论

Kubernetes为我们节省了在多个节点上管理许多容器的艰巨任务。它提供了用于内省这些容器的健壮的API和工具,并且包括许多内置的对日志记录,指标,监视和调试的支持。仅服务发现和联网一项就为我们节省了很多时间,极大地加快了开发速度。

为您的Kubernetes喝彩,继续努力:)

-CTO Andy Smith,