自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Inspektor Gadget:云原生時(shí)代下的 eBPF 工具鏈框架

云計(jì)算 云原生
Hello folks,我是 Luga,今天我們來聊一下云原生生態(tài)領(lǐng)域的 eBPF 工具鏈管理框架 - Inspektor Gadget 。

一、何為 Inspektor Gadget ?

 Inspektor Gadget 是一款功能強(qiáng)大的工具集,用于調(diào)試和檢查 Kubernetes 資源和應(yīng)用程序。同時(shí),它提供了一系列工具和小工具,用于管理 Kubernetes Cluster 中的 eBPF 程序的打包、部署和執(zhí)行。這些 eBPF 程序包括許多基于 BCC 工具的程序,以及專門為 Inspektor Gadget 開發(fā)的一些程序。

Inspektor Gadget 的設(shè)計(jì)目標(biāo)是簡化 Kubernetes Cluster 的調(diào)試和故障排除過程。通過自動(dòng)將低級(jí)內(nèi)核原語映射到高級(jí) Kubernetes 資源,提供了更直觀、更快速的方式來查找相關(guān)信息?;诖?,開發(fā)人員和運(yùn)維人員可以更輕松地監(jiān)視和分析 Kubernetes Cluster 中的應(yīng)用程序行為。

使用 Inspektor Gadget,我們可以執(zhí)行各種任務(wù),例如,跟蹤應(yīng)用程序的系統(tǒng)調(diào)用、監(jiān)視網(wǎng)絡(luò)流量、分析容器之間的通信和資源利用情況等。通過與 eBPF 技術(shù)的結(jié)合,Inspektor Gadget 提供了更深入的洞察力,從而幫助我們更好地理解和解決 Kubernete s環(huán)境中的問題。

二、Inspektor Gadget 運(yùn)行機(jī)制

Inspektor Gadget 通常在 Kubernetes Cluster 中作為 DaemonSet 模式部署到每個(gè)節(jié)點(diǎn)。利用內(nèi)核的 eBPF(extended Berkeley Packet Filter)輔助程序來監(jiān)控與每個(gè) Pod 中的用戶空間程序相關(guān)的系統(tǒng)調(diào)用事件。通過在每個(gè)節(jié)點(diǎn)上部署 eBPF程序,Inspektor Gadget 能夠捕獲和收集與應(yīng)用程序行為密切相關(guān)的系統(tǒng)調(diào)用日志數(shù)據(jù)。

具體而言,Inspektor Gadget 的 eBPF 程序在內(nèi)核中運(yùn)行,并通過監(jiān)視系統(tǒng)調(diào)用事件來收集相關(guān)的日志數(shù)據(jù)。這些事件可以涉及文件訪問、網(wǎng)絡(luò)通信、進(jìn)程管理等與應(yīng)用程序行為有關(guān)的操作。eBPF 程序?qū)⑦@些日志數(shù)據(jù)存儲(chǔ)在內(nèi)核的環(huán)形緩沖區(qū)中。

 Inspektor Gadget 的用戶空間實(shí)用程序負(fù)責(zé)從內(nèi)核的環(huán)形緩沖區(qū)中獲取這些日志數(shù)據(jù),并將其顯示給用戶。從而使得開發(fā)人員和運(yùn)維人員能夠查看和分析與每個(gè) Pod 中用戶空間程序相關(guān)的系統(tǒng)調(diào)用的詳細(xì)信息,以幫助他們識(shí)別潛在的問題、調(diào)試應(yīng)用程序和進(jìn)行性能優(yōu)化。

我們來看一下整個(gè)拓?fù)浼軜?gòu)設(shè)計(jì),具體如下所示:

基于上述拓?fù)浼軜?gòu),整個(gè)處理機(jī)制主要涉及如下:

1、Inspektor Gadget 的 eBPF 程序在運(yùn)行時(shí)收集的事件會(huì)被寫入一個(gè)專門的內(nèi)核緩沖區(qū)。這個(gè)緩沖區(qū)是為了有效地存儲(chǔ)和管理大量的事件數(shù)據(jù)。而I nspektor Gadget 的用戶空間組件負(fù)責(zé)從這個(gè)緩沖區(qū)中讀取事件,并將其發(fā)布到一個(gè)稱為 “Stream” 的通道中。

2、Stream 是 Inspektor Gadget 的用戶空間組件使用的一種數(shù)據(jù)流機(jī)制。它允許事件數(shù)據(jù)以實(shí)時(shí)或近乎實(shí)時(shí)的方式進(jìn)行傳輸和處理。通過將事件發(fā)布到 Stream 中,Inspektor Gadget 提供了一種方便的方式來傳遞和處理從 eBPF 程序收集的事件數(shù)據(jù)。

3、為了展現(xiàn)這些事件數(shù)據(jù),Inspektor Gadget 使用了內(nèi)部的 kubectl exec API 接口。kubectl exec 是 Kubernetes 的一個(gè)命令行工具,用于在容器中執(zhí)行命令。Inspektor Gadget 利用這個(gè) API 接口來與容器中運(yùn)行的用戶空間組件進(jìn)行通信,并從 Stream 中獲取事件數(shù)據(jù)。

4、一旦獲取到事件數(shù)據(jù),Inspektor Gadget 的用戶空間組件可以進(jìn)行各種操作,比如實(shí)時(shí)顯示事件日志、進(jìn)行分析或?qū)⑹录?shù)據(jù)發(fā)送到其他監(jiān)控系統(tǒng)。這種集成了 kubectl exec API 接口的方式使得 Inspektor Gadget 的用戶界面更加靈活和可擴(kuò)展。

針對(duì) Gadget Tracer Manager,作為一個(gè)負(fù)責(zé)管理正在運(yùn)行的小工具和容器列表的組件,維護(hù)了一個(gè)記錄當(dāng)前活動(dòng)的小工具和容器的清單。每個(gè)正在運(yùn)行的小工具都與一個(gè) eBPF 映射相關(guān)聯(lián),該映射中存儲(chǔ)了要跟蹤的容器的掛載命名空間標(biāo)識(shí)符。這些標(biāo)識(shí)符是根據(jù)傳遞給小工具的命名空間、標(biāo)簽、Pod名稱等參數(shù)進(jìn)行填充的。

為了了解當(dāng)前正在運(yùn)行的容器,Gadget Tracer Manager 利用 runc-fanotify 技術(shù)。監(jiān)視容器運(yùn)行時(shí)的文件系統(tǒng)活動(dòng)。通過與 runc-fanotify 集成,Gadget Tracer Manager 能夠獲取有關(guān)當(dāng)前正在運(yùn)行的容器的信息。

基于上述的這些信息,Gadget Tracer Manager 可以動(dòng)態(tài)地添加或刪除容器到其集合中。這意味著當(dāng)容器啟動(dòng)或停止時(shí),Gadget Tracer Manager 能夠相應(yīng)地更新其管理的容器列表。這種動(dòng)態(tài)管理的能力使得 Gadget Tracer Manager 能夠?qū)崟r(shí)地跟蹤和監(jiān)控容器的行為。

基于上述的拓?fù)浼軜?gòu)以及鏈路請(qǐng)求,我們可以窺探到,對(duì)于 Inspektor Gadget 而言,主要分為四個(gè)核心任務(wù),每個(gè)任務(wù)都由以下包管理:

1、Tracers

基于整個(gè)架構(gòu)角度,Inspektor Gadget 的 Tracers 主要負(fù)責(zé)從主機(jī)收集各種與應(yīng)用程序行為和系統(tǒng)操作相關(guān)的事件的組件,利用 eBPF 技術(shù)攔截和記錄進(jìn)程創(chuàng)建、文件訪問等事件,并將其保存到日志系統(tǒng)中,以供后續(xù)分析和檢查?;趯?duì)事件的收集和記錄能力為應(yīng)用程序的調(diào)試和優(yōu)化提供了有價(jià)值的數(shù)據(jù)來源。

2、Container-Collection 

Container-Collection 組件通過追蹤主機(jī)中容器的創(chuàng)建和刪除操作,利用容器信息來豐富事件的上下文。通過將容器的元數(shù)據(jù)與事件相關(guān)聯(lián),Inspektor Gadget 能夠提供更豐富和準(zhǔn)確的事件分析和診斷功能。基于對(duì)容器信息的加工、利用從而使得事件數(shù)據(jù)更具有可操作性和可理解性。

3、Trace-Collection

而對(duì)于 Inspektor Gadget 的 Trace-Collection 組件而言,其主要利用 Container-Collection 提供的容器信息,實(shí)現(xiàn)了按容器的過濾和篩選功能。從而使得用戶可以根據(jù)容器的標(biāo)識(shí)符或其他屬性,對(duì)事件進(jìn)行個(gè)性化的分析和監(jiān)控。基于容器過濾的能力,增強(qiáng)了 Inspektor Gadget 的靈活性和可定制性。

4、 Columns 

Columns 組件則主要用于創(chuàng)建跟蹤器生成的事件的列表表示。通過解析和格式化事件記錄,并以清晰的列形式呈現(xiàn),使用戶能夠方便地瀏覽、分析和比較事件的屬性值。這種列表視圖提供了高效的事件導(dǎo)航和分析功能,提升了事件數(shù)據(jù)的可讀性和可操作性。

三、Inspektor Gadget 運(yùn)行要求

內(nèi)核層面

Inspektor Gadget 使用 eBPF 來提供其功能,并根據(jù)不同的內(nèi)核版本和內(nèi)核配置啟用不同的 eBPF 功能。Inspektor Gadget 依賴于一種編譯-導(dǎo)出運(yùn)行(CO-RE)方法,并需要 BTF(BPF Type Format)信息來實(shí)現(xiàn)。BTF 信息可以從多個(gè)來源收集,如果一個(gè)來源不可用,它會(huì)嘗試另一個(gè)來源。

以下是關(guān)于每個(gè)來源的更詳細(xì)說明:

1、內(nèi)核 BTF:內(nèi)核編譯時(shí)如果啟用了CONFIG_DEBUG_INFO_BTF 選項(xiàng),它會(huì)在 /sys/kernel/btf/vmlinux 路徑下公開 BTF 信息。

2、小工具容器鏡像:Inspektor Gadget 使用 BTFGen 生成一些已知內(nèi)核版本的 BTF 信息,并將其包含在小工具的容器映像中。

3、BTFHub 下載:如果以上兩個(gè)來源都不可用,nspektor Gadget 會(huì)嘗試從 BTFHub下載 BTF 信息。

如果內(nèi)核不支持 CO-RE,建議大家使用舊版本的 Inspektor Gadget(例如 v0.21.0-bcc ),該版本提供基于 BCC(BPF Compiler Collection)的工具。

需要注意的是,所有小工具在運(yùn)行時(shí)都需要滿足以下條件才能正常工作:

1、CONFIG_BPF=y:內(nèi)核配置選項(xiàng),需要確保 BPF(Berkeley Packet Filter)功能已啟用。BPF 是一種靈活的內(nèi)核技術(shù),允許在內(nèi)核中執(zhí)行特定的程序來過濾和操作數(shù)據(jù)包、系統(tǒng)調(diào)用等。

2、CONFIG_BPF_SYSCALL=y:內(nèi)核配置選項(xiàng),需要確保 BPF 系統(tǒng)調(diào)用支持已啟用。BPF 系統(tǒng)調(diào)用是用戶空間程序與內(nèi)核BPF程序之間進(jìn)行交互的接口,允許用戶空間程序加載和執(zhí)行 BPF 程序。

3、CONFIG_DEBUG_INFO_BTF=y:這是與 BTF(BPF Type Format)相關(guān)的內(nèi)核配置選項(xiàng)。BTF 是一種調(diào)試信息格式,用于描述內(nèi)核中的數(shù)據(jù)結(jié)構(gòu)和類型。如果主機(jī)內(nèi)核的 BTF 信息不受 BTFHub 支持(即“無法從 BTFHub 下載”),則需要啟用此選項(xiàng)以確保小工具能夠訪問所需的 BTF 信息。

Kubernetes 平臺(tái)層面:

Kubernetes 平臺(tái)

支持

Minikube

AKS、EKS、GKS

OpenShift

AWS Fargate、Azure Containers instances、GKE Autopilot.etc

/

容器運(yùn)行時(shí)層面:

編排類型

容器管理

容器運(yùn)行時(shí)

支持

Docker

containerd

runc

Nerdctl

containerd

runc

Kubernetes

containerd

runc

Kubernetes

containerd

wasm

/

Kubernetes

containerd

katacontainers

/

Kubernetes

CRI-O

runc / crun

Kubernetes v1.20+

Podman(root)

Podman

runc / crun

Podman(rootless)

Podman

runc / crun

Only with Podman API

enabled

針對(duì) Inspektor Gadget 的安裝配置,相對(duì)來說較為簡單,大家若有興趣,可查閱官方相關(guān)文檔。

責(zé)任編輯:華軒 來源: 架構(gòu)驛站
相關(guān)推薦

2022-01-14 07:17:39

阿里云云原生經(jīng)濟(jì)

2021-01-13 07:15:41

云原生反向代理網(wǎng)關(guān)

2023-06-29 08:38:37

2022-04-19 16:16:35

DevOps云原生容器

2019-09-20 13:37:50

Java云原生Docker

2013-11-01 16:43:54

云計(jì)算

2020-07-16 08:05:15

JavaGo

2022-07-26 06:50:02

云原生JavaMicronaut

2013-05-08 09:27:27

軟件定義數(shù)據(jù)中心SDDC混合云

2021-08-09 11:43:02

容器云原生安全

2020-08-28 08:29:40

云原生微服務(wù)編程

2023-08-28 16:08:12

2021-08-23 13:50:46

云原生PaaS

2021-03-23 11:09:36

云計(jì)算

2023-11-30 16:42:21

2019-07-04 17:28:04

騰訊云云原生開源

2020-10-21 10:04:56

云原生應(yīng)用架構(gòu)

2015-12-14 17:50:09

ENI經(jīng)濟(jì)和信息化網(wǎng)

2015-11-24 18:23:03

VMware云計(jì)算vSphere

2018-04-11 09:07:36

云計(jì)算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)