平臺抽象拯救Reddit:Kubernetes配置變化不再是難題

作者 | Joab jackson
譯者 | 王強
策劃 | Tina
三年前,Reddit 的基礎設施工程師團隊大部分時間都在忙於救火。本文談的就是他們如何透過開發一個平臺抽象來簡化運維並重新掌控局面的故事。
Reddit 於 2022 年 3 月 13 日癱瘓的事件是一個粗暴的警示,提醒這家公司需要以新的方式管理它的基礎設施。
臭名昭著的“Pi Day”全站中斷事件持續了剛好 314 分鐘。事件源於從 Kubernetes 1.23 到 1.24 的叢集範圍升級操作,該升級導致了一些微妙的不可預測行為,迫使基礎設施團隊進行回滾,這本身就是一項高風險行動。
即使在那時,公司工程師也知道運維方式需要改變了。
這個廣受歡迎的社交新聞論壇彼時正在擴充套件其伺服器堆疊,使伺服器跨多個可用區以提高可靠性,最終目標是在全球範圍內提供服務。其他一些圍繞廣告投放和機器學習的專案也面臨著各自的挑戰。此外,公司高管正在為 IPO 做準備。
Reddit 基礎設施團隊的高階軟體工程師 Karan Thukral 那時指出,該公司需要一個新的平臺抽象。隨著公司的發展,他們需要新的平臺抽象來繼續高效運維。
Thukral 與 Reddit 軟體工程師 Harvey Xia 在最近的 KubeCon+CloudNativeCon 北美會議上發表了演講,介紹了他們的基礎設施團隊如何建立新的平臺抽象,從而提前做好計劃,擺脫被動的救火模式。
“從技術上講,我們做到了用更少的人手來解決更具挑戰性的問題,”Thukral 說。“由於我們在過去幾年中投入了大量資源,我們得以有更多的專門工程時間來主動解決問題,而不是被動地救火。”
神秘的名稱空間
2022 年,該公司執行著 20 個 Kubernetes 驅動的生產叢集。基礎設施團隊有 92 名工程師,比公司部署的 706 名應用工程師少得多。他們的大部分工作都是幫助應用工程師。
一個問題是名稱空間的建立。在 Reddit 中,每個在 Kubernetes 上執行的應用程式都需要一個名稱空間,可以透過 Helm 圖表或 Kustomize 清單指定。應用程式開發人員並不是編寫這些規範的專家。
這導致了大量剪下和貼上操作。結果錯誤悄然而至,而審閱者並不總能發現這些錯誤。這塊的審查流程為應用審查過程增加了額外的 24 小時。
Thukral 說,由於時區差異,可能需要將近一週的時間才能獲得名稱空間。而且,糟糕的配置設定仍然滲透到了整個持續整合流程中,這可能會導致停機故障。
Reddit 對名稱空間的管理並不一致。Thukral 表示:“我們無法推斷名稱空間的來源,無法推斷它是否正在使用。”因此公司制定了一條不銷燬任何名稱空間的規則,因為工程師無法判斷名稱空間是否仍在某個地方使用。
並且所有過時的名稱空間(隨著公司將其單體應用程式遷移到微服務中,這樣的名稱空間很多)仍然佔用著 Kubernetes 資源。
手工叢集和受困擾的基礎設施
與此同時,基礎設施團隊也面臨著自己的挑戰,Xia 說道。
工程師需要 30 多個小時才能啟動一個叢集,其中包括 100 多個步驟,諸如配置網路、配置硬體或選擇雲供應商、安裝控制平面以及新增可觀察性和自動擴充套件工具等等。
此外,正如 Pi Day 所警示的那樣,叢集的就地升級是不穩定的,而且根本沒有退役叢集的流程。仍在執行的叢集的配置逐漸偏移,越來越特別,還沒有文件記錄這些變化。
Xia 說,退役一個叢集相當於“進行成本高昂的考古搜尋,以找到必須退役的所有基礎設施”。
“這是一個自我強化的低效率迴圈”——Reddit 的 Harvey Xia
那時,該組織沒有很好的方法來管理整個叢集。Xia 表示,有時,基礎設施會偏離指定配置太遠,以至於被稱為“鬧鬼”。
“任何工程師都很難自信地推斷出叢集應該如何執行,或者正在如何執行,這使得所有生命週期操作都極其危險。”Xia 說道。
因此,基礎設施團隊的時間主要用來保持一切內容的執行和修復中斷。
Xia 表示,這種“被動、救火的心態”使得“想象、規劃或構建更可持續的未來”變得非常困難。
Reddit 選擇 K8s 控制器
而不是 IaC 的原因
一個抽象會將使用者的關注點與底層實現分開來,從而隱藏複雜性。根據 Xia 的定義,平臺是開發人員可以在其基礎上構建的可組合工具生態系統。它以公司開發人員的最佳實踐為依據。
Reddit 決定透過一組由 Kubernetes 控制流程支援的宣告性 API 來實現一個平臺。它的介面被定義為自定義資源。期望的狀態是規範,觀察到的狀態通過當前狀態來報告。
自定義資源會啟動 Kubernetes 控制器,後者將活動狀態轉變為期望狀態來實現其 API。
工程師最初考慮使用基礎設施即程式碼工具,但後來改用基於 Kubernetes 控制器的工具。
使用標準 IaC 很難表示任意業務邏輯,這是構建 Reddit 基礎設施的主要要求。
“我無法建模我要的工作流,在工作流中我需要從證書頒發機構提供 TLS 證書,將其解除安裝到 Amazon 證書管理器,並將其附加到負載均衡器上,”Xia 說。標準 IaC 平臺也不是動態的。你不能依賴 IaC 來續訂過期的證書。
相比之下,Kubernetes 控制器將確保當前狀態始終處於所需狀態下,或至少一直朝著所需的狀態移動。這將包括所有生命週期操作。
大腦和負載叢集
如今,Reddit 基礎設施工程師花在叢集管理上的時間更少了。他們有一組 API,可以透過“單一管理平臺”管理多個叢集。
該公司有兩種型別的叢集。一種是控制叢集,可以被認為是運維的大腦。它為其他易於替換的“負載”叢集生成配置。
“我們開始將這些叢集視為牛,而不是寵物,”Thukral 說。
這樣,叢集有了明確定義的屬性,所有適用的配置更新都會自動流入該叢集。可以執行多叢集運維操作。
每個負載叢集都有自己的自定義資源,並帶有屬性標籤,例如其運維階段(測試、生產或準備)、地理位置和支援的雲供應商。這為多叢集 API 控制奠定了基礎。一個聯合控制器透過 K8s 標籤選擇器管理叢集。
叢集定位是動態的。如果啟動了新的測試叢集,它會自動加入測試名稱空間。
“這為我們的工程師節省了大量時間,”Xia 說。
這種方法有一些潛在的缺點。首先,編排叢集是單點故障。但系統的設計使得 worker 叢集即使無法更新也能繼續執行和自我修復。限制可以啟動的叢集型別也會限制可以構建的叢集種類,從而使它們整體上更易管理。
FluxCD 用於將源配置與叢集同步。Crossplane 用於將 Kubernetes API 橋接到雲供應商資源。Cluster API 提供用於管理 Kubernetes 控制平面的 API。
這些資源或基礎原語都由 Reddit 自己的自定義資源來中介,允許公司在需要時交換各種實現。
名稱空間的建立也為開發人員帶來了便利。現在,Reddit 應用程式開發人員無需學習 Helm 或 Kustomize,只需建立一個名為 Reddit 名稱空間的自定義資源,並將其定位到一組叢集即可。對於使用者來說,基於角色的訪問控制(RBAC)簡化為兩個選項:operator 或 reader 狀態。
沒有致命弱點
為了幫助基礎設施工程師更輕鬆地建立控制器和 operator,Reddit 構建了 Achilles SDK,它建立在 Kubernetes 控制器執行時之上。
Thukral 表示,該 SDK 將整個協調迴圈表示為一個有限狀態機。目前,這由單個函式處理,這可能會變得相當笨重。Thukral 表示,使用 Achilles 構建叢集所需的步驟比在 Terraform 下組裝相同叢集所需的少得多。
Achilles 自動跟蹤所有子資源和狀態條件。
“我們希望讓我們的基礎設施工程師能夠專注於構建業務邏輯,而不必成為 Kubernetes 專家,”Thukral 說。
結    果
Reddit 仍在構建新的基礎設施,不過該公司已經看到了很多成果,工程師們引以為傲。
該平臺的可擴充套件性更強了:不再需要為名稱空間的編寫和管理而頭疼。安全性和應用程式棧的簡單性也得到了提升。
建立新叢集的週轉時間現在約為兩個小時。升級可以在一小時內完成。多虧了 Achilles,可以在不到兩週的時間內建立和測試控制器,“這對我們來說是一個巨大的成功,”Thukral 說。
該公司今年年初在生產中部署了 4 個 Kubernetes 控制器,截至 KubeCon,該公司已擁有 12 個。這些控制器管理基礎設施的各個方面,包括 Kubernetes Ingress 棧、AWS 網路、Redis、Cassandra、HashiCorp Vault 和 Kubernetes 本身。
“對平臺抽象的投資已獲得了回報,”Xia 說。“自助服務介面已經取代了我們以前大部分的白手套流程。我們許多繁重的內部工作流程已被自動化所取代。”
在本次演講中,Xia 還提供了有關何時自動化工作流程的一些提示。第一步:一切都必須是可程式設計的。
他說,該平臺讓工程師們能夠專注於那些“我們希望投入主要時間解決的重大問題”。
演講影片:https://youtu.be/ruto5Sak-jI
原文連結:
https://thenewstack.io/reddit-no-longer-haunted-by-drifting-kubernetes-configurations/
宣告:本文為 InfoQ 翻譯,未經許可禁止轉載。
今日好文推薦
純血鴻蒙微信 App 正式上線!依然使用了 Flutter,依然沒說清哪裡用了Flutter
大模型經驗為零?他們卻在 12 個月內搞出了 AI 智慧體程式設計神器!
“要點臉吧!”大模型巨頭“吸血”網站資源無底線,開發者怒訴:“這簡直在摧毀整個網際網路”
大廠新年第一裁,微軟全部門危!內部員工:客戶寧願跳槽也不想與我們 IT 部門打交道

相關文章