额... 手动累了... 请有经验的指点下,thx
恶意满满地介绍 Salt A Taste of Salt: Like Puppet, Except It Doesn’t Suck http://blog.smartbear.com/devops/a-taste-of-salt-like-puppet-except-it-doesnt-suck/
我早该预料到在 Ruby 社区提问就是这个下场......
Anyway,其实我是想跟 vagrant 配合使用的,看 vagrant 的文档里面只提到了 Ansible, Chef 和 Puppet,估计只能用这三个?...
推荐 Rex,估计连 vagrant 也能省了
http://rexify.org/howtos/use_boxes_with_any_box_provider.html
我用了 Puppet 有一年多。也是在 Vagrant 里面搭环境用。Puppet 代码 + 配置模板大概上千行。是从自己对 Puppet 一无所知开始写起。所以借题扯个蛋吧。
需要强调的是 Chef 我一点都没用过... 所以下面出现的 Chef 信息可能有误。
最开始接触 Puppet 和 Chef 的时候感觉一下子要学好多陌生的概念,好讨厌。当时 Puppet 的文档比 Chef 亲切得多,陌生概念也比 Chef 看上去要少一点,"快使用 Vagrant" 的欲望又十分强烈,就先从 Puppet 用起来了。虽然 Puppet 和 Chef 默认的设计都是 Master-Agent 的架构,但也都可以在单机内使用。我的使用方式就是 Vagrant 提供的 puppet provisioner, 由 Vagrant 替我 ssh 进虚拟机然后跑 puppet apply
. Chef 的等价物是 chef-solo
.
用到现在,对 Puppet 比较恼火的有以下两点
执行顺序不确定 (non-deterministic). 虽然说正确的做法是开发者应该显式声明依赖关系,但 Puppet 的问题是当我犯了错误没能正确声明依赖关系的时候,不一定会在测试中出错... Chef 就不存在这个问题。以及,当我需要在一个 puppet class (Chef 方面的等价物好像是叫 recipe?) 里序列化地部署几个资源时,本来是一目了然的自上而下的顺序,却还要手动声明这几项之间的依赖关系。另一个小问题是后来我需要在部署完成时打印一条成功提示,由于 Puppet 没有执行顺序这回事,所以需要用某种不整洁的 hack 才行。甚至 Puppet 后来又引入 Stages 机制用来解决此类问题......
Puppet 自己的语法始终觉得不习惯。而 Chef 完全是 Ruby 语法。似乎也存在有 Ruby 语法版的 Puppet, 这个没有仔细深究。
如果现在给我再选择一次的话,估计会坚持把 Chef 啃下来。不过现在这样说实在是这山望着那山高...
至于说"能在 Vagrant 中使用"这件事,一方面要看 basebox 里是否预先安装了 Chef / Puppet. 另一方面要看 Vagrant 是否安装了 provisioner 整合支持。官方文档里列出 Ansible, Chef, Puppet 这几个意味着内置支持。以及 vagrant-omnibus 这个插件会帮你在虚拟机里安装 / 更新虚拟机里的 Chef. 我用的 basebox 里的 Puppet 至今还没更新过。
最近在折腾 sprinkle: https://github.com/sprinkle-tool/sprinkle , 一个比较简单的方案。
借助 cap 或者直接 ssh 来做 provisioning。
这个没有那么多复杂的概念,脚本好写。本身的代码也没多少。
小规模部署足够用了。
Rex 之类只依赖 SSH 的 Push 风格的,不需要先在系统上装 Agent,只需要有 SSH Server 就好了。这样,AWS 上的镜像就不用搞太复杂,开机之后让 Rex 去搞定就好了。
同类工具里,Rex 的优势是,默认提供了调用 AWS API 建虚拟机的功能。
http://rexify.org/howtos/amazon.html
而且同时提供了本地用 VirtualBox 测试,部署用 EC2 的平滑过渡方案
http://rexify.org/howtos/use_boxes_with_any_box_provider.html
你可以继续参考
Puppet 出道早,用户群体更广泛,但 Puppet Server 存在性能问题。但 Opscode Chef 有后来居上之势,其社区和 Ruby 社区类似非常有激情(大量成熟的工具,比如 knife-solo
, Berkshelf
, librarian-chef
还有 vagrant 插件,等等,我和我的小伙伴都惊呆了)。
后者对写会写代码的更友好些(前者对 SA 更友好?),即所谓的 Infrastructure as Code 以代码(用 git
进行版本控制)的形式管理基础架构。
如果还没学 Puppet 就直接 Chef 好了,会 Ruby 懂一点 Shell 和 Linux 上手很快,瞬间就可以组装,甚至写出复杂的 cookbook 了。个人没有系统学过 Ruby 只会 Shell scripting 两周速成 Chef 完成了两个还有点复杂的 cookbooks ;-)
有人提到 Ansible 这用来做 ad-hoc 并行执行工具还可以(模块相当多),拿来做 configuration management 就够呛了,其 Playbooks 完全就是模仿 Cookbooks 远不如 Chef ...
BTW: MCollective 被 Puppet 收购了,拿来当 Parallel Execution Framework 这方面 Chef 比较欠缺,光靠 knife / knife solo 可能不行。需要用 MCollective / Ansible / Fabric 之类的工具辅助一下...
And the winner is...
Language: Chef Approach: Chef Resources: Chef Facter vs Ohai: Draw Hiera vs Data bags: Chef Beaker vs Kitchen: Chef Command line: Draw
作者意思是 chef 大胜,虽然我表示怀疑。 不过有一点可以赞同的是,puppet 不是那么简单,而 chef 也不是 developer 才需要