Pinterest软件工程师透露他们在公司采用Kubernetes时引入了定制的工具和资源。对于其他希望构建自己的平台即服务(PaaS)和相关开发人员工作流的团队来说,其关键收获包括容器编排系统如何才能提供一种方法来统一管理工作负载,Kubernetes的工作负载模型可以通过自定义资源定义来增强,并且一个健壮的端到端的测试管道是避免回归的关键。
Pinterest是一款社交媒体网页和移动应用程序,它允许用户保存或“pin”信息,并且拥有庞大的用户基础,在40亿块主板上总共保存了超过2000亿个pin。由于该体量以及与之相关的基础设施堆栈的增长,Pinterest团队遇到了几个挑战。他们表示,他们的工程师在启动工作负载时没有统一的经验,管理大量的虚拟机给基础设施团队带来了巨大的维护负担。此外,很难跨不同的系统构建基础设施治理工具,也很难确定哪些资源可以被回收利用。这与Airbnb在简化Kubernetes工作流程方面的经验相呼应。该团队试图通过三个关键的主题来解决这些问题:服务可靠性、基础设施效率和开发人员生产力。
据主要作者Lida Li和她团队所说,云管理平台团队在2017年开始与Kubernetes合作,docker化他们的生产工作负载,并评估不同的容器编排系统。Kubernetes的本机工作负载模型涵盖了部署、作业和守护进程集,但是团队需要更多的工作负载模型。他们表示,可用性问题是采用Kubernetes过程中的“巨大障碍”,在同一个Kubernetes集群上支持不同版本的运行时支持是很困难的。他们的解决方案是设计自定义资源定义(custom resource definitions,CRDs)。这是一个预发布的部署工作流,可用于基于Kubernetes的新计算平台的早期采用者。该团队正在将此工作流集成到他们的CI/CD平台中,以便为他们的工程师创建一个更干净的服务。
关于如何部署Pinterest CRDs的概述(图片来自Pinterest工程博客)