是否可以在 GKE 上安装 Sysbox 容器运行时?

Is it possible to install the Sysbox container runtime on GKE?

我想在 GKE 上安装一个 CI 工具,这样我就可以 运行 docker-in-docker 通过 Sysbox。

为此,我需要安装 Sysbox 容器 运行time。

是否可以在 GKE 中执行此操作?

GKE 是一个提供商管理的 Kubernetes 解决方案,其中某些方面由您的云提供商处理。诸如节点配置、自动更新、安全补丁、开箱即用的某些存储解决方案等。

特别关注 Nodes。 Kubernetes 依赖于 Container Runtime 到 运行 它的容器。 GKE 具有特定 Container Runtimes 的预定义图像。您可以在下面看到 table:

OS Node images
Container-Optimized OS Container-Optimized OS with Containerd (cos_containerd), Container-Optimized OS with Docker (cos)
Ubuntu Ubuntu with Containerd (ubuntu_containerd), Ubuntu with Docker (ubuntu)
Windows Server Windows Server LTSC (windows_ltsc), Windows Server SAC (windows_sac)

-- Cloud.google.com: Kubernetes Engine: Docs: Concepts: Node images

如您所见,Container Runtimes 已经预先确定。在 GKE 生态系统中准备 运行 的 OS 之间存在差异。例如,COS 没有固有的包管理器(为此你应该使用 CoreOS Toolbox)。

除此之外:

Node VM modifications

Modifications on the boot disk of a node VM do not persist across node re-creations. Nodes are re-created during manual upgrade, auto-upgrade, auto-repair, and auto-scaling. In addition, nodes are re-created when you enable a feature that requires node re-creation, such as GKE sandbox, intranode visibility, and shielded nodes.

To preserve modifications across node re-creation, use a DaemonSet.

It's not recommended to manage critical software provided by a node image, such as the kernel or container runtime (whether containerd or docker). Node images are tested extensively, and modifying critical software provided in the node image puts the node into an unknown and untestable state.

-- Cloud.google.com: Kubernetes Engine: Docs: Concepts: Node images: Modifications


其他资源:

Sysbox runtime 尚不支持与 K8s 集成(我们正在努力)。

限制是由于 Sysbox 总是使用 Linux 用户命名空间部署容器(为了改进隔离),所以它需要 K8s pods 来使用 Linux 用户-命名空间也是。 CRI-O 运行时已经对此提供了初步支持,因此我们希望很快就能实现。有关详细信息,请参阅此 sysbox issue。 containerd 很可能很快也会添加这个。

为了在 GKE 节点上配置 Sysbox,我们正在研究一种 K8s 本机方法,例如 daemonSet,用户可以轻松地将运行时导入节点并配置 K8s 并选择使用它。供应后,用户将通过 K8s RuntimeClass select 您的 Pod 的运行时。

现在有 Sysbox 的预览版,可与 Kubernetes 一起使用。

这使 Kubernetes 能够部署无根 pods,其行为类似于“轻量级虚拟机”,并且可以 运行 systemd、Docker,甚至内部的 Kubernetes(无需实际使用虚拟机) .

您可以在这里找到它:https://github.com/nestybox/sysbox-pods-preview

现在正式支持使用 Sysbox 部署 pods,并且可以在 GKE 上运行。

Sysbox(Nestybox,我是创始人之一)的制造商创建了一个 Kubernetes 守护程序集,使安装变得简单且跨节点重新创建持久。 daemonset 在您希望的任何 Kubernetes 节点上安装 Sysbox。 Sysbox 与默认运行时(通常是 OCI runc)一起安装,您可以 select 哪个 pods 使用 Sysbox 部署,哪个使用默认运行时。

使用 Sysbox 部署 pods 的优势在于它们通过 Linux 用户命名空间(即无根)高度隔离,并且能够 运行 不仅仅是微服务,但系统软件如 systemd,Docker 本身,甚至 Kubernetes。这在将容器用于 CI/CD、开发环境、学习环境、运行 遗留应用等时非常有用。