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

十多年的五常網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整五常建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“五常網(wǎng)站設計”,“五常網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
Inspektor Gadget 的設計目標是簡化 Kubernetes Cluster 的調試和故障排除過程。通過自動將低級內核原語映射到高級 Kubernetes 資源,提供了更直觀、更快速的方式來查找相關信息?;诖?,開發(fā)人員和運維人員可以更輕松地監(jiān)視和分析 Kubernetes Cluster 中的應用程序行為。
使用 Inspektor Gadget,我們可以執(zhí)行各種任務,例如,跟蹤應用程序的系統(tǒng)調用、監(jiān)視網(wǎng)絡流量、分析容器之間的通信和資源利用情況等。通過與 eBPF 技術的結合,Inspektor Gadget 提供了更深入的洞察力,從而幫助我們更好地理解和解決 Kubernete s環(huán)境中的問題。
二、Inspektor Gadget 運行機制
Inspektor Gadget 通常在 Kubernetes Cluster 中作為 DaemonSet 模式部署到每個節(jié)點。利用內核的 eBPF(extended Berkeley Packet Filter)輔助程序來監(jiān)控與每個 Pod 中的用戶空間程序相關的系統(tǒng)調用事件。通過在每個節(jié)點上部署 eBPF程序,Inspektor Gadget 能夠捕獲和收集與應用程序行為密切相關的系統(tǒng)調用日志數(shù)據(jù)。
具體而言,Inspektor Gadget 的 eBPF 程序在內核中運行,并通過監(jiān)視系統(tǒng)調用事件來收集相關的日志數(shù)據(jù)。這些事件可以涉及文件訪問、網(wǎng)絡通信、進程管理等與應用程序行為有關的操作。eBPF 程序將這些日志數(shù)據(jù)存儲在內核的環(huán)形緩沖區(qū)中。
Inspektor Gadget 的用戶空間實用程序負責從內核的環(huán)形緩沖區(qū)中獲取這些日志數(shù)據(jù),并將其顯示給用戶。從而使得開發(fā)人員和運維人員能夠查看和分析與每個 Pod 中用戶空間程序相關的系統(tǒng)調用的詳細信息,以幫助他們識別潛在的問題、調試應用程序和進行性能優(yōu)化。
我們來看一下整個拓撲架構設計,具體如下所示:
基于上述拓撲架構,整個處理機制主要涉及如下:
1、Inspektor Gadget 的 eBPF 程序在運行時收集的事件會被寫入一個專門的內核緩沖區(qū)。這個緩沖區(qū)是為了有效地存儲和管理大量的事件數(shù)據(jù)。而I nspektor Gadget 的用戶空間組件負責從這個緩沖區(qū)中讀取事件,并將其發(fā)布到一個稱為 “Stream” 的通道中。
2、Stream 是 Inspektor Gadget 的用戶空間組件使用的一種數(shù)據(jù)流機制。它允許事件數(shù)據(jù)以實時或近乎實時的方式進行傳輸和處理。通過將事件發(fā)布到 Stream 中,Inspektor Gadget 提供了一種方便的方式來傳遞和處理從 eBPF 程序收集的事件數(shù)據(jù)。
3、為了展現(xiàn)這些事件數(shù)據(jù),Inspektor Gadget 使用了內部的 kubectl exec API 接口。kubectl exec 是 Kubernetes 的一個命令行工具,用于在容器中執(zhí)行命令。Inspektor Gadget 利用這個 API 接口來與容器中運行的用戶空間組件進行通信,并從 Stream 中獲取事件數(shù)據(jù)。
4、一旦獲取到事件數(shù)據(jù),Inspektor Gadget 的用戶空間組件可以進行各種操作,比如實時顯示事件日志、進行分析或將事件數(shù)據(jù)發(fā)送到其他監(jiān)控系統(tǒng)。這種集成了 kubectl exec API 接口的方式使得 Inspektor Gadget 的用戶界面更加靈活和可擴展。
針對 Gadget Tracer Manager,作為一個負責管理正在運行的小工具和容器列表的組件,維護了一個記錄當前活動的小工具和容器的清單。每個正在運行的小工具都與一個 eBPF 映射相關聯(lián),該映射中存儲了要跟蹤的容器的掛載命名空間標識符。這些標識符是根據(jù)傳遞給小工具的命名空間、標簽、Pod名稱等參數(shù)進行填充的。
為了了解當前正在運行的容器,Gadget Tracer Manager 利用 runc-fanotify 技術。監(jiān)視容器運行時的文件系統(tǒng)活動。通過與 runc-fanotify 集成,Gadget Tracer Manager 能夠獲取有關當前正在運行的容器的信息。
基于上述的這些信息,Gadget Tracer Manager 可以動態(tài)地添加或刪除容器到其集合中。這意味著當容器啟動或停止時,Gadget Tracer Manager 能夠相應地更新其管理的容器列表。這種動態(tài)管理的能力使得 Gadget Tracer Manager 能夠實時地跟蹤和監(jiān)控容器的行為。
基于上述的拓撲架構以及鏈路請求,我們可以窺探到,對于 Inspektor Gadget 而言,主要分為四個核心任務,每個任務都由以下包管理:
1、Tracers
基于整個架構角度,Inspektor Gadget 的 Tracers 主要負責從主機收集各種與應用程序行為和系統(tǒng)操作相關的事件的組件,利用 eBPF 技術攔截和記錄進程創(chuàng)建、文件訪問等事件,并將其保存到日志系統(tǒng)中,以供后續(xù)分析和檢查?;趯κ录氖占陀涗浤芰閼贸绦虻恼{試和優(yōu)化提供了有價值的數(shù)據(jù)來源。
2、Container-Collection
Container-Collection 組件通過追蹤主機中容器的創(chuàng)建和刪除操作,利用容器信息來豐富事件的上下文。通過將容器的元數(shù)據(jù)與事件相關聯(lián),Inspektor Gadget 能夠提供更豐富和準確的事件分析和診斷功能。基于對容器信息的加工、利用從而使得事件數(shù)據(jù)更具有可操作性和可理解性。
3、Trace-Collection
而對于 Inspektor Gadget 的 Trace-Collection 組件而言,其主要利用 Container-Collection 提供的容器信息,實現(xiàn)了按容器的過濾和篩選功能。從而使得用戶可以根據(jù)容器的標識符或其他屬性,對事件進行個性化的分析和監(jiān)控?;谌萜鬟^濾的能力,增強了 Inspektor Gadget 的靈活性和可定制性。
4、 Columns
Columns 組件則主要用于創(chuàng)建跟蹤器生成的事件的列表表示。通過解析和格式化事件記錄,并以清晰的列形式呈現(xiàn),使用戶能夠方便地瀏覽、分析和比較事件的屬性值。這種列表視圖提供了高效的事件導航和分析功能,提升了事件數(shù)據(jù)的可讀性和可操作性。
三、Inspektor Gadget 運行要求
內核層面:
Inspektor Gadget 使用 eBPF 來提供其功能,并根據(jù)不同的內核版本和內核配置啟用不同的 eBPF 功能。Inspektor Gadget 依賴于一種編譯-導出運行(CO-RE)方法,并需要 BTF(BPF Type Format)信息來實現(xiàn)。BTF 信息可以從多個來源收集,如果一個來源不可用,它會嘗試另一個來源。
以下是關于每個來源的更詳細說明:
1、內核 BTF:內核編譯時如果啟用了CONFIG_DEBUG_INFO_BTF 選項,它會在 /sys/kernel/btf/vmlinux 路徑下公開 BTF 信息。
2、小工具容器鏡像:Inspektor Gadget 使用 BTFGen 生成一些已知內核版本的 BTF 信息,并將其包含在小工具的容器映像中。
3、BTFHub 下載:如果以上兩個來源都不可用,nspektor Gadget 會嘗試從 BTFHub下載 BTF 信息。
如果內核不支持 CO-RE,建議大家使用舊版本的 Inspektor Gadget(例如 v0.21.0-bcc ),該版本提供基于 BCC(BPF Compiler Collection)的工具。
需要注意的是,所有小工具在運行時都需要滿足以下條件才能正常工作:
1、CONFIG_BPF=y:內核配置選項,需要確保 BPF(Berkeley Packet Filter)功能已啟用。BPF 是一種靈活的內核技術,允許在內核中執(zhí)行特定的程序來過濾和操作數(shù)據(jù)包、系統(tǒng)調用等。
2、CONFIG_BPF_SYSCALL=y:內核配置選項,需要確保 BPF 系統(tǒng)調用支持已啟用。BPF 系統(tǒng)調用是用戶空間程序與內核BPF程序之間進行交互的接口,允許用戶空間程序加載和執(zhí)行 BPF 程序。
3、CONFIG_DEBUG_INFO_BTF=y:這是與 BTF(BPF Type Format)相關的內核配置選項。BTF 是一種調試信息格式,用于描述內核中的數(shù)據(jù)結構和類型。如果主機內核的 BTF 信息不受 BTFHub 支持(即“無法從 BTFHub 下載”),則需要啟用此選項以確保小工具能夠訪問所需的 BTF 信息。
Kubernetes 平臺層面:
|
Kubernetes 平臺 |
支持 |
|
Minikube |
√ |
|
AKS、EKS、GKS |
√ |
|
OpenShift |
√ |
|
AWS Fargate、Azure Containers instances、GKE Autopilot.etc |
/ |
容器運行時層面:
|
編排類型 |
容器管理 |
容器運行時 |
支持 |
|
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 |
針對 Inspektor Gadget 的安裝配置,相對來說較為簡單,大家若有興趣,可查閱官方相關文檔。
網(wǎng)頁名稱:InspektorGadget:后浪云時代下的eBPF工具鏈框架
文章轉載:http://fisionsoft.com.cn/article/dheschj.html


咨詢
建站咨詢
