eBPF(扩展伯克利数据包过滤器)是 Linux 内核的一项技术,它允许在内核空间运行一些预定义的、有限的程序,不需要修改内核代码或加载任何内核模块。由于其高效和灵活的特性,eBPF 被广泛应用于网络流量过滤、性能监控、安全和其他领域。然而,目前社区中的 eBPF 程序分发不够统一和规范,不同的组件和工具集都有自己的管理和打包方式,例如 cilium、bcc 和 openEuler 内核的 eBPF 插件。eBPF 程序也可能使用多种用户态语言开发(如 Go,Rust,C/C++,Python 脚本等),具有各种不同的接口,甚至并没有预先编译好的二进制程序,用户必须自行配置环境和编译才能使用。
这种分散和缺乏标准化的情况带来了一些问题:首先,eBPF 程序的升级和功能添加通常依赖于整体软件的发布,这可能导致升级周期过长,单个 eBPF 组件的发布需要等待整体软件的发布周期;其次,开发 eBPF 程序需要对内核 eBPF 程序框架有深入的理解,这增加了开发难度。因此,这个项目的目标是希望能借鉴 docker hub 的管理模式,提供一种统一的 eBPF 程序管理方式、openEuler 内核 eBPF 开发模板,以及一个编译和分发工具,以解决上述问题。
综上,整个 eBPF 生态缺少对新手友好的开发方案,和一个类似于 Github 或 Docker hub 的通用分发和托管平台。
项目产出要求主要分为两个部分:
打包发布格式与存储格式是项目的关键部分,因为它们决定了如何将 eBPF 程序打包、分发和存储。
OCI(Open Container Initiative)是一个开放的行业标准,旨在定义容器格式和运行时的规范,以确保所有容器运行时(如 Docker、containerd、CRI-O 等)之间的互操作性。OCI 规范主要包括两部分:
OCI registry 则是用于存储和分发 OCI 镜像的服务。Docker Hub 和 Google Container Registry 都是 OCI registry 的例子。它们提供了一个公开的平台,用户可以在上面上传、存储和分发他们的容器镜像。
OCI 镜像格式主要由两部分组成:manifest 和 layers。Manifest 是一个 JSON 文件,描述了镜像的元数据,包括镜像的配置以及构成镜像的各个层。Layers 则是镜像的实际内容,每一层都是一个文件系统的增量变化。当运行一个 OCI 镜像时,这些层会被叠加在一起,形成一个统一的文件系统。
首先,我们来看一下 OCI 镜像的 manifest。Manifest 是一个 JSON 文件,它包含了镜像的元数据,例如镜像的配置和构成镜像的各个层。一个典型的 manifest 文件可能看起来像这样:
{
"schemaVersion": 2,
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"config": {
"mediaType": "application/vnd.oci.image.config.v1+json",
"size": 7023,
"digest": "sha256:b5b2b2c507a0944348e0303114d8d93aaaa081732b86451d9bce1f432a537bc7"
},
"layers": [
{
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
"size": 32654,
"digest": "sha256:9834876dcfb05cb167a5c24953eba58c4ac89b1adf57f28f2f9d09af107ee8f0"
},
...
]
}
在这个例子中,config
字段指向了一个包含镜像配置的 JSON 文件的摘要(digest),而 layers
字段则是一个数组,包含了构成镜像的各个层的信息。每一层都有一个媒体类型(mediaType)、大小(size)和摘要(digest)。
然后,我们来看一下 OCI 镜像的 layers。每一层都是一个文件系统的增量变化,它包含了从上一层到当前层的所有文件和目录的添加、修改和删除。当运行一个 OCI 镜像时,这些层会被叠加在一起,形成一个统一的文件系统。
例如,假设我们有一个 OCI 镜像,它有两层。第一层添加了一个文件 /etc/passwd
,第二层修改了这个文件。当我们运行这个镜像时,我们会看到第二层的修改,因为它覆盖了第一层的文件。
这就是 OCI 镜像格式的基本概念。通过使用 manifest 和 layers,我们可以创建非常复杂和灵活的镜像,满足各种不同的需求。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。