跳轉到主要內容
工程的博客

自動化工程待命工作流數據磚

2020年5月28日 工程的博客

分享這篇文章

一個夏天的自愈

今年夏天我和雲基礎設施團隊實習。團隊負責構建可伸縮的基礎設施,以支持數據磚的多重雲產品,在使用像起程拓殖和Kubernetes cloud-agnostic技術。我的重點是開發一種新的auto-remediation服務,療愈者,自動修理Kubernetes基礎設施來改善我們的服務可用性,減少隨叫隨到的負擔。

自動減少停機,停機時間

雲在磚下文團隊負責底層計算基礎設施的磚,跨雲管理成千上萬的vm和數據庫實例和地區。作為一個分布式係統組件,這些雲托管資源預計將失敗的時候。待命的工程師有時執行重複任務解決這些預期的事件。當PagerDuty警報觸發時,隨叫隨到工程師手動通過記錄劇本後解決了問題。

雖然理想情況下我們想跟蹤並解決所有問題的根源,這樣做會十分昂貴。對於這個長尾的問題,我們不是依靠劇本,解決症狀和檢查。在某些情況下,問題的根源是一個已知問題和一個與我們合作的很多開源項目(如Kubernetes,普羅米修斯,特使領事Hashicorp庫),所以一個解決方法是唯一可行的選擇。

隨叫隨到的頁麵需要仔細的注意力從我們的工程師。基於優先級磚工程分類的問題。低優先級的問題隻會頁麵在營業時間(即工程師不會晚上醒來!)。例如,如果一個節點Kubernetes腐敗在我們的開發環境中,隨叫隨到工程師隻會提醒第二天早上分流問題。因為磚工程分布在全球範圍內(在舊金山設有辦事處、多倫多和阿姆斯特丹)和大多數團隊建立一個辦公室,一個問題與開發環境可以阻止某些工程師數小時,減少開發人員的生產力。

我們一直在尋找方法減少我們維持了電力(KTLO)負擔,所以設計一個係統,響應警報而無需人工幹預通過執行engineer-defined劇本很有道理在我們的規模管理資源。我們著手設計一個係統,可以幫助我們解決這些係統性問題。

自愈體係結構

磚自我管理服務的治療特性事件驅動的體係結構,自動監控和維修Kubernetes基礎設施。
治療師架構是由輸入事件(普羅米修斯/ Alertmanager)、執行(治療師端點,工人隊列/線程)和行為(Jenkins, Kubernetes,大三角帆的工作)。

治療的目的是使用事件驅動的體係結構,自主維修Kubernetes基礎設施。我們的報警係統(普羅米修斯,Alertmanager)監控我們的生產基礎設施和火災警報基於定義的表達式。治療者作為後台服務運行聽HTTP請求從Alertmanager警告有效載荷。

使用警報的元數據,治療師構造適當的補救基於警報類型和警告標簽。一個補救要求補救行動以及所需的任何參數。

每一個補救計劃到一個工人執行線程池。工作線程將運行相應的補救通過調用適當的服務,然後監控修複完成。在實踐中,這可能是開始詹金斯,Kubernetes或大三角帆自動化手動腳本工作流程的工作。我們選擇這些框架的支持,因為他們提供些磚工程師定製警報行動反應的能力。

修複完成後,JIRA和鬆弛通知被發送到相應的團隊確認修複任務完成。

治療者可以很容易地擴展和新類型的矯正。工程團隊之外的雲下文可以矯正的工作與他們的服務集成警報,采取必要行動從事件中恢複,減少隨叫隨負載一般在工程。

示例用例

治療的一個用例是醫治低磁盤空間Kubernetes節點。待命的工程師通知這個問題,警報被稱為“NodeDiskPressure”。為了補救NodeDiskPressure,隨叫隨到工程師將連接到適當的節點和執行碼頭工人形象修剪命令。

自動化,我們首先開發一個行動是由治療師;我們定義了一個稱為DockerPruneNode詹金斯工作,自動化的手動步驟相當於連接節點和執行碼頭工人形象修剪。然後我們配置一個治療師補救解決NodeDiskPressure警報自動定義一個治療師規則,結合一個精確的補救措施(DockerPruneNode)鑒於警報和參數。

下麵是一個例子NodeDiskPressure警報是如何轉化為一個特定的修複包括工作運行和所有需要的參數。最終的矯正對象有三個“翻譯”參數取自警報以及一個“靜態”硬編碼的參數。

例修複由磚auto-remediation服務治療師NodeDiskPressure警戒。
例修複由磚auto-remediation服務治療師NodeDiskPressure警戒。

還有其他一些參數配置工程師可以配置優化的具體行為補救。他們在這裏省略了簡潔。

定義這個規則後,根本問題是完全自動的,允許待命的工程師可以專注於其他更重要的事情!

未來的步驟

目前治療、運行和改進我們的開發基礎設施的可用性。下一步服務看起來像什麼?

最初,我們計劃在更多的雲下文團隊的用例。具體地說,我們正在考慮以下用例:

  • 支持細粒度的伸縮集群通過利用現有係統使用警報(CPU、內存)觸發一個補救,將增加集群能力。
  • 終止和再補充糧食給Kubernetes節點被認為是不健康的。
  • 旋轉服務即將到期時TLS認證。

此外,我們想要繼續推動采用這個工具在工程組織和幫助其他團隊在他們的用例。這個總體框架可以擴展到其他團隊減少隨叫隨到負載。

我期待著看到其他事件治療師可以幫助修複磚在未來!

特別感謝偉大的實習經驗,我的導師廖子恒,經理Nanxi康和埃裏克•王以及雲計算團隊的其他成員在磚!

我非常喜歡夏天在磚和鼓勵任何人尋找平台工程加入富有挑戰性和價值性的職業團隊。Beplay体育安卓版本如果你有興趣對我們的自愈體係結構,看看我們開放的工作機會!

免費試著磚
看到所有工程的博客的帖子
Baidu
map