有什么理由将Puppet与Docker一起使用吗?


16

一段时间之前,我已经尝试过DevOps的Ops部分,这很有趣,但是我没有时间和理由在任何项目中尝试它。但是上周我开始了新工作,老板问我是否可以配置服务器以为公司项目创建临时环境。除此之外,我开始考虑将项目迁移为更多的DevOps而不是仅开发人员。

我已经推出了Docker,它对我来说很棒而且超级容易。但是前段时间我正在尝试Puppet,所以我想到一个问题:“有什么理由在Docker中使用Puppet吗?”。Docker似乎在做Puppet会做的所有事情,但是方式更简单。

PS 不久前,在Hacker News上有Consul,它是不错的配置和服务发现,因此即使配置也可以解决(我也在考虑实现这一点)。

Answers:


18

木偶和泊坞窗可以做很多相同的事情,但是他们以不同的方式对待它们。

木偶管理文件+软件包+服务。(称为三连胜)。Docker将二进制文件和配置文件封装在容器内。

在撰写本文时,docker仍然不稳定,不应在生产中使用。在1.0版发布之前,许多API可能都会更改。

即使docker确实变得稳定,将每个进程和配置文件转换为docker容器也是一项艰巨的任务。

另一方面,木偶是稳定的产品,带有完整的工具生态系统(heira,mcollective,facter,razor)。这些工具可以快速实施,而不必担心事情会破裂。

我强烈建议以下资源。

有关如何使用人偶管理应用程序堆栈的视频
https://www.youtube.com/watch?v=KSo_mcJxFIA

关于docker和puppet如何一起工作的播客
http://devopscafe.org/show/2014/1/23/devops-cafe-episode-46.html

有关如何与Docker集成的人偶博客文章
http://puppetlabs.com/blog/building-puppet-based-applications-inside-docker

关于puppet和docker共存的另一篇博客文章
http://puppetlabs.com/blog/can-containers-and-configuration-management-co-exist

用于与docker http://docs.docker.io/use/puppet/进行交互的人偶模块

对devops术语的较小修正。与任何特定工具相比,Devops更像是一种软件开发方法,开发人员和操作人员可以合作。

更新资料

目前,我公司同时使用人偶和docker。这是在puppet conf 2014上的精彩演讲,介绍了为什么要使用puppet vs docker。由puppetlabs的前雇主和docker书的作者James Turnbull提供。

https://puppetlabs.com/presentations/using-docker-puppet-james-turnbull-kickstarter

也是sysadmincasts.com提供的有关docker的优秀短视频教程

https://sysadmincasts.com/episodes/31-introduction-to-docker

Docker专业人士:

  • 可以快速启动实例
  • 比木偶更容易学习
  • 轻松做到零宕机

Docker缺点:

  • 使用devicemapper后端时,容器限制为10GB
  • 小型配置更改需要很长时间才能重建容器
  • 使用诸如hub.docker.com,quay.io之类的Docker注册表需要花费金钱(自托管的Docker注册表极其错误,并且没有gui)
  • 没有适当的初始化系统。某些应用程序不能很好地运行。
  • 没有对网络的细粒度控制
  • 需要子外壳的应用程序(看着您的RVM +红宝石)很难正常工作
  • 无法管理Windows主机,没有SLES或其他不受欢迎的操作系统
  • 目前,docker业务流程还很年轻。
  • 当前无法在构建时设置/etc/resolv.conf
  • 我们必须挂载/ etc / localtime和/ dev / urandom来映射到主机localtime和urandom目录的各种错误。
  • 性能并没有那么快(尽管所有主张docker应该是裸机速度的99%,但有时比其他计算机慢30%)。
  • 小型容器仍然有数百兆的开销。我们的容器都是数GB。

木偶优点:

  • 易于扩展
  • 适用于现有服务器(Windows,Linux,SLES)
  • 快速进行小改变
  • 其他人偶用户和模块的强大社区
  • 用于在所有平台上安装软件包的标准化API

木偶缺点:

  • 大型基础设施变得非常复杂
  • 条件模块依赖性创建spagetti代码
  • 较重

当前,我们使用puppet来配置我们的docker容器。docker容器用于jenkins构建,并在每次构建后销毁。它运作良好,并为我们提供了一致的环境。这意味着我们只需要编写一次代码,然后重新构建ubuntu,sles和centos机器。重建容器大约需要15到30分钟,仍然是手动过程。Docker非常适合用于快速测试虚拟机,

简而言之,puppet非常适合管理您现有的基础架构。如果您有一个100%linux的未开发环境,并且具有可以封装在小型临时实例中的技术堆栈,那么Doc​​ker是很好的选择。尽管某些功能重叠,但它们并不互斥。


5
我发现这个答案是主观的和推测性的。我不认为这真的能回答为什么当Docker出现在更高级别的情况下,成为同一目的的一种更简单的工具时,为什么人们会继续与Docker一起使用Puppet的问题。
8bitjunkie 2015年

1
@ 7SpecialGems更新了更多事实。
spuder

1
非常高兴看到2015年世界上这个答案的回顾以及情况如何变化
Oliver Bayes-Shelton

问题/答案在2019年仍然相对吗?有什么可以改变的?
阿布·塔赫女士(Md。Abu Taher)

2

Docker帮助您预配和初始配置容器,但是在容器初始化时运行一次命令。

当您将Puppet作为守护程序运行时,它是最强大的,它可以确保您的配置保持指定的状态,例如,如果服务停止运行,它将再次启动它。

关于(正确设计的)木偶配置清单的最好的事情之一是它们是幂等的。它应该描述您想要达到的状态,而不一定要描述达到目标的步骤。

它还允许您抽象化和参数化配置,并且可以导出在一个服务器或容器上创建的参数,并在另一个服务器或容器中使用它们(例如,为监视应用程序收集节点主机名列表)。

我要说的是,它们肯定有不同但相关的目的。我目前正在研究使用现有的人偶清单来开始配置容器,以便开发环境更像生产环境。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.