2026/4/2 0:16:08
网站建设
项目流程
站酷设计网站官网入口文字设计,旅游网站作用,2008r2网站建设,惠州建设银行网站Containerd 与 Runc 的关系首先#xff0c;让我们简要了解一下 containerd 是如何与 runc 协作的。containerd 是一个常驻的守护进程#xff0c;主要负责以下任务#xff1a;镜像管理#xff1a;从镜像仓库拉取并存储镜像。容器管理#xff1a;管理容器生命周期#xff0…Containerd 与 Runc 的关系首先让我们简要了解一下 containerd 是如何与 runc 协作的。containerd 是一个常驻的守护进程主要负责以下任务镜像管理从镜像仓库拉取并存储镜像。容器管理管理容器生命周期创建、启动、停止、删除。快照管理通过 snapshotter 管理容器文件系统层。运行时管理将容器创建的任务委托给兼容 OCI 的运行时如 runc。当你在 Kubernetes 中创建 Pod 时kubelet 会通过 containerd 实现的 CRI 插件 向 containerd 发送请求要求创建 Pod sandboxRunPodSandbox并创建容器CreateContainer。containerd 随后会启动一个 shim 进程该进程在 containerd 与 OCI runtime如 runc之间充当中间层。shim 的存在有一个关键作用即便 containerd 守护进程崩溃或重启容器依然可以继续运行。在启动过程中shim 会生成 OCI runtime 所需的 bundle包括 config.json 和 rootfs 路径然后调用 runc 二进制文件。runc 读取 config.json配置容器的 namespace 和 cgroup最后启动容器进程。runc 是直接与 Linux 内核交互的组件——它负责配置 cgroup、namespace、seccomp、权限和挂载。当容器创建完成后runc 就会退出shim 则继续负责容器生命周期与 I/O 的管理。Sysbox Runtime 简介Sysbox 是由 Nestybox 创建的开源新一代容器运行时。与传统的 runc 不同Sysbox 专为运行 “系统容器system containers” 而设计。它利用 Linux 用户命名空间user namespaces 以及其他内核特性为容器提供更接近轻量虚拟机的行为。这意味着你可以在一个 Pod 中运行 Docker、Systemd、containerd甚至 K3s 本身——而无需使用特权模式privileged mode。简而言之Sysbox 填补了应用容器与虚拟机之间的空白。它的典型应用场景包括在 Kubernetes 中运行 KubernetesK8s-in-K8s。构建需要完整操作系统环境的 CI/CD 流水线。提供具备虚拟机隔离级别但速度接近容器的开发环境。目前Sysbox 官方仅支持 CRI-O。CRI-O 原生支持 Linux 用户命名空间这是 Sysbox 运行的基础。虽然 containerd 自 v2.0 起也加入了 user namespace 支持但此前 sysbox-runc 存在一个 bug导致与 containerd 不兼容。Sysbox-runc 与 Containerd 的集成经过排查这个问题之后我们发现问题的根源在于 containerd 无法执行 sysbox-runc 的一个子命令 features导致出现以下错误leveldebug msgfailed to introspect features of runtime \sysbox-runc\ errorfailed to unmarshal Features (*anypb.Any): type with url : not found由于无法正确检测到 Sysbox 的功能特性containerd 认为 sysbox-runc 不支持 user namespace进而导致容器创建失败。该问题现已在 sysbox-runc 仓库中修复使得 containerd 能够正确地与 sysbox-runc 协作运行。在 K3s 中运行 Sysbox-runc若要在 K3s 中使用 sysbox-runc你需要首先拥有一个已运行的 K3s 集群。然后安装最新版本的 Sysbox。但由于 containerd 支持修复尚未合并到 Sysbox 主仓库仅在 sysbox-runc 中因此需要从源码构建最新版。1. 安装 Docker在构建 Sysbox 之前请确保系统中已安装 Docker。2. 克隆仓库并准备代码git clone --recursive https://github.com/nestybox/sysbox.gitcd sysbox/sysbox-runcgit pull origin maincd ..make IMAGE_BASE_DISTROubuntu IMAGE_BASE_RELEASEjammy sysbox-static构建完成后你可以将生成的二进制文件复制到 /usr/bin或者直接在同一台运行 containerd 的机器上执行make install3. 启动 Sysboxsysbox4. 创建 Sysbox RuntimeClassapiVersion: node.k8s.io/v1kind: RuntimeClassmetadata:name: sysbox-runchandler: sysbox-runc5. 在 containerd 中添加 Sysbox 运行时配置创建文件 /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl[plugins.io.containerd.cri.v1.runtime.containerd.runtimes.sysbox-runc]runtime_type io.containerd.runc.v2[plugins.io.containerd.cri.v1.runtime.containerd.runtimes.sysbox-runc.options]SystemdCgroup falseBinaryName/usr/bin/sysbox-runc6. 使用 Sysbox 运行 PodapiVersion: v1kind: Podmetadata:name: ubuntuspec:runtimeClassName: sysbox-runchostUsers: falsecontainers:- name: ubuntu2204image: ubuntu:22.04command: [sleep, 40000000000]restartPolicy: Never总结Sysbox 为 Kubernetes 带来了新的能力它允许在容器中运行系统级工作负载具备强隔离性同时不依赖特权模式。结合 K3s 使用后它可以实现以下创新场景在 Kubernetes 中运行 Kubernetes如 K3k 虚拟集群。为开发者提供安全、轻量的类似于虚拟机的沙箱。在 Pod 中运行系统守护进程或嵌套的容器引擎。虽然目前 Sysbox 官方仅支持 CRI-O但随着 sysbox-runc 的修复它已经可以与 containerd 正常配合使用从而实现与 K3s 的集成。这也标志着容器生态的发展方向正在从传统的“应用容器”逐步迈向更加灵活、具备系统级能力的“系统容器”。如果你正在使用 K3s并希望在 Pod 中探索系统级工作负载Sysbox 无疑是一个值得尝试的方案它让你在保持原生 Kubernetes 工作流的同时获得接近虚拟机的隔离体验。