Puppet配置
1. 文件管理 file
文件服务器写法:
/etc/puppet/ fileserver.conf 定义
[files]
path /tmp/files ## puppet数据存放目录 =è后面远程备份实战会用到
allow *.example.com
实战1: 备份master机c.sh到agent /tmp目录下。
代码: |
##remote backup
filebucket{ main: server => "pmaster.example.com", path => false, } ###备份master机上c.sh文件到agent /tmp目录下
file {"/tmp/master.sh": source => "puppet://pmaster.example.com/files/c.sh", backup => main, } 请留意如图中的目录结构 |
结果输出: |
实战2: ##备份agent本地/etc/passwd文件到/tmp并命名为test3,如果文件已存在,先备份再覆盖
代码: |
##备份agent本地/etc/passwd文件到/tmp并命名为test3
file {"/tmp/test3": source => "/etc/passwd", backup => ".bak_$uptime_seconds", group => nobody, owner => nobody, mode => 600; } |
结果输出: |
实战3:##制定文件内容
代码: |
##制定文件内容
file {"/tmp/test4_content": content => "content test \n", } |
结果输出: |
实战4:##创建软链接测试
代码: |
##创建软链接测试
file {"/tmp/test5_link1": ensure => link, target => "/var/log/messages"; "/tmp/test5_link2": ensure => link, target => "/var/log/puppet/puppet.log"; } |
结果输出: |
实战5.##文件删除测试
代码: |
##文件删除测
file {"/tmp/test6": ensure => absent; } |
结果输出: |
文件管理常用参数诠释:
1.backup参数 2.content参数 3.ensure参数 4.force参数 5.group参数 6.ignore参数 7.links参数 8.mode参数 9.owner参数 10.path参数 11.purge参数 12.recurse参数 13.source参数 14.target参数 |
文档参考:
http://docs.puppetlabs.com/references/stable/type.html#file http://www.jbxue.com/ |
1. 用户管理
代码: |
###用户管理
group{"py": #组名 ensure => "present", #创建用户组 gid => 2002, #组id name => "py", } user{"py": #ensure => "absent", #删除py用户 ensure => "present", #新增py用户 uid => 2002, gid => 2002, home => '/home/py', shell => "/bin/bash", password => '$1$zRFsT1$X3TE0/smnkWtxE2P.BPWq/', #grub-md5-crypt 工具生成 } file {"/home/py": #创建用户家目录 group => 2002, owner => 2002, mode => 700, ensure => directory; } |
结果输出: |
用户管理常用参数诠释:
1.manages_aix_lam 2.manages_members 3.system_groups (二)Puppet组管理参数 1.allowdupe 2.attributes 3.ensure 4.gid 5.ia_load_module 6.members 7.name 8.provider 9.system 二、用户的管理 (一)Puppet用户管理特性 2.manages_aix_lam 3.manages_expiry 4.manages_homedir 5.manages_password_age 6.manages_passwords 7.manages_solaris_rbac 8.system_users (二)Puppet用户管理参数 1.allowdupe 2.attributes 3.auths 4.comment 5.ensure 6.expiry 7.gid 8.groups 9.home 10. ia_load_module 11. managehome 12. name 13. password 14. password_max_age 15. password_min_age 16. profiles 17. project 18. provider 19. roles 20. shell 21. system 22.uid |
文档参考:
http://docs.puppetlabs.com/references/latest/type.html#user http://www.jbxue.com/ |
1. 命令执行
代码: |
/etc/puppet/manifests/site.pp 配置
file {"/tmp/mysql_test/mysql_test.tgz": ##将pmaster /tmp/files/mysql_test.tgz文件下发到agent /tmp/mysql_test/目录下 source => "puppet://pmaster.example.com/files/mysql_test.tgz", } exec { "unzip tgz packget": command => "tar -xvf /tmp/mysql_test/mysql_test.tgz", ###所有命令必须为全路径或者path参数指定命令搜索路径 path => "/usr/bin:/usr/sbin:/bin:/sbin", cwd => "/tmp/mysql_test" ##命令执行的路径为: /tmp/mysql_test/ creates => "/etc/my.cnf" #当/etc/my.cnf不存在的时候,才会执行该命令 tries => 2, #重试次数 try_sleep => 3, #重试间隔 s为单位 } |
结果输出:
|
常用参数诠释: |
1. command 2. creates 3. cwd 4. environment 5. group 6. logoutput 7. onlyif 8. path 9.timeout 10.tries 11.try_sleep 12.user |
文档参考:
http://docs.puppetlabs.com/references/latest/type.html#exec http://www.jbxue.com/ |
1. cron 管理
实例: |
cron { "sh /tmp/a.sh": command => "/bin/sh /tmp/a.sh", user=> root, minute => '*/3' #ensure => "absent"; ##cron删除 } |
结果输出: |
Cron管理常用参数诠释
1.command 2.ensure 3.environment 4.hour 5.minute 6.month 7.monthday 8.name 9.target 10. user 11. weekday |
1. 常用命令归类
puppet –genconfig #查看当前配置 service puppetmasterd start #启动puppetmaster service puppet start ##启动客户端 客户端的运行报告在服务器端:/var/lib/puppet/reports/ Agent /etc/hosts中添加主机信息 puppetmasterd –genconfig > puppet.conf puppet master –verbose –no-daemon puppet agent –server=pmaster –no-daemonize –verbose ##agent 連接server 使用—waitforcert 參數改變agent等待時間 puppetmasterd –configprint modulepath ##打印默认路径 puppet cert –list ##显示等待签名的服务器 puppet cert –sign node1.example.com ##签名 puppert cert –sign –all #对所有等待的证书进行签名 |
服务器控制客户端立即运行
puppet kick
官网不建议使用,只检查客户端返回状态,不检查命令执行结果,且新版本会弃用,这个功能建议puppet加强
1. 配置Agent:
/etc/puppet/ |
puppet.conf: [agent] listen = true auth.conf 红色部分为新增
path /run auth any method save allow pmaster.example.com # this one is not stricly necessary, but it has the merit # to show the default policy which is deny everything else path / auth any |
2. demo方式启动agent
service puppet restart ###启动成功不代表成功了,netstat确认端口被监听,puppet这块功能有待完善…
|
3. Master远程确认8139端口可通,执行puppet kick
4. agent确认最终结果
5. 报错参考:
1.连接master的时候出现如下报错: 2. 连接master的时候出现如下报错: 3.连接master的时候出现如下报错: 4. 连接master的时候出现如下报错: |
class类的尝试
1. 配置主配置文件:
# cat site.pp
import 'nodes/nodes.pp' node default { file { "/tmp/linuxlst.txt": owner => root, group => root, ensure => present, content =>"good morning!\n", mode => 644, } # cat nodes/nodes.pp
node 'node1.example.com' { #include test::test include mysql::mysql } |
2. 单独配置mysql模块
#查看puppet默认加载的模块目录, —即在这些目录下的配置会被默认加载 [root@pmaster puppet]# pwd /etc/puppet [root@pmaster puppet]# tree modules/ ##在/etc/puppet/modeles目录下进行本次的类配置
modules/ |-- mysql | |-- manifests | | |-- config.pp | | |-- init.pp | | |-- install.pp | | `-- service.pp | `-- template | `-- my.cnf.erb `-- test `-- manifests `-- init.pp # cat modules/mysql/manifests/config.pp #类似python,*.pp必须和定义的类名保持一致 class mysql::config{ file {"/tmp/mysql_test/mysql_test.tgz": ##将pmaster /tmp/files/mysql_test.tgz文件下发到agent /tmp/mysql_test/目录下 source => "puppet://pmaster.example.com/files/mysql_test.tgz", } } # cat modules/mysql/manifests/install.pp #类似python,*.pp必须和定义的类名保持一致 class mysql::install{ exec { "unzip tgz packget": command => "tar -xvf /tmp/mysql_test/mysql_test.tgz", ###所有命令必须为全路径或者path参数指定命令搜索路径 path => "/usr/bin:/usr/sbin:/bin:/sbin", cwd => "/tmp/mysql_test", ##命令执行的路径为: /tmp/mysql_test/ creates => "/etc/my.cnf", #当/etc/my.cnf不存在的时候,才会执行该命令 tries => 2, #重试次数 try_sleep => 3, #重试间隔 s为单位 } } # cat modules/mysql/manifests/init.pp #init.pp中定义包涵的所有类
class mysql::mysql{ include mysql::install,mysql::config } |
3. 在agent上验证结果:
puppetd –test –server pmaster.example.com |
4. 好处:
通过如上方式,一个模块一个目录,干净整洁,且于维护配置,且利于功能模块复用. |
5. 示例:
Ok,截止如上,puppet基本配置大家已经掌握,文章开始的问题大问题在学习的过程中大家可能已经在答案了,部分问题还需要大家自己再摸索.
对于Puppet的个人感觉:
1. 对没有一定基础的同学,入门较难; 2. 因灵活性,扩展性,语言方面限制大企业应用较难,主要针对中小型企业的应用; 3. 在对正确性及灵性要求较高的情况下,puppet适用性会受到质疑; |
如上仅代表个人见解,如有不对,请谅解.
有兴趣同学进一步的学习方向
Ø Puppet Master 负载均衡配置 Ø 精通Class类配置 Ø Puppet 图形界面dashboard / Foreman的安装配置 Ø Puppet 内置web界面替换(如用nginx,apache代替) Ø Puppet factor 自定义信息收集(需对ruby语言有一定了解) |
原创文章,作者:stanley,如若转载,请注明出处:http://www.178linux.com/3987