专栏首页CNCFKubernetes助力Nubank一周部署200次

Kubernetes助力Nubank一周部署200次

  • 部署从90分钟减少到15分钟
  • 成本效率提高了30%
  • 每周可部署200次

行业:金融服务

地点:巴西

云类型:公有、多云、混合

挑战:效率、速度

产品类型:安装程序

使用的CNCF项目:Fluentd、Kubernetes、Prometheus

挑战

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

解决方案

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

影响

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

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 工程师每周能部署 200 次。“对银行来说,你可能觉得这有点过于疯狂,” 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 说,“所有的决策都把重点放在长期的可扩展性和创建正确的抽象方法上。这样,我们下一个阶段就要应付更多增量,而非颠覆了。所以,持续进步、实现目标也更容易了呢。”

本文分享自微信公众号 - CNCF(lf_cncf),作者:CNCF

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CNCF网络研讨会:Kubernetes 1.16的新特性(视频+PDF)

    https://www.cncf.io/wp-content/uploads/2019/10/CNCF-Webinar_-Kubernetes-1.16.pdf

    CNCF
  • 超适合小项目的 K8S 部署策略

    Kubernetes 的稳健性、可靠性使它成为现阶段最流行的云原生技术之一,但也有不少用户反映, Kubernetes 技术学习起来十分复杂,只适用于大集群且成...

    CNCF
  • 成员网研会:以应用程序为中心的抽象简化应用程序迁移到Kubernetes(视频+PDF)

    将微服务应用程序迁移到Kubernetes,尤其是涉及有状态服务和负载平衡器之类的应用程序,可能是一项艰巨的任务。在这个网络研讨会中,我们将讨论将一个基于微服务...

    CNCF
  • 图解机器学习十大算法

    导读:通过本篇文章可以对ML的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下,知道这些算法是什么,它们是怎么应用的,例子主要是分类问题。 ...

    IT派
  • 猿设计1——电商前台全逻辑需求挖掘

    看过之前的三个系列文章,相信你对java基础知识、java web基础知识、SpringMVC 、Spring、 Mybatis三个框架有了全面的掌握,学会了搭...

    山旮旯的胖子
  • JavaScript 中如何判断变量是否为数字

    JavaScript 是一种动态类型语言,这意味着解释器在运行时确定变量的类型。实际上,这也允许我们在相同的代码中使用相同的变量来存储不同类型的数据。如果没有文...

    前端小智@大迁世界
  • How do I know that Association is internally implemented by inner join or outer association

    How do I know that Association is internally implemented by inner join or outer ...

    Jerry Wang
  • 检查 JavaScript 变量是否为数字的几种方式

    JavaScript 是一种动态类型的语言,这意味着解释器是在运行时确定变量类型的。这允许我们可以用同一变量中存储不同类型的数据。但是如果没有文档和保持一致性,...

    疯狂的技术宅
  • 混合云托管的自助服务未来

    预计在未来三年,混合云的采用将是当前的三倍。而随着混合云的发展,企业用户也在积极的寻找更好的方式来管理他们的混合托管基础设施需求。 在现如今这样一个数字化的世界...

    静一
  • 全新出发,闪耀2020| 腾讯高校创新俱乐部年度评优结果出炉(文末有福利)

    导语 为加强创新人才生态环境建设并积极推动国家人才教育改革,⾃2006年起,腾讯与北京大学、西安交通大学、上海交通大学、中山大学、电子科技大学、哈尔滨工业大学...

    腾讯高校合作

扫码关注云+社区

领取腾讯云代金券