上一篇博客写了puppet操作file、cron、user、group、exec基础资源的使用,连接地址为 http://www.178linux.com/13990
这次实验puppet的操作Package、Server和puppet的特殊资源属性Metaparameters。
回顾下Package、Server资源属性:
package的常用属性:
ensure:present安装, installed安装, absent不能安装, latest,VERSION(2.3.1-2.el7)–目标状态
name: 程序包名称:
source:包文件的路径,可以是本地文件系统路径,也可以网络文件路径;
puppet:///modules/MODULE_NAME/FILENAME
provider:指明程序包提供者默认为yum;
service的常用属性:
ensure:
true, running
false, stopped
enable: true|false 是否开机自动启动
name:服务名称
hasrestart:是否支持restart参数
hastatus:是否支持status参数
path: 服务脚本路径
pattern:用于搜索此服务相关的进程的模式,当脚步不支持restart/status时,用于确定服务是否处于运行状态;
一、puppet使用package安装glances监控工具:
1、编辑site.pp:
本地测试site.pp
2、agent连接master:
agent运行glances监控命令:
二、puppet特殊资源属性:Metaparameters
puppet提供了before、require、notify、subscribe四个元参数来定义资源间的相关性,这四个元参数都有另外的其他资源或资源组作为其值,这也称 作资源引用,资源引用要通过“Type [title]”的方式进行,如User['test'],首字母必须大写。
依赖关系:
before => Type['title'] 被依赖的资源中使用
require => Type['title']依赖其他资源的资源
链式依赖:->
通知关系
notify => 通知被依赖的资源中使用
subscribe => 订阅监听其他资源的资源
链式通知:~>
1、创建linux组,gid=3000。linux组的gid依赖用户centos的gid。
同理,如果使用require。在user段中加入require => Group['linux']即可。
三、puppet使用server属性安装nginx服务:
四、puppet使用class、modules功能:
类:命名的puppet代码块,需要时可通过名称进行调用,用于公共目的一组资源,是命名的代码块,创建后可用在puppet全局调用,类可以被继承
备注:类的名字只能以小写字母开头,类在声明后方可执行。
类的的声明:
类声明方式1:声明一个类
include class1, class2, …
class {'classname': }
定义带参数的类:
class class_name ($arg1=value1, $arg2=value2) {
…puppet code…
}
类声明方式2,传递参数:
class {'class_name':
para1 => new_value1,
para2 => new_value2,
}
1、使用class创建webserver类:
本地测试:
puppet模板:基于ERB模板语音,在静态文件中使用变量等编程元素生成适用于多种不用的环境的文本(配置文件):Embedded RUBY
用于实现在文本中嵌入ruby代码,原来的文本信息不会改变,但ruby代码会被执行,执行结果将直接替换原来代码:
puppet模块:为了实现某种完备功能而组织成的一个独立的、自我包含的目录结构
目录结构:/etc/puppet/modules
module_name: manifests: –资源清单
init.pp: 至少应该包含一个与当前模块名称同名类;
MODULE_NAME::[SUBDIR_NAME]::MANIFESTS_FILE_NAME
files:静态文件
puppet url puppet:///modules/MODULE_NAME/[SUBDIR_NAME]/FILE_NAM
templates: 模板文件目录 模板文件:*.erb
template('MODULE_NAME/TEMPLATE_FILE_NAME');
lib: 插件目录 tests: 模块使用帮助文档 spec: 类似于tests目录,存储lib目录下定义的插件的使用帮组和示例文件:
1、手工创建nginx模块并新建nginx、nginx_webserver、nginx_proxy类:
[root@master modules]# cp /etc/puppet/manifests/site.pp /etc/puppet/modules/nginx/manifests/init.pp
[root@master modules]# cp /opt/moudules/nginx/nginx_proxy.conf /etc/puppet/modules/nginx/files/nginx.conf
编辑/etc/puppet/manifests/site.pp调用模板中的类:(在生成环境中根据不同节点调用不同的模板和类)
在agent.puppet.com上应用模板中的类nginx_proxy:
注意:生成环境中先在本地测试跑在运行
puppet agent –server=master.puppet.com –no-daemonize –verbose –noop
2、puppet多环境配置:
在实际工作中服务器配置可能会有开发环境、测试环境、生成环境。puppet可以定义不同的环境配置让其agent连接。
master: vim /etc/puppet/puppet.conf 在master端中添加支持
[master]
environmnet=production,testing,development — 声明master支持环境
[production]
manifest = /etc/puppet/envionments/production/manifests/
modulepath = /etc/puppet/envionments/production/modules/
fileserverconfig = /etc/puppet/filesserver.conf
[testing]
manifest = /etc/puppet/envionments/testing/manifests/
modulepath = /etc/puppet/envionments/testing/modules/
fileserverconfig = /etc/puppet/filesserver.conf
[development]
manifest = /etc/puppet/envionments/development/manifests/
modulepath = /etc/puppet/envionments/developmentmodules/
fileserverconfig = /etc/puppet/filesserver.conf
agent:
[agent] –声明agent处于哪个环境
enviroment = testing
五、puppet拓展思路:
随着公司应用需求的增加,需要不断的扩展,服务器数量也随之增加,当服务器数量不断增加,我们会发现一台puppetmaster响应很慢,压力大,解析缓慢,有什么优化的方案吗?可以使用Puppetmaster配置多端口,结合Nginx web代理,这样puppetmaster承受能力至少可以提升10倍以上。
要使用puppet多端口配置,需要指定mongrel类型,默认没有安装。如果配置多主集群的话,可以共享master1的证书,然后另外一台master通过NFS挂载证书即可。
感谢马哥,每天进步一点点!
原创文章,作者:n18-jude,如若转载,请注明出处:http://www.178linux.com/14611