我们的系统使用ansible执行部署过程,然而部署的目标操作系统和CPU架构环境多种多样,存在大量适配工作。之前调研过是否有Golang开发的ansible替代物,但没有找到合适的方案。这种到处运行的场景很适合使用容器,但如果使用docker, 在不同操作系统上也需要准备不同的docker安装包,依然需要适配,因而也不是很满足。今天想到runc本身就是Golang开发的纯静态二进制,非常适合到处分发,因而尝试调研直接使用runc来做为运行时运行ansible容器。
在容器领域,OCI:Open Container Initiative制定了两个规范,镜像规范: image-spec和运行时规范:runtime-spec。镜像规范规定了镜像文件的格式,而运行时规范规定了如何根据配置运行容器。它们之间通过filesystem bundle联系在一起,镜像可以通过工具转换成filesystem bundle, 运行时根据filesystem bundle运行容器进程。