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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章