厨师和 Docker

Chef and Docker

我有点困惑。作为课程的一部分,我们应该使用 Jenkins、Docker 和 Chef 设置 CI 和 CD 解决方案,但未指定流程将如何进行。

我们一直在设置 Jenkins,因此对于每个新的 git 提交,它都会创建一个 Jenkins 从站,启动测试所需的特定容器,然后拆除它们并报告结果。

所以,今天一直在四处寻找有关使用 Chef 和 Docker 连续 delivery/deployment 的信息。我看到的用例如下,在 Chef 中指定机器部署选项,每个服务器、数据库等有多少台机器。当 Jenkins slave 成功构建并测试应用程序时,就可以部署了。删除任何旧容器并构建新容器,在 Chef 中处理配置和其他必要的管理。

一直在寻找类似用例的信息,但似乎没有太多关于它的信息。一直在用 chef-provision-docker 修改 chef-provision 插件,但是关于使用 docker 插件的信息并不是非常直观。然后我偶然发现了这篇文章(https://coderanger.net/provisioning/),它基本上不建议新项目开始使用 chef-provision 插件。

有什么我想念的吗,这种用例是不是很流行,甚至是愚蠢的?是否还有其他我遗漏的插件或其他更合适的厨师设置?

提前干杯!

这种纯程序性的东西并不是 Chef 的真正用途。您可能希望使用直接与 Jenkins 集成的东西作为插件。或者,如果您谈论的是菜谱集成测试,则有 kitchen-docker 和 kitchen-dokken 驱动程序可以为您处理容器管理。

编辑:以上内容并不是真正的问题,新答案。

您正在寻找的工具通常称为资源调度器或集群协调器。 Chef 可以通过 chef-provisioning 或 docker cookbook 来做到这一点。在这两者之间,我会使用后者。但话虽如此,Chef 确实不是这项工作的最佳工具。有整整一代的专用调度器,包括 Mesos+Marathon、Kubernetes、Nomad 和 docker-compose+swarm。在所有这些中,Nomad 可能是最简单的,但 Kube 拥有庞大的社区追随者并且正在迅速发展。我最多考虑使用 Chef 作为中间步骤。

我建议使用 kubernetes、docker swarm 或 mesos 等容器编排平台。我个人建议使用 kubernetes,因为它是所列三个平台中的领先平台。

chef 是一个很好的配置管理工具,用它来供应容器也行,但它不是最好的解决方案。您会遇到诸如管理应在何处供应容器、监控容器状态以及如何处理它们的故障等问题。像 kubernetes 这样的平台会为你处理这个。

这将有助于获得一些见解: https://www.youtube.com/watch?v=24X18e4GVbk

更多阅读: http://www.devoperandi.com/how-we-do-builds-in-kubernetes/