【发布时间】:2021-05-02 01:07:24
【问题描述】:
我想在 GKE 上安装一个 CI 工具,以便我可以通过 Sysbox 运行 docker-in-docker。
为此,我需要安装 Sysbox 容器运行时。
在 GKE 中可以做到吗?
【问题讨论】:
标签: google-kubernetes-engine docker-in-docker
我想在 GKE 上安装一个 CI 工具,以便我可以通过 Sysbox 运行 docker-in-docker。
为此,我需要安装 Sysbox 容器运行时。
在 GKE 中可以做到吗?
【问题讨论】:
标签: google-kubernetes-engine docker-in-docker
现在正式支持使用 Sysbox 部署 pod,并且可以在 GKE 上运行。
Sysbox(Nestybox,我是其中的创始人之一)的制造商创建了一个 Kubernetes 守护程序集,以使安装变得容易且跨节点娱乐持久。守护进程会在您希望的任何 Kubernetes 节点上安装 Sysbox。 Sysbox 与默认运行时(通常是 OCI runc)一起安装,您可以选择哪些 pod 使用 Sysbox 部署,哪些使用默认运行时。
使用 Sysbox 部署 pod 的优势在于,它们通过 Linux 用户命名空间(即无根用户)进行了高度隔离,并且不仅能够运行微服务,还能够运行 systemd、Docker 本身甚至 Kubernetes 等系统软件。这在将容器用于 CI/CD、开发环境、学习环境、运行旧版应用等时非常有用。
【讨论】:
Sysbox runtime 尚不支持与 K8s 的集成(我们正在努力)。
限制源于 Sysbox 始终使用 Linux 用户命名空间部署容器(以提高隔离性),因此它要求 K8s pod 也使用 Linux 用户命名空间。 CRI-O 运行时已经对此提供了初步支持,因此我们希望它很快就会工作。有关详细信息,请参阅此sysbox issue。很可能 containerd 也会很快添加这个。
为了在 GKE 节点上配置 Sysbox,我们正在研究一种 K8s 原生方法,例如 daemonSet,它可以让用户轻松地将运行时放入节点并配置 K8s 并选择使用它。配置完成后,用户将通过 K8s RuntimeClass 为您的 pod 选择运行时。
【讨论】:
现在有一个可与 Kubernetes 配合使用的 Sysbox 预览版。
这使 Kubernetes 能够部署类似于“轻量级虚拟机”的无根 pod,并且可以在内部运行 systemd、Docker 甚至 Kubernetes(无需实际使用虚拟机)。
【讨论】:
GKE 是由提供商管理的 Kubernetes 解决方案,其中某些方面由您的云提供商处理。诸如节点配置、自动更新、安全补丁、开箱即用的某些存储解决方案的访问等。
特别关注Nodes。 Kubernetes 依靠 Container Runtime 来运行它的容器。 GKE 具有带有特定 Container Runtimes 的预定义图像。您可以通过下表看到:
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)。
补充:
节点虚拟机修改
节点虚拟机启动磁盘上的修改不会在节点重新创建过程中持续存在。在manual upgrade、auto-upgrade、auto-repair 和auto-scaling 期间重新创建节点。此外,当您启用需要重新创建节点的功能时,会重新创建节点,例如GKE sandbox、intranode visibility 和shielded nodes。
要在重新创建节点时保留修改,请使用DaemonSet。
不建议管理节点镜像提供的关键软件,例如内核或容器运行时(
containerd或docker)。节点映像经过广泛测试,修改节点映像中提供的关键软件会使节点处于未知且不可测试的状态。-- Cloud.google.com: Kubernetes Engine: Docs: Concepts: Node images: Modifications
其他资源:
【讨论】:
--privileged 然后使用dind