基于 Kubernetes 的 Jenkins 服务也可以去 Docker 了
从原理上看,在 Kubernetes 集群中,Jenkins 都可以使用 Podman 进行镜像构建,本文主要以 Containerd 为例。
1. 去 Docker 给 CICD 带来新的挑战
在 CICD 场景下, 我们经常需要在流水线中构建和推送镜像。在之前的文档 《在 Kubernetes 上动态创建 Jenkins Slave》 中, 我描述了通过挂载/var/run/docker.sock
文件, 允许在 Docker 驱动的 Kubernetes 集群中构建和推送镜像。在文档 《如何在 Docker 中使用 Docker》中, 我又进行了更加详细地阐述, 其原理是共享主机 Docker Daemon。在 1.20 版本之后, Kubernetes 社区放弃了对 Docker 的支持, 而后又有其他社区接手, 隐约给 Docker 蒙上了一层阴影。在这样的背景下, 我们开始考虑非 Docker 环境下, 如何进行 CICD 实践。非 Docker 环境意味着之前挂载 /var/run/docker.sock
的方式失效了, 我们需要寻找新的解决方案。