18

我想问一下你什么时候在什么情况下使用puppet,什么时候使用chef。我还发现rump是一种 puppet-solo 类型的东西,您可以将单个服务器迭代到其配置,然后将其推送到一系列服务器,从而使您可以直接查看更改。

我的问题:我应该使用以上哪些以及以什么方式?有人可以帮助我吗?

我的目标是在持续集成的背景下,使用 rake 和 git 在 mono/.Net 环境中持续部署。我想轻松打包、版本化和部署 Web 应用程序,并想使用接收器作为多个 Web 服务器的负载平衡器。能够快速删除这些,并且在升级之间没有任何停机时间。

4

5 回答 5

27

两者都使用过,我会说这取决于你在寻找什么。在我看来:

  • Chef更面向开发人员。如果你是 Ruby 大师,你会喜欢上它的。

  • Puppet更加面向系统管理员。它具有非 ruby​​ DSL,因此更难以将错误传播到您的机器(恕我直言)。

Puppet创建了更具可读性和稳定性的代码,但部署新功能也很慢。这可能是您在一个坚信您的 DevOps 工作的大型企业结构中所需要的。

使用Chef,您可以用更少的代码和时间完成复杂的任务。您可以使用所有红宝石魔法,而无需创建 Puppet 构造。这很好,例如,当您的公司并不真正相信 DevOps 价值并且您一直在与时间作斗争以证明您的经理是错误的 :-) 我个人发现 Puppet 在您开发新功能时执行起来有点慢,这可能有点痛苦。

我的建议是:如果您是具有一些开发技能的系统管理员,请选择 Puppet。如果您擅长 Ruby(或 Python),请选择 Chef。

我也试过臀部,我正在玩它。它有帮助,很酷,但是除了懒惰输入rump go而不是puppet apply -vd --modulepath=之外,我仍然没有看到巨大的价值。模块/清单/init.pp。:)

于 2012-03-21T14:28:32.130 回答
15

我会使用 Puppet,但我有点偏见,因为我写了一本关于它的书并在那里工作。:) 除了 Rump,您还可以在其应用模式下使用 Puppet - 这与 chef-solo 相同。尽管 Rump 在这个过程中包含了一些值得尝试的优点。

我会在这里使用 Rump 作为环绕来给 Puppet 一个镜头——你可以同时使用 Puppet DSL 或 Ruby DSL(Chef 只​​有一个 Ruby DSL)。使用 Puppet 创建“环境”并将 git/CI 工作流与您的部署集成非常容易。它也很容易与 Rake 任务等集成。

于 2011-06-20T20:57:20.653 回答
10

最后,我得到了 puppet + vagrant,它允许我运行/重新运行/测试 puppet 清单:

首先安装VirtualBox,然后:

gem install puppet
gem install vagrant

然后:

vagrant box add base http://files.vagrantup.com/lucid32.box
vagrant init

然后编辑 ./Vagrantfile 说:

Vagrant::Config.run do |config|

  config.vm.box = "base"
  config.vm.provision :puppet do |puppet|
    puppet.manifests_path = "manifests"
    puppet.module_path = "modules"
  end

  # rest here
end

然后向 中添加节点定义manifests/default.pp,例如:

group { "puppet":
  ensure => "present",
}
file { '/etc/motd':
    content => "Welcome to your Vagrant-built virtual machine!\n"
}

然后运行:

vagrant up

现在您已经拥有了一个可以玩的 puppet 管理的虚拟机,并且您更改的任何清单都会进入源代码控制。而且您可以快速迭代而无需求助于臀部。

于 2012-06-11T17:34:01.163 回答
5

如果你熟悉 Ruby,我建议你尝试 Chef 而不是 Puppet。使用 chef&ruby,您可以运行非常复杂的任务。但是 puppet 比厨师定义的域更干净。好不好,看你的实际工作。

于 2011-11-29T15:52:29.000 回答
5

Puppet 和 Chef 之间尚未提及的另一个重大区别是 Puppet 将在服务器上完成所有清单编译,而 Chef(和 cfengine)将在客户端上完成部分或全部工作。

这意味着 * 运行 puppet 对客户端的 CPU 占用更少,并且 * 用 Puppet 编写的插件模块仅在服务器上运行。

第二部分很重要,因为它使 Puppet 与其他架构的集成变得更加容易。例如,如果您想通过 API 从另一个应用程序中提取数据,在 Puppet 下,您只需在 Puppetmaster 上安装必要的 API 模块,并且只需要授予该服务器对 API 的访问权限。任何必要的凭据也保留在 puppetmaster 上——更加安全。

我们集成了 Puppet 和 SecretServer(使用 puppet 自动轮换 root 密码并将它们存储到 SecretServer 中)。据我了解,这在 Chef 下是不可能的或安全的。

于 2013-06-13T00:42:02.897 回答