- 论坛徽章:
- 0
|
puppet我们是从2.6的时候开始用的,到目前大概有两年了吧,现在生产环境master仍然在使用2.7.x版本的,最近看了puppet3.x的相关文档,新特性尤其是hiera,感觉要完全颠覆了之前模块的写法,所以准备升级到puppet3.x
说说我们的一些经验吧
1. 机器的hostname对puppet来说至关重要,这个是自动化运维的第一步,要事先就制定好规范hostname的命名方法,比较简单的方法就是下面这种
db-1.example.internal ... db-10.example.internal
web-1.example.internal ... web-10.example.internal
ngx-1.example.internal ... ngx-10.example.internal
使用example.internal作为domain, 并将所有的hostname加入到内网dns的zone中,这样子在内网任何一个机器都可以解析到其他机器的hostname.
2. 配置好hostname之后,就可以在site.pp里面加入对应的node信息了,这里可以参考这篇PPT (http://www.slideshare.net/PuppetLabs/roles-talk) 及其PPT最后的提到的参考文章。
我们最开始使用puppet的时候,就是最简单的include这个node所需要的所有模块,这样子造成的一个问题就是:会造成大量的重复信息,比如线上所有的机器都需要include network, puppet, monitor这几个基础模块,那么需要在每个node下都include,当节点规模变得越来越大,使用这种方法对所有机器增加一个模块,是很大的一个工作量,还需要非常小心看是否有node漏掉了。
后来开始慢慢的改进,基本的思想就是“抽象”,一个机器定义一个"role", class role::base 包含所有基础的模块,比如web机器对应的role就是 class role::web inherit role::base,然后在class role::web里面来include tomcat等,这个工作还在进行中
3. 接上,为什么这个工作看上去很简单,但是一直没有完成,一个最根本的原因就是,即使相通role的机器对不同模块可能也需要做一些个性化的配置,比如同是web集群的机器,不同的机器可能需要不同的用户,甚至不同机器上的同个用户需要增加不同开发人员的ssh public key,在hiera出现之前,这种修改只能在代码级别进行修改,对于一些初级的SA来说,这个修改需要非常小心才行。
hiera的出现终于有望解决这个问题了,将代码和数据进行分离,只需要修改一些hiera的数据源文件就能完成以前写case语句才能完成的工作,并且hiera的继承和merge更加的灵活。
4. puppetdb的使用
puppetdb是个很有用的东西,用于节点之间的信息交互。我们用puppetdb收集线上所有机器的hostname和ip的对应关系,然后写入到master的/etc/hosts文件,puppet kick --host 就可以直接使用了
没有再深入它其他的功能了,希望大家分享可以下puppetdb在实际环境中的应用
5. foreman
配置过foreman作为dashboard,没有发现由什么特别的用处,除了查看一些报错信息之外,这个我们用logstash+ES来做了,foreman作为部署工具感觉不如直接写site.pp来的直观,并且由版本跟踪。
6. 版本跟踪
生产环境中大家应该都会配置至少一个 testing 环境来做模块的测试吧,测试通过之后提交到svn,由一个svn hook触发puppet语法检查,然后自动更新到production环境中
7. puppet forege
现在的习惯就是在自己写一个模块之前,写去puppet forge上搜索下是否有对应的模块,然后学习下别人模块是怎么写的,尽量采用这些开源的模块而不是自己来写, 或者参考其中的一些实现,能学到很多东西,比如自定义type provider function等,这些才是puppet发挥更大作用的核心的东西。
8. puppet doc
我认为 puppet 官方的文档是最好的puppet学习资料,https://github.com/puppetlabs/puppet-docs.git 官方文档的github,太详细了. 另外 <pro pp>, 还有以前Puppet-27-Cookbook-48.pdf这个pdf用来学习都不错,@守住每一天 同学的puppet实战看了下目录,一直没机会拜读,写了这么多是不是该送我一本啦?!
未来的展望:
1. hiera必然是未来的方向
2. MCollective未来应该会发挥更大的作用
3. puppet之外的工具, 看好vagrant作为虚拟机部署的工具,直接在vagrantfile中指定hostname,ip和puppet master就可以自动化配置好一台虚拟机了 |
评分
-
查看全部评分
|