Pinterest的Kubernetes平台化之旅

2019 年 10 月 05 日

Pinterest的Kubernetes平台化之旅

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 工程博客

Pinterest 设计 CRDs 是为了达到各种各样的目的,考虑到 Kubernetes 的采用,这对工程师来说可能也是一种信息。首先,他们希望将各种本地的 Kubernetes 资源打包成一个单一的工作负载,这样就避免了他们的工程师一个接一个地重复做这项工作。其次,他们希望通过在规范中添加必要的 sidecars、init 容器、设备变量和容量,来为应用程序注入必要的运行时支持。最后,这些定义用于对本地资源执行生命周期管理,例如协调规范和更新事件记录。Pinterest 团队推测,这种演变大大减少了工程师的工作量,从而降低了出错的风险。这与 Shopify 团队去年在纽约QCon 大会上分享的经验如出一辙。

处理此类问题的工程师需要考虑的一个问题是,为了避免应用程序之间的不一致,以及过于庞大的维护和支持负担,Pinterest 发现他们的基础设施团队需要部署所有的工作流类型,如pod 级别的sidecars、node 级别的守护进程集或VM(虚拟机)级别的守护程序。Tinder 平台自2019 年3 月以来一直只在Kubernetes 上运行,该公司采取了相反的做法,其基础设施的责任由该公司所有的工程师共同承担。

需要考虑的另一个问题是,Pinterest 团队在本地Kubernetes 测试基础设施之上构建了一个端到端的测试管道,测试部署到所有集群上。这减轻了与在Kubernetes 原生工作流模型之上工作的相关风险,工程师们表示,在上生产之前,它捕获到了许多回归。Pinterest 团队也将他们的部署工作流整合到他们的新CI|CD 平台中。

原文链接:

Pinterest’s Journey to a Kubernetes Platform

2019 年 10 月 05 日 08:00 1513
用户头像

发布了 119 篇内容, 共 48.0 次阅读, 收获喜欢 274 次。

关注

评论

发布
暂无评论
发现更多内容

奈学开发者社区分享:Java - 设计模式的7个设计原则

奈学教育

Java 设计模式 设计原则

ARChatRoom功能介绍手册

anyRTC开发者

音视频 WebRTC 语音 RTC 安卓

Http自定义请求头接收不正确

hasWhere

阿里P8大牛力荐Java程序员进阶必读的书籍清单(附电子版)

Geek_71bb95

Java 程序员 面试 编程语言 书籍推荐

一文领略 HTTP 的前世今生

yes的练级攻略

互联网 网络 HTTP 阿帕网

世界的下一个主宰——人工智能

CECBC区块链专委会

人工智能 智能时代

onblur调用alert导致的死循环

hasWhere

如何避免option请求

hasWhere

写给新人算法工程师

峰池

互联网 新人 推荐算法 算法工程师

戴尔G系列游戏本助玩家激战英特尔大师挑战赛

intel001

一文纵览向量检索

华为云开发者社区

数据 搜索 检索 检查

公有云厂商哪家强?本月UCloud、百度云、阿里云位居三甲——2020年8月云主机性能评测排名

BonreeAPM

实践分享丨物联网操作系统中的任务管理

华为云开发者社区

华为 数据 物联网 进程

深入理解MySQL中事务隔离级别的实现原理

X先生

MySQL 数据库 后端 事务

《转》POI的XWPFParagraph.getRuns分段问题

hasWhere

Java进阶教程、大厂面试真题、项目实战,GitHub上这14个开源项目屌炸天了!

Geek_71bb95

Java 程序员 面试 编程语言 项目实战

for-range造就循环永动机?快来看看go中for-range的那些事!

新世界杂货铺

golang 后端 for

Binder那么弱怎么面大厂?

博文视点Broadview

android 通信 移动开发 Java Binder Android进阶

在多架构时代,英特尔扩展高性能计算边界

intel001

《转》Spring事务传播机制

hasWhere

解读华为云原生数据库设计原则,打破传统数据库上云瓶颈

华为云开发者社区

数据库 数据

清华架构师整理分布式系统文档:从实现原理到系统实现,收藏吧

小Q

Java 程序员 架构 分布式 微服务

揭秘App的财富密码,剖析算法工程师价值来源

峰池

人工智能 互联网 推荐算法 互联网公司

关于互联网留存和收益你知道多少—带你走近用户成长体系

滴滴普惠出行

华为全联接2020:环信AI领跑,输出5大行业最佳实践

DT极客

关于深浅拷贝

西贝

JavaScript 前端 基础

Electron 快速入门及最新安装教程

程序员学院

JavaScript html 前端 Electron node,js

数字货币是大势所趋,新冠疫情后必须率先发展DCEP

CECBC区块链专委会

数字货币 银行

form表单提交get请求

hasWhere

实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值

华为云开发者社区

物联网 IoT 传感

奈学开发者社区分享:Java - 设计模式的7个设计原则

古月木易

Java 设计模式

Pinterest的Kubernetes平台化之旅-InfoQ