当前位置:首页 >综合 >一篇带给你eBpf开源项目解析 是源项一种新型的虚拟机技术

一篇带给你eBpf开源项目解析 是源项一种新型的虚拟机技术

2024-05-14 18:00:50 [百科] 来源:避面尹邢网

一篇带给你eBpf开源项目解析

作者:浩仔浩仔 开源 WebAssembly的篇带设计目标是为了解决Web上应用程序的性能问题,尤其是源项在使用JavaScript等高级语言编写的复杂Web应用中。

前置知识:

  • WASM:WebAssembly(缩写为Wasm)是目解一种低级的、与平台无关的篇带二进制指令格式,是源项一种新型的虚拟机技术,可以在现代Web浏览器中运行,目解并且可以与JavaScript等其他Web技术一起使用。篇带它被设计为一种可移植的源项编译目标,能够将不同编程语言的目解代码编译成WebAssembly字节码,这些字节码可以在Web浏览器中快速加载和执行。篇带

WebAssembly的源项设计目标是为了解决Web上应用程序的性能问题,尤其是目解在使用JavaScript等高级语言编写的复杂Web应用中。相比于JavaScript等脚本语言,篇带WebAssembly的源项执行速度更快,且能够提供更好的目解性能和安全性,同时也更加适合进行密集计算和高性能图形处理等操作。除了在Web浏览器中使用,WebAssembly还可以在其他环境中运行,如桌面应用程序、移动应用程序等,因此它也被认为是一种通用的、可移植的虚拟机技术。

一篇带给你eBpf开源项目解析 是源项一种新型的虚拟机技术

A stack-based virtual machine is a type of virtual machine architecture in which the operands for instructions are pushed onto a stack, and the instructions themselves operate on the top elements of the stack. In other words, the virtual machine uses a stack to store data and operands, and the instructions are executed based on the data at the top of the stack.

一篇带给你eBpf开源项目解析 是源项一种新型的虚拟机技术

  • WASI:WebAssembly System Interface(缩写为WASI)是一个标准化的API接口,它提供了一种通用的系统接口,使得WebAssembly程序能够在不同的操作系统和硬件平台上运行,并能够访问底层操作系统的资源和功能,如文件系统、网络、定时器等。
  • eBPF:(Extended Berkeley Packet Filter)是一个内核级别的虚拟机技术,它可以动态地注入用户自定义的程序代码到内核中运行并关联事件,并在不修改内核源代码的情况下增强内核的功能。eBPF 可以监控和分析内核和用户空间的事件,从而实现高效的性能分析、网络抓包、安全监控和资源管理等功能。

eBPF 能够工作的原理是通过在内核中注册各种钩子函数,这些钩子函数会在特定的事件发生时被触发,并执行 eBPF 程序来处理这些事件。eBPF 程序是一种特殊的字节码格式,可以在用户空间编写,然后通过内核的加载器加载到内核中运行。eBPF 程序可以访问内核中的数据结构,并对数据进行修改或过滤。

一篇带给你eBpf开源项目解析 是源项一种新型的虚拟机技术

在云原生环境下,ebpf更有优势。

可关联event类型:

Entry to/Exit from Functions:kprobe,kretprobe,uprobe,uretprobe
Tracepoints:/sys/kernel/debug/tracing/events
Perf Events
Linux Security Module Interface
Network Interfaces:XDP
Sockets and Other Networking Hooks
  • Bcc:bcc(BPF Compiler Collection)是一个用于生成eBPF(extended Berkeley Packet Filter)程序的工具集,它提供了一组高级工具和库,使得用户可以轻松地编写和调试eBPF程序。

Starship的架构

1、agent

├── cmd 入口函数

├── deployer 部署eBpf+wasm模块

├── driver 运行模块

├── ebpf eBpf相关

├── proc-info 收集process信息

└── wasm wasm处理信息

两大块功能:

1、模块管理,模块指的是eBpf+wasm。

2、进程信息上报。

Agent的标识是NodeName和agent PodID。这两个是从kubernetes注入的:

另外,还挂载了主机的/和/sys,用于bcc工具和process监控。

因为要使用ebpf program和监控进程,所以需要特权。

Agent启动后,首先会清除之前部署过的TricorderProbes trap。然后,程序使用 linux_headers 包中的 Init 函数初始化 BCC 的 Linux 头文件。之后,grpc连接到api-server、连接到pg、开启循环获取process信息、开启循环处理module的deploy处理。

由于agent容器挂载了主机的/sys路径,因此可以收集节点上所有的进程信息。在这种情况下,grabProcessInfo函数将搜索主机的/sys/fs/cgroup目录,因此,它将能够收集节点上所有进程的信息。

当部署一个module后,会开启轮询:1.从eBPF中读取数据。2.将数据复制到WASM中。3.从WASM中读取结果。4.将json结果写入pg。

2、api-server

├── cmd 入口函数

├── grpc 处理deploy和process的grpc调用

├── http 定义http路由,dao

├── meta 原生kubernetes监控资源

├── pb protobuf定义

├── testing 测试

├── utils 工具

└── wasm 编译

目前部署为StatefulSet,但是卷类型是emptyDir,也就是每次会新建一个tricorder.db文件。

然后启动的时候进行初始化。

Api-server主要功能有:agent管理,管理模块的部署,获取节点进程信息,数据展示,数据持久化(sqlite)。

在部署模块时,各agent的moduleInstance持久化保存成功后,会触发cond条件,这时才会去各agent去部署。同时,会在pg创建相应的数据表,供agent进行数据存储。

在api-server的部署中,使用名为api-server的sa,这个sa具备所有resource的权限。

Api-server同时监测原生kubernetes资源,目前有:

这些资源是通过informer监测的,api-server会将监测信息同步至pg。

Api-server会使用pod informer监测各节点的pod,然后将这些容器id发给agent进行processInfo获取,获取后,由api-server存储至pg。

责任编辑:姜华 来源: 今日头条 JavaScript开源

(责任编辑:知识)

    推荐文章
    热点阅读