
一款开源的下一代“runc”,它让无根容器能够像虚拟机一样运行 Systemd、Docker、Kubernetes 等工作负载。
Sysbox 是一个开源免费的容器运行时(一种专门的 "runc"),最初由 Nestybox 开发(于 2022 年 5 月[被 Docker 收购][docker-acquisition]),它通过两种关键方式增强容器:
增强容器隔离性:
所有容器均启用 Linux 用户命名空间(即容器内的 root 用户在宿主机上没有任何权限)。
虚拟化容器内的部分 procfs 和 sysfs。
隐藏容器内的宿主机信息。
锁定容器的初始挂载等。
使容器能够运行与虚拟机相同的工作负载:
借助 Sysbox,容器可以无缝且安全地运行系统级软件,如 systemd、Docker、Kubernetes、K3s、buildx(包括多架构构建)、遗留应用、多架构应用等。
这些软件可以在 Sysbox 容器内无需修改即可运行,也无需使用特殊的软件版本(例如 rootless 变体)。
无需特权容器、无需复杂镜像、无需棘手的入口点、无需特殊的卷挂载等。
可以将其视为**“容器超级增压器”**:它使你现有的容器管理器/编排器(例如 Docker、Kubernetes 等)能够部署具有强化隔离性、几乎可以运行虚拟机中任何工作负载的容器。
Sysbox 通过高级操作系统虚拟化技术,尽可能让容器呈现类似虚拟机的环境来实现这一点。
与 Kata 和 KubeVirt 等替代运行时不同,它不使用虚拟机。这使得它更易于使用(尤其是在云环境中,避免了嵌套虚拟化),尽管它无法提供基于虚拟机的运行时那样的隔离级别。参见此处进行比较。
无需学习新工具或修改现有的容器镜像或工作流即可利用 Sysbox。只需安装它,并将容器管理器/编排器指向它即可部署增强型容器。
Sysbox 可以与同一宿主机上的其他容器运行时(例如默认的 OCI runc、Kata 等)共存。你可以根据需要轻松选择使用哪种运行时来运行哪些容器或 Pod。
Sysbox 是免费且开源的,采用 Apache License 2.0 许可。详情请参见 LICENSE 文件。
Sysbox 最初由 Nestybox 开发。由于 [Nestybox 现已并入 Docker][docker-acquisition],Docker 成为 Sysbox 项目的主要赞助商。
尽管如此,Sysbox 是一个社区开源项目,不受 Docker 官方支持(即 Docker 订阅不包含 Sysbox 支持)。支持通过此 GitHub 仓库或 [Sysbox Slack 工作区][slack]以尽力而为的方式提供。
我们鼓励社区参与,共同推动 Sysbox 的发展和改进,目标是增加它所支持的使用场景和带来的益处。欢迎外部维护者和贡献者。
Sysbox 解决以下问题:
增强容器化微服务的隔离性(容器内的 root 映射为宿主机上的非特权用户)。
在容器内启用功能强大的 root 用户,同时不影响宿主机安全。
通过支持 Docker-in-Docker (DinD) 或 Kubernetes-in-Docker (KinD) 来保障 CI/CD 流水线的安全,无需不安全的特权容器或挂载宿主机 Docker 套接字。
使容器能够作为“类虚拟机”环境用于开发、本地测试、学习等场景,具备强大的隔离性,并能在容器内运行 systemd、Docker、IDE 等。
在容器内运行遗留应用(而不是效率较低的虚拟机)。
用更简单、更快、更高效、更便携的基于容器的替代方案取代虚拟机,并且可以轻松部署到各种云环境。
将裸机主机划分为多个隔离的计算环境,密度是虚拟机的 2 倍(即在相同硬件上以相同性能部署两倍于虚拟机数量的类虚拟机容器)。
将云实例(例如 EC2、GCP 等)划分为多个隔离的计算环境,而无需采用昂贵的嵌套虚拟化方案。
Sysbox 可以轻松安装到 Linux 主机(裸机、虚拟机、本地、云等)上。它适用于所有主流的基于云的 IaaS 和 Kubernetes 服务(例如 EC2、GCP、GKE、EKS、AKS、Rancher 等)。
安装后,Sysbox 在底层工作:你可以使用 Docker、Kubernetes 等通过它来部署容器。
例如,这个简单的 Docker 命令即可使用 Sysbox 创建一个容器:
$ docker run --runtime=sysbox-runc -it any_image
你将获得一个隔离良好的容器,它既能无缝运行微服务,也能运行通常运行在虚拟机上的系统级软件(例如 systemd、Docker、Kubernetes 等)。
有关如何使用 Sysbox 的更多信息,请参见此处。
如图所示,Sysbox 使非特权容器能够无缝运行 systemd、Docker、Kubernetes 等系统级工作负载,同时在容器隔离性、性能、效率和便携性之间为你提供平衡的方案。
而且它只需对你现有的基础设施进行最少的配置更改即可实现:只需安装 Sysbox,并将容器管理器/编排器配置为使用它来启动容器,使用你选择的镜像即可。
请注意,虽然 Sysbox 强化了标准容器的隔离性,并在许多场景下消除了对不安全特权容器的需求,但它(尚)无法提供与基于虚拟机的替代方案或像 gVisor 这样的用户空间操作系统相同的隔离级别。因此,对于需要最高隔离级别的场景,KubeVirt 等替代方案可能更可取(代价是性能和效率较低,复杂性和成本较高)。
更多信息请参见这篇博客文章。
Sysbox 项目面向任何希望使用系统容器进行实验、创新、学习和构建系统的人。它是一项前沿的操作系统虚拟化技术,欢迎贡献。
在 2022 年 5 月[被 Docker 收购][docker-acquisition]之前,Nestybox 提供 [Sysbox Enterprise][sysbox-ee-repo] 作为 Sysbox 的增强版本(例如更强的安全性、更多的工作负载和官方支持)。
然而,收购之后,Sysbox Enterprise 不再作为独立产品提供,而是已并入 Docker Desktop(参见 Docker Hardened Desktop)。
注意: 由于 Sysbox Enterprise 不再作为独立产品提供,Docker 计划将 Sysbox Enterprise 的某些功能引入 Sysbox 社区版。具体功能尚未确定(TBD),欢迎你的反馈。
下表总结了 Sysbox 容器运行时的关键特性。
它还提供了 Sysbox 社区版(即本仓库)与之前可用的 Sysbox 企业版(现已弃用)之间的比较。
有关 Sysbox 特性的更多信息,请参见此处。
如有疑问,可以通过此处联系我们。
我们将 Sysbox 部署的容器称为系统容器,以强调它们不仅可以运行微服务(如常规容器那样),还可以运行 Docker、Kubernetes、Systemd、内嵌容器等系统软件。
有关系统容器的更多信息,请参见此处。
Sysbox 主机必须满足以下要求:
必须运行受支持的 Linux 发行版之一,并且是具有受支持架构的机器(例如 amd64、arm64)。
我们建议至少配备 4 个 CPU(例如 2 核带 2 个超线程)和 4GB 内存。虽然这不是硬性要求,但较小的配置可能会降低 Sysbox 的运行速度。
安装方法取决于将要安装 Sysbox 的环境:
要在 Kubernetes 集群上安装 Sysbox,请使用 sysbox-deploy-k8s daemonset。
否则,请使用适用于你发行版的 Sysbox 软件包。
另外,如果你的发行版尚无可用的软件包,或者你想获取上游的最新更改,可以从源代码构建并安装 Sysbox。
安装 Sysbox 后,你可以使用容器管理器或编排器(例如 Docker 或 Kubernetes)以及你选择的镜像来创建容器。
Docker 命令示例:
$ docker run --runtime=sysbox-runc --rm -it --hostname my_cont registry.nestybox.com/nestybox/ubuntu-bionic-systemd-docker
root@my_cont:/#
Kubernetes Pod 规范示例:
apiVersion: v1
kind: Pod
metadata:
name: ubu-bio-systemd-docker
annotations:
io.kubernetes.cri-o.userns-mode: "auto:size=65536"
spec:
runtimeClassName: sysbox-runc
containers:
- name: ubu-bio-systemd-docker
image: registry.nestybox.com/nestybox/ubuntu-bionic-systemd-docker
command: ["/sbin/init"]
restartPolicy: Never
你可以选择任何你想要的容器镜像,Sysbox 对镜像没有任何要求。
Nestybox 在其 Dockerhub 和 GitHub Container Registry 仓库中提供了多个参考镜像。这些镜像通常在容器内包含 systemd、Docker、Kubernetes 等。Dockerfile 位于此处。欢迎根据你的需要自由使用和修改。
我们努力提供良好的文档;它是 Sysbox 项目的关键组成部分。
我们有多份文档可以帮助你快速上手并充分发挥 Sysbox 的作用。