天天看點

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

作者:擎創夏洛克AIOps

#挑戰30天在頭條寫日記# #網際網路# #讓AI觸手可及# #金融# #财經# #程式員# #馬斯克# #頭條創作挑戰賽#

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

一、雲原生技術發展的背景與問題

目前,雲原生技術主要是以容器技術為基礎圍繞着 Kubernetes的标準化技術生态,通過标準可擴充的排程、網絡、存儲、容器運作時接口來提供基礎設施,同時通過标準可擴充的聲明式資源和控制器來提供運維能力。兩層标準化推進了細化的社會分工,各領域進一步提升規模化和專業化,全面達到成本、效率、穩定性的優化。

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

在這樣的背景下,大量公司都使用雲原生技術來開發和運維應用。正因為雲原生技術帶來了更多可能性,目前業務應用出現了微服務衆多、多語言開發、多通信協定的特征,同時雲原生技術本身将複雜度下移,給可觀測性帶來了許多挑戰。

1.複雜微服務架構的挑戰

難以獲得系統的整體動态拓撲,難以确定特定服務的上下遊服務品質。

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

2.多語⾔的挑戰

傳統可觀測⽅法需要對不同語⾔使⽤不同的⽅法進行可觀測。不同語⾔需要不同埋點⽅法,甚⾄有的語⾔沒有現成的埋點⽅法,埋點對應⽤性能影響⽆法簡單評估。

3.多通信協定的挑戰

基礎設施(Kafka, MySQL, Redis等)、微服務套件(Spring, gRPC, Bubbo等)采用了不同的通信協定。傳統可觀測⽅法通常是在應⽤層特定通信接⼝進⾏埋點。埋點⽅法多種多樣,有的通信協定沒有現成的埋點⽅法,同理埋點對應⽤性能影響⽆法簡單評估。

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

二、解決方案

通常與可觀測性相關聯緊密的資料便是“名額”、“⽇志”和“鍊路追蹤”。然⽽,這些資料源中的每⼀項都有不同的收集⽅法。除此,針對這些資料項進行采集可能需要多種不同的産品和代理。

eBPF可以以⼀種⾮侵⼊性、安全且跨系統⼀緻的⽅式收集遙測資料以實作可觀測性,并且對目前系統性能和資源使⽤影響⼩。

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

三、什麼是eBPF?

eBPF 是⼀種⽆需更改Linux核心代碼,便能讓程式在核心中運⾏的技術。開發者可以通過執⾏eBPF程式,給運⾏中的作業系統添加額外的能⼒。這催⽣了很多基于eBPF 的項⽬,涵蓋了⼴泛⽤例,包括雲原⽣⽹絡、安全和可觀測性。

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

例如:當下正流⾏的 Cilium ,是基于eBPF 實作資料轉發的 CNI ⽹絡插件;

Falco 是CNCF 開源孵化的運⾏時安全⼯具,專⻔為 Kubernetes 、Linux 和雲原⽣建構;

Pixie 使⽤ eBPF ⾃動收集遙測資料,也已開源應⽤,并進⼊了 CNCF 沙箱的可觀測項⽬;同時⼀些服務⽹格産品也在探索使⽤ eBPF。

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

四、eBPF與可觀測性的關系

傳統意義上的觀測性,是指在外部洞悉應⽤程式運⾏狀況的能⼒。⽽ eBPF 是⼀種無需入侵應用代碼,直接⾯向作業系統核心層添加黑盒代碼的⾰命性技術。這種檢視核心中的操作,卻不會 “⼲擾” 應⽤程式或核心本身的技術,從⽽使得 eBPF 獲得可觀測性強⼤能⼒。

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

是以使⽤ eBPF,即使不依賴作業系統公開的固定名額,我們也能直接從核心中收集和聚合⾃定義名額,并根據各種可能性來源,⽣成可⻅性事件。通過這種⽅式,我們将可見性擴充到核心,甚⾄可以通過僅收集所需的可見性資料,實作整體系統開銷的降低。

eBPF 與其他收集遙測資料的⼿段相⽐,有以下優點:

1.低侵入性:它不需要業務系統埋點,也不修改核心源代碼,從⽽減⼩了監測系統與業務系統、核心之間的耦合。

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

2.安全:它不會改變任何核心源代碼。eBPF 程式在轉換為位元組碼後會經過驗證階段以防⽌資源洩漏、⽆限循環等意外情況。它運⾏在沙盒環境以通路有限的核心輔助函數。

3.友善:與任何其他 Linux 監控替代⽅案相⽐,您可以獲得更精細的細節和核心上下⽂。還可以⾃由導出監控資料并将其攝取到第三⽅可視化⼯具中。

五、基于 eBPF 技術的可觀測方案實踐

實踐一:主機、服務、POD 級别的動态⽹絡性能監控

在每個被監測 kubernetes 節點上都部署⼀個探針,這個探針通過 hook 核心的 accept, connect, send, recv 等L4(TCP、UDP)相關的系統調⽤,可以擷取程序與綁定位址的關系、通信雙⽅的位址、各連接配接收發的流量統計(位元組數、RTT等)。

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

探針會去擷取目前 k8s 叢集的 metadata 資料(pid, container, pod, service, node等)并把它們儲存在記憶體中,⽤來實作原始 eBPF 資料的豐富。

服務端在收集到通信雙⽅的 ebpf 資料後可以進一步豐富資料,例如将對端 ip:port 對應的k8s metadata 豐富到本端 ebpf 資料中,并存⼊資料庫。查詢時,根據指定的時間範圍、主機/服務/pod等篩選條件查詢資料庫,從⽽構造出該時段的各級别的動态拓撲圖。

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

實踐二:微服務監控

探針在 hook 點獲得⽹絡報⽂之後,可以進一步解析 L7 内容,包括 HTTP、HTTPS、gRPC 等。探針将微服務的各個會話(⼀次請求和響應)的 URL、latency、錯誤碼關聯到 ip:port 或者特定 pid。探針定期将會話聚合資訊推送到服務端進一步豐富資料。如此可以構造出特定時段的微服務的動态拓撲圖、服務品質⻩⾦名額等。

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

實踐三:Profiling

借助 eBPF 可以獲得系統級别或者特定程序的 oncpu 和 offcpu 事件。oncpu 是指定時采樣(⼀般100Hz),⽤于分析程式的 cpu 熱點,為減少占⽤ CPU 指明⽅向。offcpu 是指核心排程線程的事件,⽤于分析線程由于鎖、IO等原因被剝奪 CPU,為充分利⽤ CPU、減少鎖搶占指明⽅向。

基于 oncpu 事件可以繪制⽕焰圖,直覺地展示各個調⽤棧所占時間⽐例。

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

六、結論

eBPF 是⼀個令⼈印象深刻的可觀測性⼯具,與傳統的可觀測性解決⽅案相⽐,它可以提供更深⼊的洞察⼒。

其收集整個系統遙測資料的安全、⾮侵⼊性等優勢是過去沒有許多産品、應⽤程式級代理和⾮常複雜的操作所⽆法獲得的。eBPF 正在發展成為可觀測性的标準基礎。

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

擎創科技,Gartner連續推薦的AIOps領域标杆供應商。公司緻力于協助企業客戶提升對運維資料的洞見能力,優化運維效率,充分展現科技運維對業務營運的影響力。

行業龍頭客戶的共同選擇

擎創技術流 | 一文讀懂eBPF對kubernetes可觀測的重要性

了解更多運維幹貨與行業前沿動态

可以右上角一鍵關注

我們是深耕智能運維領域近十年的

連續多年獲Gartner推薦的AIOps标杆供應商

下期我們不見不散~

繼續閱讀