我刚刚开始使用Puppet.示例演练和教程很好地帮助我理解Puppet的有用性和基本工具集,但是我很难概念化完整的堆栈.即使是高级教程似乎也没有让我清楚地了解需要发生什么.
在某些地方我可以学到一些完整的轨道堆栈示例吗?
完整堆栈的例子很难得到.但是,您应该能够找到管理其中一些特定示例的模块示例.一个问题是,创建一个抽象掉所有特定于站点的假设并且真正是跨平台的模块可能需要做很多额外的工作.
http://forge.puppetlabs.com/是人们希望分享的模块的规范位置.通过快速扫描,我找到了nginx,varnish和postgres的模块.
您将要从基本设置的Puppet最佳实践开始.
从那里开始,您将(至少)想要一个模块用于nginx,varnish,thin,postgres,memcached,redis和一个站点模块(可能以您的站点命名).
在您的nodes.pp中,每个系统都将对角色进行相当简单的分配.("包括角色")
在您的"站点"模块中,您将需要每个系统角色的子类(我假设您将拥有多组服务器,并且在一组中,它们旨在基本上彼此相同.我也假设您可能有多个以上的内容).您可能还需要一个site :: commonvariables类(或类似的东西)来处理您可能需要跨多个其他模块或类的事物(例如角色中的服务器列表,密码等).最佳实践似乎在/ services辅助模块区域中具有这些site :: role事物,其名称更像是s_role,因此您可能希望遵循该命名/放置方案.这些角色类将包括这些角色所需的实际组件的类,调用定义等.
对于您提到的6个组件中的每个组件,您将拥有一个模块.在该模块中,您可能希望拥有类似"服务器"和"客户端"子类的东西.客户端和服务器可能包含第三类,用于两者所需的事物(公共库等).在服务器子类中,一个用于设置特定实例(虚拟主机,数据库等)的定义.(如果它绝对只是一个服务器,也许跳过这个级别的子类).
所以,例如:
postgres模块(清单,文件,模板等)
postgres类(在init.pp中):也许是空类,也许客户端和服务器需要的东西
postgres :: client class:安装postgres客户端库
postgres :: server类:安装postgres服务器代码,确保postgres服务正在运行,配置它,设置备份等
postgres :: server :: database define:在服务器类内部,一个定义,它接受数据库名称,用户名,密码等参数,并创建数据库和用户,并授予用户访问数据库的权限.也许这是两个或三个单独的定义,取决于您喜欢如何建模事物.
最好是组件模块保持相当独立(并且可重用),并且您的角色类是所有更多特定于站点的配置发生的地方,但如果组件模块包含一些特定于站点的内容,则不是世界末日.