
操作系统云原生容器运行时【免费下载链接】linuxkitA toolkit for building secure, portable and lean operating systems for containers项目地址https://gitcode.com/gh_mirrors/li/linuxkit点击查看免费下载bccBPF Compiler Collection是 Linux 内核性能分析的标准工具集可用于访问性能计数器、跟踪事件以及探测各类内核内部数据结构。本指南围绕 LinuxKit 项目中的 kernel-bcc 文档完整讲解linuxkit/kernel-bcc包的版本匹配机制、在init阶段的挂载方式、三种容器内访问路径、kptr_restrict的解除方法并结合仓库中的 Dockerfile 与测试用例说明该包从构建到验证的全链路细节。bcc 工具与内核版本匹配原理bcc 依赖内核的 eBPF 特性其运行效果与具体内核版本、头文件、模块符号高度耦合。因此bcc 工具必须与目标内核严格配对。LinuxKit 对此的解决方案是为每一个内核构建发布一个带相同 tag 的配套linuxkit/kernel-bcc包。在 kernel/Makefile 中可以看到TOOLSbcc perf定义了两类随内核发布的工具而buildtools-%/buildtool-%目标会调用linuxkit pkg build以./$(COMMON_DIR)/build-bcc.yml为构建清单生成形如linuxkit/kernel-bcc:KERNEL_VERSION-SERIES_HASH的镜像 tag。内核包 tag 与 bcc 包 tag 使用同一套哈希体系SERIES_HASH从而保证同一版本的内核对应同一版本的 bcc这一配对关系。实际的构建流程定义在 kernel/common/build-bcc.ymlimage: kernel-bcc network: true dockerfile: common/Dockerfile.bcc该 yml 声明构建产物名为kernel-bcc使用 kernel/common/Dockerfile.bcc 作为构建镜像。bcc 包的构建内容与产物结构kernel/common/Dockerfile.bcc 完整揭示了 bcc 包的组成提取内核头文件与源码通过COPY --fromksrc /kernel-headers.tar /kernel-dev.tar /kernel.tar从对应 tag 的linuxkit/kernel镜像中取回三个 tar 包并解压随后将usr/src与usr/include复制到输出目录这部分为 bcc 提供与当前内核匹配的编译/运行期头文件。安装 bcc 本体与工具脚本以bcc、bcc-dev、bcc-tools三个 Alpine 包为主辅以python3、zlib、busybox等运行时依赖同时尝试安装luajit与bcc-lua注释明确说明这两者并非所有平台都可用缺失不阻塞构建。补齐动态库将libelf、libstdc、libintl以及 Pythonsite-packages拷贝进产物目录确保 bcc 的 Python 前端与 C 库在最小化的 LinuxKit 根文件系统中可直接运行。以scratch收尾最终镜像基于FROM scratch通过COPY --frommirror /out /与COPY --frombuild /out /将上述内容打包。因此LinuxKit 的 bcc 包内包含bcc可执行程序、示例与工具脚本位于/usr/share/bcc下以及与该内核构建配套的内核头文件。在 LinuxKit 中启用 bccinit 阶段挂载LinuxKit 中 bcc 的推荐用法是将linuxkit/kernel-bcc包添加到 yml 配置的init段。以仓库测试用例 test/cases/040_packages/002_bcc/test.yml 为参照kernel: image: linuxkit/kernel:6.12.59 cmdline: consolettyS0 consolettyAMA0 init: - linuxkit/init:1c3e4933ceabd7418b961d66d5d884bf0044ac64 - linuxkit/runc:9442aa234715e751a16144f1d4ae3fd1a00fd492 - linuxkit/kernel-bcc:5.4.113 onboot: - name: check-bcc image: alpine:3.13 ...将linuxkit/kernel-bcc放在init段后其内容会被合并进系统的根文件系统在运行时表现为向根文件系统新增了/usr/share/bcc目录包含tools、examples等子目录。版本配对提示示例中的 test.yml 在 6.12.59 内核上搭配linuxkit/kernel-bcc:5.4.113仅为该测试用例的既定配置实际生产使用时应遵循每个内核 tag 对应一个同 tag 的 kernel-bcc 包的匹配规则选取与目标内核版本一致的 bcc 包避免头文件与内核符号不匹配导致的加载失败。容器内访问 bcc 的三种方式将 bcc 并入根文件系统后可从以下三个入口使用它1. bind mount 挂载进业务容器在任意容器的配置中把宿主根文件系统内的/usr/share/bcc以 bind mount 方式挂载进容器容器即可直接调用其中的tools脚本。例如在 onboot 或 services 段中为容器追加 bindsservices: - name: my-app image: alpine:3.13 binds: - /usr/share/bcc:/usr/share/bcc command: [/usr/share/bcc/tools/runqlat]2. 在 getty / ssh 容器内访问LinuxKit 默认提供 getty控制台与 sshd 容器两者共享宿主 PID 1 的根文件系统视图。可以直接访问/proc/1/root/usr/share/bcc/tools# 在 getty 或 ssh 会话中直接运行 bcc 工具 /proc/1/root/usr/share/bcc/tools/softirqs 1 1/proc/1/root是 PID 1 进程的根目录符号链接等价于整个宿主根文件系统因此可以透明访问/usr/share/bcc下所有工具。3. 通过 nsenter 进入 PID 1 的命名空间若需要完整的宿主环境视图可用nsenter进入 PID 1 的 mount 命名空间并执行 ashnsenter -t 1 -m -- /bin/ash -c /usr/share/bcc/tools/softirqs 1 1这种方式与仓库测试用例 test/cases/040_packages/002_bcc/check.sh 的验证逻辑完全一致——该脚本正是通过nsenter -t 1 -m -- /bin/ash -c /usr/share/bcc/tools/softirqs 1 1来确认 bcc 工具能否在系统内正常执行nsenter -t 1 -m -- /bin/ash -c /usr/share/bcc/tools/softirqs 1 1 if [ $? -ne 0 ]; then printf bcc test suite FAILED\n 1 exit 1 fi printf bcc test suite PASSED\n 1解除内核指针限制kptr_restrictbcc 的部分探针尤其是依赖内核符号地址的跟踪点会受到kptr_restrict的限制。LinuxKit 的默认镜像中sysctl容器会启用内核指针限制这会阻止普通用户查看内核指针值进而影响 bcc 的输出可读性。文档给出的处理方式有两种方案一移除 sysctl 容器。在 LinuxKit yml 的onboot段中删除linuxkit/sysctl一项即不加载其默认 sysctl 配置。方案二运行时手动解除限制echo 0 /proc/sys/kernel/kptr_restrict将kptr_restrict置 0 后内核指针对非特权用户可见bcc 即可正常解析符号与地址。该操作需要 root 权限在 getty/ssh 会话中执行即可。解除限制后bcc 即可投入使用。完整可运行的 LinuxKit bcc 配置示例综合上述要素一个可直接参考的完整 yml 示例如下内核版本请按实际环境替换为匹配的 kernel 与 kernel-bcc 组合kernel: image: linuxkit/kernel:6.12.59 cmdline: consolettyS0 consolettyAMA0 init: - linuxkit/init:1c3e4933ceabd7418b961d66d5d884bf0044ac64 - linuxkit/runc:9442aa234715e751a16144f1d4ae3fd1a00fd492 - linuxkit/kernel-bcc:5.4.113 onboot: - name: sysctl image: linuxkit/sysctl:latest # 若 bcc 受限可移除本项或改用方案二 # command: [sh, -c, echo 0 /proc/sys/kernel/kptr_restrict] - name: poweroff image: linuxkit/poweroff:4059858a555bed90c2280fa9b060b7a8f8de6d45 command: [/bin/sh, /poweroff.sh, 10]构建并启动后在 getty 控制台执行echo 0 /proc/sys/kernel/kptr_restrict /proc/1/root/usr/share/bcc/tools/softirqs 1 1即可看到 bcc 输出的软中断统计。小结LinuxKit 通过为每个内核构建同 tag 的linuxkit/kernel-bcc包从工具链层面解决了 bcc 与内核版本匹配的问题通过init段挂载将/usr/share/bcc含工具脚本与配套内核头文件并入根文件系统并提供 bind mount、/proc/1/root、nsenter三种访问途径同时配合kptr_restrict的解除操作让 bcc 在最小化的 LinuxKit 系统中开箱即用。仓库中的 kernel/common/Dockerfile.bcc、kernel/common/build-bcc.yml 与 test/cases/040_packages/002_bcc/ 测试用例是深入理解该包构建与验证流程的最佳参考资料。赞分享操作系统云原生容器运行时【免费下载链接】linuxkitA toolkit for building secure, portable and lean operating systems for containers项目地址https://gitcode.com/gh_mirrors/li/linuxkit点击查看免费下载相关推荐LinuxKit 内核性能分析指南使用 perf 工具进行容器系统性能剖析LinuxKit 内核性能分析指南使用 perf 工具进行容器系统性能剖析 导读 本文介绍如何在 LinuxKit 构建的最小化容器操作系统中使用 Linux操作系统云原生容器运行时在 minikube 中运行 eBPF 工具用 BCC 观测本地 Kubernetes 集群内核行为在 minikube 中运行 eBPF 工具用 BCC 观测本地 Kubernetes 集群内核行为 eBPF 工具是用于观测 Linux 内核行为的高性能性云原生容器编排CLI开发工具BCCBPF Compiler Collection实战指南基于 eBPF 的内核追踪与性能分析工具箱BCCBPF Compiler Collection实战指南基于 eBPF 的内核追踪与性能分析工具箱 BCCBPF Compiler CollectieBPF可观测性性能剖析网络上一篇Windows平台Clang-tutorial构建指南修改SharedBuild.targets解决路径问题下一篇Godot 场景脚本拆分实操480 行 Enemy.gd 拆成 3 个文件后我改判定只动了 1 处创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考