NuBank Offices

Kubernetes助力 Nubank 一周部署 700 次

挑战

过去几年中,随着 Nubank 客户基数达到 2300 万,工程团队从最初的 30 人增至 520 人,这家金融科技初创企业面临不可变基础设施带来的挑战。“我们的部署要靠旋转整个堆栈,或克隆整个基础设施才能迭代所有开发,” Nubank 工程总监 Renan Capaverde 说,“因此,随着时间推移,会变得越来越慢,越来越痛苦。”

解决方案

公司在早期就已经使用了 Docker 容器。“我们确信,Docker 对我们大有裨益,我们希望进一步容器化,” Capaverde 说。选择一个编排器是接下来要做的工作,团队最终选择了 Kubernetes。Nubank 云原生平台包括监控用 Prometheus、Thanos 和 Grafana,还有日志用 Fluentd。

影响

开发者体验大大改善;生产环境的开发时间从 90 分钟减少到 15 分钟。今天,Nubank 工程师一周能部署 700 次。此外,团队估算 Nubank 的成本效率提高了大约 30%。

挑战:
行业:
地点:
云类型:
产品类型:
出版:
July 10, 2020

使用的项目

一些数据

部署从 90 分钟减少到 15 分钟

成本效率提高了 30%

每周可部署 700 次

Nubank于 2013 年创立于巴西,作为一家金融科技初创企业,Nubank 不会被历史遗留的基础架构所累。

公司在早期就使用了 Docker 容器, 在 AWS 上运行差不多所有的基础设施。

但这并不意味着 Nubank 不会遇到问题。过去几年中,随着 Nubank 客户基数达到 2300 万,工程团队从最初的 30 人增至 520 人,这家金融科技初创企业面临挑战。“我们使用的是不可变基础架构,但我们的发展非常、非常迅猛,” Nubank 工程总监 Renan Capaverde 说,“我们的部署要靠旋转整个堆栈,或克隆整个基础设施才能迭代所有开发。因此,随着时间推移,会变得越来越慢,越来越痛苦。”

此外,还有其他痛点,包括应用软件的负载均衡,在 AWS 中添加新的安全组规则的难度等。

“最终,我们确信,Docker 对我们大有裨益,我们希望进一步容器化,”Capaverde 说。选择一个编排器是接下来要做的工作。Nubank 的数据基础设施团队已经在 Mesos 上运行了一个 Spark 集群,团队考察了几种不同的技术,包括 Docker Swarm。最终,“还是觉得 Kubernetes 是正确的选择,”他说,“Kubernetes 有大量优质的抽象方法,还有很多来自社区与 CNCF 云原生计算基金会的支持,以及 Google 部署 Borg 的全部专业知识。”

Nubank开始向 Kubernetes 迁移时,“我们首先想要实现的就是助力开发者运行应用软件,” Capaverde 说,“我们的应用都是云原生应用,对项目来说这是很好的架构,可按需进行扩展。”

最初,团队考虑过在开发者环境中使用 Minikube,用 Kubernetes 做测试和 staging,然后在生产环境中做架构分区。后来,他们觉得先迁移 staging 环境,就能在早期加速采用 Kubernetes。但这样会在 staging 阶段导致一个 Kubernetes 集群用于所有分区,出于单点可能失败的考虑,以及团队缺乏 Kubernetes 相关经验,最终放弃了该计划。

“我们为 Kubernetes 部署了 kops 解决方案,采用 kops 确认逆向工程,试图了解 Kubernetes 的具体情况,以及配置的复杂细节,”Capaverde 说,“我们自己做的自动化,所以有自己的 Kubernetes 发行版,不是 kops,也不是 Kube-aws。”

后来,“我们看到了 Kubernetes 项目的发展方向,”他说,团队开始使用 kubeadm 来创建。“我们用生产工具创建新的集群,这样就能了解整体运行状况,”软件工程师 Yago Nobre 说。大约 20 个客户参与了新分区测试,几个月后,“在这个点上,我们确信解决方案的效果,然后开始一个一个地迁移其他分区。”

Nubank云原生平台上还包括监控用 Prometheus、Thanos 和 Grafana,还有日志用 Fluentd。

“有了 Kubernetes 和金丝雀部署,撤销一个变更容易了很多,因为部署更快了。大家部署得更频繁,信心也更足。”

— NUBANK 工程总监 RENAN CAPAVERDE

为了帮助工程师使用新的平台,团队在第一年举办了全公司范围的培训活动。同时开发了叫做 NuCLI 的命令行界面,包括 500 多个自动化快捷方式,比如从应用软件或硬件部署提取日志。“这种抽象更加简便,在迁移初期,能够缓解大家缺乏 Kubernetes 专业知识的问题,” Capaverde 说。

最初阶段,Nubank 作为一家 Clojure 商店,总是有 CPU 设置和 JVM 的问题,资源配置上总要采取保守方法,才能避免风险,运行得更快一些。这样就无法带来 Kubernetes 能够解决的成本节约效应了。大约过了一年半时间,团队进一步调整了横向扩展和预算,估算 Nubank 的成本效率提高了大约 30%。

但这仅仅是开始而已。“我们正在收尾一次新的 Kubernetes rollout,移至 1.16,还有一个能和 JVM 更好整合的新版本内核,这样 JVM 就能受益于容器支持标签了,同时还能调整应用程序的请求和范围,” Capaverde 说。

此外,还有其他好处。“Kubernetes 有大量优质的抽象方法,如就绪探针和存活探针,” Capaverde 说,“不需要启动,我们采用蓝/绿部署策略。我们有 400 多个微服务,所以你可以想象我们必须等着 EC2 实例才能启动、然后启动容器时的部署情况。有了 Kubernetes,只需要启动容器就好了。”

因此,生产环境的部署时间从 90 分钟减少到 15 分钟。Nobre 说,这就是“最大的好处,因为这样能提升开发者的体验。” 现在,Nubank 工程师每周能部署 700 次。“对银行来说,你可能觉得这有点过于疯狂,” Capaverde 笑着说,“但实际上并不疯狂,因为有了 Kubernetes 和金丝雀部署,撤销一个变更容易了很多,因为部署更快了。大家运送得更频繁,信心也更足。”

“从 staging 迁移到 prod 迁移期间,我们得到了很多反馈信息,因为大家都在用,所以我们能改进基础设施、工具和进入生产环境前的一切。”

— NUBANK 软件工程师 YAGO NOBRE

Kubernetes还帮助 Nubank 拓展到其他国家,2019 年最先拓展到墨西哥。“如果你的所有工作都在云上完成,我们就需要设置新的 AWS 账户,了解新的 AWS 账户有什么局限,” Capaverde 说,“用 Kubernetes 抽象方法更便于迭代基础设施和应用程序,速度更快,开发基础设施也更简单。”

在过去 3 年中,Nubank 已经由 5 人组成的 Kubernetes、Kafka、监控和其他任务平台团队发展成为 50 人的专业基础团队,团队中不乏拥有丰富 Kubernetes 经验的成员。

在发展过程中,他们已经积累了一些经验教训,可以和要使用 Kubernetes 的机构分享。“开始迁移的时候,就开始分享经验,让大家都参与进来,” Nobre 说,“从 staging 迁移到 prod 迁移期间,我们得到了很多反馈信息,因为大家都在用,所以我们能改进基础设施、工具和进入生产环境前的一切。”

在 Capaverde 看来,“人们说起 Kubernetes 就像是在谈论一种包治百病的良方。而事实恰恰相反:Kubernetes 是一只野兽、一个大怪物。它的确能帮到我们很多,但你必须要了解它、控制它、驯服它。”

这是一个持续的过程。摆在 Nubank 面前的,是要在服务间沟通和安全性,以及提高资源使用效率等方面做出决策。“我们的发展非常喜人,” Capaverde 说,“所有的决策都把重点放在长期的可扩展性和创建正确的抽象方法上。这样,我们下一个阶段就要应付更多增量,而非颠覆了。所以,持续进步、实现目标也更容易了呢。”