【发布时间】:2013-03-24 18:12:12
【问题描述】:
在离开 Chef 一段时间后,我目前正在重新使用它来满足我所有的服务器需求。几年前我已经使用了一段时间并且很喜欢它,但最近让其他人做了操作部分。
但我仍在努力寻找一个非常好的起始设置(本地 Vagrant+Chef)来进行开发。 单独使用 Vagrant 是一件轻而易举的事,超级容易使用,并且在其上开发服务器设置相当快。但是一旦我不得不离开 Vagrant 进行实际部署,它就会再次变得烦人。我不能总是使用 Vagrant 盒子,但有时在某个地方使用 Rackspace 甚至是实际的硬件盒子。
现在我这样做如下:
针对 Vagrant 进行开发,尽量减少 Vagrantfile 中的实际配置
- 主要使用角色,并为我的常用环境预定义默认属性
- 仅在 Vagrantfile 中指定节点特定属性
- 在步骤之间直接从 VirtualBox 手动运行 vagrant 配置,以避免一直从头开始重新构建
暂存并实际部署服务器:
通过 Knife Solo 使用 Rackspace Cloud(至少暂存)
- 从 Web 界面创建 Rackspace 服务器,以便通过(roo@ip 和密码)为所有服务器提供一致的第一个配置步骤
- 将公钥认证添加到服务器,这样就不再需要密码了
- 为新服务器添加本地节点配置,复制 Vagrantfile 中定义的内容
- 使用 Knife 单独准备 + 引导服务器
这已经不是那么糟糕了,但仍然有一些有时很烦人的小故障:
- 来自 VirtualBox 的 Vagrant 手动快照(我还没有找到任何可用的插件)
- 节点配置和 Vagrantfile 之间的冗余(可能让 Vagrantfile 解析节点配置并以这种方式使用值)
- Vagrant 和 Knife Solo 之间的引导不一致(如果我弄清楚如何将其添加到 Vagrant (*1),可能会为两者使用通用脚本)
除此之外,我还不得不遗憾地发现,厨师食谱已经广泛发展成为一个由不相容和固执己见的人工制品组成的丛林。有时甚至很难使用默认配方进行基本设置。我有点惊讶,很多基础知识都几乎没有涵盖:
让 sshd+iptables 的组合工作我花了一天的时间研究,然后仍然修改默认模板以使其工作 - 虽然我希望它成为几乎所有服务器的起点。 此外,似乎没有任何默认的厨师用户工作流程。到目前为止,我发现的所有内容要么以 root 身份运行,要么需要进行相当多的修改。 最后但并非最不重要的一点是,厨师(在 ubuntu 12.04 上)仍然使用 ruby 1.8.7,它在短短几个月内就即将结束。
可能是我没有找到合适的资源来涵盖我目前仍在苦苦挣扎或满意的所有要点,但似乎仍有很多方法可以改进它。
那么 vagrant + chef 如何在真实环境中(不仅仅是本地虚拟盒子)为您工作,有哪些需要注意的陷阱?
在本地通过 vagrant 进行自动引导似乎开始变得非常棒,但是一旦超出范围,事情就会变得非常混乱。 如果人们也使用这样的某种设置可以给我一些关于如何解决上述问题的指示,我会很高兴。我不介意付出一些努力让它按我期望的那样运行,但也许我已经走错了部分,只是让自己更加困难,实际上需要这样做;)
现在简短的总结是:Vagrand+ChefSolo (KnifeSolo) 非常棒,但要正常工作,整个引导部分需要我们换掉一个自定义的部分,以便在应用食谱之前获得适当的系统基础 - 以及那些需要从丛林中小心挑选出来。
进展/更新说明
(*1): 只是在试一试时发现,纯粹是靠运气,显然可以在一个 Vagrantfile 中添加多个供应机制:
config.vm.provision :shell, path: 'bootstrap.ubuntu-12.04.2-server-amd64.sh'
config.vm.provision :chef_solo do |chef|
...
end
由于首先执行 shell,我可以将它用作 Vagrant 服务器的自定义准备,同时仍然使用 Chef-Solo 进行实际设置。耶。 最后仍然需要看看这会有多大用处,但现在有一个缺失的步骤可以使流程保持一致。
【问题讨论】:
-
那又是什么问题?
-
添加了一个正确的问题,在上下文中可能不会出现这样的问题。谢谢你的提醒,我希望它现在清楚了。
-
对于快照,请尝试github.com/dergachev/vagrant-vbox-snapshot。适用于 Vagrant 1.1+
标签: chef-infra vagrant knife chef-solo