公司众人 地点孟买,印度 行业社交媒体软件

挑战

众人帮助内容创建者在Internet上的任何位置创建其内容,并以正确的格式向其他地方发布它。自2010年推出以来,它已经发展到1600万用户。该产品始于运行的单一应用程序谷歌应用引擎,并于2015年开始转换为亚马逊Web服务运行的微服务弹性豆秆。“我们的用例最初是可以的,但随着服务的数量,开发团队和规模增加,部署时间,自我修复能力和资源利用开始为我们的问题,”谁领导的软件工程师AmanPreet Singh说Crowdfire的基础设施团队。

解决方案

“我们意识到,我们需要更加云的原始方法来处理这些问题,”辛格说。该团队决定基于以下实施Kubernetes的自定义设置Terraform.Ansible.

影响

“Kubernetes帮助我们将部署时间从15分钟降至不到一分钟,”Singh说。“由于Kubernetes的自我修复性质,在节点或POD失败的情况下,运营团队不需要做任何手动干预。”此外,他说,“Dev-Prod奇偶校验已经提高,因为开发人员可以在DEV / STANGE集群中尝试选项,并且当它最终确定时,他们只是提交了各个代码存储库中的配置更改。这些更改会自动在生产群集上复制通过CI / CD管道。“

“如果你盖了,他们会来的。”

对于大多数内容创作者来说,只有一半的电影报价可能会响亮。当然,像WordPress,YouTube和Shopify这样的平台使得几乎任何人都开始在线发布新内容,但吸引观众并不容易。Chardfire“帮助用户将内容发布到观众所在的所有可能的地方,”印度孟买公司的软件工程师Amanpreet Singh说。众区已获得超过1600万用户 - 从博主和艺术家到制造商和小企业 - 自2010年推出以来。

由于这种增长 - 以及用户对新功能和持续改进的高度需求 - 众群团队努力跟踪幕后。2015年,他们将Monolith Java应用程序迁移到亚马逊Web服务弹性豆秆并开始将其分解为微服务。

这是一个很好的第一步,但球队很快就意识到他们需要进一步沿着云原生路径进一步,这将使他们带到Kubernetes。“我们的用例最初是可以的,但随着服务和开发团队的数量增加,我们进一步扩展,部署时期,自我修复能力和资源利用率开始变得有问题,”辛格表示,谁领导基础设施团队众人。“我们意识到我们需要更加云的原始方法来处理这些问题。”

正如他环顾四周的那样,辛格有一个需要众群的清单。“我们想让一些东西分开,所以它们可以独立发货;这将有助于移除阻止者,让不同的团队以自己的速度工作,”他说。“我们还制作了大量的数据驱动的决策,因此发运功能并迅速迭代是必须的。”

Kubernetes检查了所有框,然后是一些框。“其中一个最好的东西是内置的服务发现,”他说。“当您有一堆需要互相调用的微服务时,具有内部DNS随时可用,并且服务IP和端口自动设置为环境变量帮助很多。”此外,他补充道,“Kubernetes的自以为是的方法使得更容易开始。”

云原生方法还有另一个引人注目的商业原因。“在今天的不断变化的业务需求中,使用云本机技术提供各种选项可供选择 - 即使是在混合云环境中运行服务的能力,”Singh说。“企业可以在最靠近用户的地区保持服务,从而有利于高可用性和弹性。”

因此,在2016年2月,Singh使用提供的kube-up脚本设置了一个测试kubernetes群集。“我探索了这个功能,并且能够轻松地部署应用程序,”他说。“然而,它似乎是一个黑匣子,因为我不完全理解这些组件,并且不知道kube-up脚本在引擎盖下做了什么。所以当它破裂时,很难找到这个问题并修复它。“

为了获得更好的理解,辛格潜入Kubernetes的内部,读取文档甚至一些代码。他向Kubernetes社区寻找更多的洞察力。“我曾经每晚熬夜一点点(很多用户才能在印度的夜晚处于活跃状态),并试图回答从正在入门的用户的Kubernetes社区松弛问题,”他说。“我也会密切遵守其他对话。我必须承认我能够在我们的设置中避免很多问题,因为我知道其他人面临着同样的问题。”

基于他获得的知识,辛格决定基于以下实施Kubernetes的自定义设置Terraform.Ansible.。“我写了Terraform来推出Kubernetes主人和节点(自动缩放组)和一个Ansible PlayBook来安装所需的组件,”他说。(该公司最近切换到使用预包装amis.要使节点提升更快,并计划更改其网络层。)

首先,该团队将少量分期服务从Elastic Beanstalk迁移到新的Kubernetes Staging Cluster,然后在一个月后设置生产群集以部署一些服务。结果令人信服。“截至2016年3月底,我们建立了所有新服务,必须在Kubernetes上部署,”Singh说。“Kubernetes帮助我们将部署时间从15分钟降至不到一分钟。由于Kubernetes的自我修复性质,在节点或Pod失败的情况下,运营团队不需要做任何手动干预。”在那之上,他说,“Dev-Prod奇偶校验已经提高,因为开发人员可以在DEV / STANGE集群中尝试选项,并且当它最终确定时,它们只是提交了各个代码存储库中的配置更改。这些更改会自动复制生产集群通过CI / CD管道。这为所做的更改带来了更多的可视性,并保持审计跟踪。“

在接下来的六个月内,该团队致力于将所有服务从弹性Beanstalk到Kubernetes迁移到Kubernetes,除了弃用的少数弃权,很快就会被终止。这些服务一次被移动,他们的表现每次监测两到三天。今天,“我们完全迁移,我们在Kubernetes上运行所有新服务,”Singh说。

该影响已相当大:随着Kubernetes,该公司在弹性负荷平衡器上经历了90%的成本节约,现在仅用于其公众,面向用户的服务。他们的EC2营业费用已减少多达50%。

Crowdfire的所有30名工程师立即被仓库。“我给了一个内部谈话,我分享了基本组成部分并演示了熊掌的使用情况,”Singh说。“每个人都很兴奋,快乐地使用Kubernetes。开发人员现在有更多的控制和可见性,进入他们在生产中运行的应用程序。所有的,他们都对低部署时代和自我治疗服务感到满意。”

而且它们也更加富有成效。“我们曾经每天曾经做过大约5部部署,”辛格说,“现在我们几乎每天都在进行30+生产和50多个分期部署。”

Singh注意到几乎所有工程师都在每天与分期集群互动,并且在众群中创造了文化变化。“开发人员现在更加了解云基础架构,”他说。“他们已经开始遵循云的最佳实践,如更好的健康检查,结构化日志到STDOUT [标准输出],并通过文件或环境变量配置。”

随着众人对Kubernetes的承诺,Singh正在寻求扩展该公司的云原生堆栈。团队已经使用了普罗米修斯为了监督,他说他正在评估linkerd.特使代理作为“获取更多关于请求延迟和失败的指标,并更好地处理它们。”其他CNCF项目,包括Opentrocing.grpc.也在他的雷达上。

辛格发现,云母群落也在印度生长,特别是在班加罗尔。“许多初创公司和新公司开始在Kubernetes上运行基础设施,”他说。

当人们向他询问众群经验时,他有这个提供的建议:“Kubernetes是一件很棒的技术,但它可能对你不适合,特别是如果你只有一个或两个服务或你的应用程序并不容易在容器化的环境中运行,“他说。“评估您的情况和Kubernetes在全部提供的情况下提供的价值。如果您决定使用Kubernetes,请确保了解在引擎盖下运行的组件以及它们在顺利运行群集时扮演的角色是什么样的如果您的应用程序是“Kubernetes-Ready”,那么如果他们有适当的健康检查和处理终端信号以优雅地关闭。“

如果您的公司适合该个人资料,请参加它。众人显然做了 - 现在正在收益。“在我们使用Kubernetes的15个月里,它对我们来说是惊人的,”Singh说。“它使我们能够快速迭代,提高发展速度,不断向用户提供新的功能和错误修复,同时保持我们在控制下的运营成本和基础设施管理开销。”