• Puppet基础篇4-安装、配置并使用Puppet
  • 一、安装Puppetmaster
  • 二、安装Agent
  • 三、编写简单的motd模块
  • 四、测试motd模块

    Puppet基础篇4-安装、配置并使用Puppet

    Puppet前期环境(网络、解析、yum源、NTP)在上一章节已经准备就绪,接下来我们就开始安装Puppet了,安装Puppet其实很简单,官方已经提供了yum源,只需要自己将所需要的安装包下载下来然后做成本地yum源即可使用。
    注意:本实验完全采用自定义的certname名,如果不设置默认会使用系统变量hostname的值。

    一、安装Puppetmaster

    1、安装Puppet-server、puppet和facter

    1. [root@puppetmaster ~]# yum install puppet puppet-server facter -y #系统会自己安装一些ruby依赖包环境

    2、配置puppet.conf
    注意:这个里面配置了两个certname名称,其中[master]中配置的certname是为所有节点认证用的master名称,[agent]中配置的certname是他本身agent的名称,当然不配置默认是和master的名称是一样的。

    1. [root@puppetmaster ~]# cp /etc/puppet/puppet.conf{,.bak} #备份
    2. [root@puppetmaster ~]# vim /etc/puppet/puppet.conf #注释已经删除
    3. [main]
    4. logdir = /var/log/puppet #默认日志存放路径
    5. rundir = /var/run/puppet #pid存放路径
    6. ssldir = $vardir/ssl #证书存放目录,默认$vardir为/var/lib/puppet
    7. [agent]
    8. classfile = $vardir/classes.txt
    9. localconfig = $vardir/localconfig
    10. server = puppetmaster.kisspuppet.com #设置agent认证连接master端的服务器名称,注意这个名字必须能够被节点解析
    11. certname = puppetmaster_cert.kisspuppet.com #设置agent端certname名称
    12. [master]
    13. certname = puppetmaster.kisspuppet.com puppetmaster.kisspuppet.com #设置puppetmaster认证服务器名

    3、创建site.pp文件
    site.pp文件是puppet读取所有模块pp文件的开始,在3.0版本以前必须设置,否则服务无法启动。

    1. [root@puppetmaster ~]# touch /etc/puppet/manifests/site.pp

    4、启动puppetmaster服务

    1. [root@puppetmaster ~]# /etc/init.d/puppetmaster start
    2. Starting puppetmaster:
    3. [ OK ]
    4. [root@puppetmaster ~]# chkconfig puppetmaster on #设置开机启动

    5、查看本地证书情况
    puppetmaster第一次启动会自动生成证书自动注册自己

    1. [root@puppetmaster ~]# tree /var/lib/puppet/ssl/
    2. /var/lib/puppet/ssl/
    3. ├── ca
    4. ├── ca_crl.pem
    5. ├── ca_crt.pem
    6. ├── ca_key.pem
    7. ├── ca_pub.pem
    8. ├── inventory.txt
    9. ├── private
    10. └── ca.pass
    11. ├── requests
    12. ├── serial
    13. └── signed
    14. └── puppetmaster.kisspuppet.com.pem #已注册
    15. ├── certificate_requests
    16. ├── certs
    17. ├── ca.pem
    18. └── puppetmaster.kisspuppet.com.pem
    19. ├── crl.pem
    20. ├── private
    21. ├── private_keys
    22. └── puppetmaster.kisspuppet.com.pem
    23. └── public_keys
    24. └── puppetmaster.kisspuppet.com.pem
    25. 9 directories, 13 files
    26. [root@puppetmaster ~]# puppet cert --list --all #带+标示已经注册成功
    27. + "puppetmaster.kisspuppet.com" (C0:E3:6B:76:36:EC:92:93:4D:BF:F0:8F:77:00:91:C8) (alt names: "DNS:puppet", "DNS:puppet.kisspuppet.com", "DNS:puppetmaster.kisspuppet.com")

    6、查看监听状态
    puppetmaster服务开启后,默认监听TCP 8140端口

    1. [root@puppetmaster ~]# netstat -nlatp | grep 8140
    2. tcp 0 0 0.0.0.0:8140 0.0.0.0:* LISTEN 1976/ruby
    3. [root@puppetmaster ~]# lsof -i:8140
    4. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    5. puppetmas 1976 puppet 5u IPv4 14331 0t0 TCP *:8140 (LISTEN)

    二、安装Agent

    以agent1为例

    1、安装puppet和facter

    1. [root@agent1 ~]# yum install puppet facter #系统会自己安装一些ruby依赖包环境

    2、配置puppet.conf

    1. [root@agent1 ~]# cp /etc/puppet/puppet.conf{,.bak}
    2. [root@agent1 ~]# vim /etc/puppet/puppet.conf
    3. [main]
    4. logdir = /var/log/puppet
    5. rundir = /var/run/puppet
    6. ssldir = $vardir/ssl
    7. [agent]
    8. classfile = $vardir/classes.txt
    9. localconfig = $vardir/localconfig
    10. server = puppetmaster.kisspuppet.com #指向puppetmaster端
    11. certname = agent1_cert.kisspuppet.com #设置自己的certname名

    3、通过调试模式启动节点向Puppetmaster端发起认证

    1. [root@agent1 ~]# puppet agent --test
    2. info: Creating a new SSL key for agent1_cert.kisspuppet.com
    3. info: Caching certificate for ca
    4. info: Creating a new SSL certificate request for agent1_cert.kisspuppet.com
    5. info: Certificate Request fingerprint (md5): 69:D2:86:E4:7F:00:E0:55:61:19:02:34:9E:9B:AF:F9
    6. Exiting; no certificate found and waitforcert is disabled

    4、服务器端确定认证

    1. [root@puppetmaster ~]# puppet cert --list --all #查看认证情况
    2. "agent1_cert.kisspuppet.com" (69:D2:86:E4:7F:00:E0:55:61:19:02:34:9E:9B:AF:F9) #未认证
    3. + "puppetmaster.kisspuppet.com" (C0:E3:6B:76:36:EC:92:93:4D:BF:F0:8F:77:00:91:C8) (alt names: "DNS:puppet", "DNS:puppet.kisspuppet.com", "DNS:puppetmaster.kisspuppet.com")
    4. [root@puppetmaster ~]# puppet cert --sign agent1_cert.kisspuppet.com #注册agent1
    5. notice: Signed certificate request for agent1_cert.kisspuppet.com
    6. notice: Removing file Puppet::SSL::CertificateRequest agent1_cert.kisspuppet.com at '/var/lib/puppet/ssl/ca/requests/agent1_cert.kisspuppet.com.pem'
    7. [root@puppetmaster ~]# puppet cert --list --all #再次查看认证情况
    8. + "agent1_cert.kisspuppet.com" (3E:46:4E:75:34:9A:5A:62:A6:3C:AE:BD:49:EE:C0:F5)
    9. + "puppetmaster.kisspuppet.com" (C0:E3:6B:76:36:EC:92:93:4D:BF:F0:8F:77:00:91:C8) (alt names: "DNS:puppet", "DNS:puppet.kisspuppet.com", "DNS:puppetmaster.kisspuppet.com")
    10. [root@puppetmaster ~]# tree /var/lib/puppet/ssl/ #另外一种查看认证的方式
    11. /var/lib/puppet/ssl/
    12. ├── ca
    13. ├── ca_crl.pem
    14. ├── ca_crt.pem
    15. ├── ca_key.pem
    16. ├── ca_pub.pem
    17. ├── inventory.txt
    18. ├── private
    19. └── ca.pass
    20. ├── requests
    21. ├── serial
    22. └── signed
    23. ├── agent1_cert.kisspuppet.com.pem #已经注册成功
    24. └── puppetmaster.kisspuppet.com.pem
    25. ├── certificate_requests
    26. ├── certs
    27. ├── ca.pem
    28. └── puppetmaster.kisspuppet.com.pem
    29. ├── crl.pem
    30. ├── private
    31. ├── private_keys
    32. └── puppetmaster.kisspuppet.com.pem
    33. └── public_keys
    34. └── puppetmaster.kisspuppet.com.pem
    35. 9 directories, 14 files

    5、其它节点一起认证

    1. [root@puppetmaster ~]# puppet agent --test #puppetmaster自己申请agent认证
    2. info: Creating a new SSL key for puppetmaster_cert.kisspuppet.com
    3. info: Creating a new SSL certificate request for puppetmaster_cert.kisspuppet.com
    4. info: Certificate Request fingerprint (md5): 7D:AC:F7:97:04:2B:E4:C5:74:4A:16:05:DB:F6:6A:98
    5. Exiting; no certificate found and waitforcert is disabled
    6. [root@puppetmaster ~]# puppet cert --sign --all #注册所有请求的节点
    7. notice: Signed certificate request for puppetmaster_cert.kisspuppet.com
    8. notice: Removing file Puppet::SSL::CertificateRequest puppetmaster_cert.kisspuppet.com at '/var/lib/puppet/ssl/ca/requests/puppetmaster_cert.kisspuppet.com.pem'
    9. notice: Signed certificate request for agent2_cert.kisspuppet.com
    10. notice: Removing file Puppet::SSL::CertificateRequest agent2_cert.kisspuppet.com at '/var/lib/puppet/ssl/ca/requests/agent2_cert.kisspuppet.com.pem'
    11. notice: Signed certificate request for agent3_cert.kisspuppet.com
    12. notice: Removing file Puppet::SSL::CertificateRequest agent3_cert.kisspuppet.com at '/var/lib/puppet/ssl/ca/requests/agent3_cert.kisspuppet.com.pem'
    13. [root@puppetmaster ~]# puppet cert --list --all #查看所有节点认证
    14. + "agent1_cert.kisspuppet.com" (3E:46:4E:75:34:9A:5A:62:A6:3C:AE:BD:49:EE:C0:F5)
    15. + "agent2_cert.kisspuppet.com" (A0:CE:70:BE:A9:11:BF:F4:C8:EF:25:8E:C2:2C:3B:B7)
    16. + "agent3_cert.kisspuppet.com" (98:93:F7:0C:ED:94:81:3D:51:14:86:68:2B:F3:F1:A0)
    17. + "puppetmaster.kisspuppet.com" (C0:E3:6B:76:36:EC:92:93:4D:BF:F0:8F:77:00:91:C8) (alt names: "DNS:puppet", "DNS:puppet.kisspuppet.com", "DNS:puppetmaster.kisspuppet.com")
    18. + "puppetmaster_cert.kisspuppet.com" (57:A3:D7:3D:64:2F:D6:FD:BC:2A:6C:79:68:73:EA:AB)

    三、编写简单的motd模块

    1、创建模块目录结构
    注意:再未指定modulepath搜索路径的情况下,会有默认搜索路径的,可通过以下方式查看到

    1. [root@puppetmaster ~]# puppet master --genconfig >/etc/puppet/puppet.conf.out
    2. [root@puppetmaster ~]# cat /etc/puppet/puppet.conf.out | grep modulepath
    3. modulepath = /etc/puppet/modules:/usr/share/puppet/modules
    4. [root@puppetmaster modules]# tree /etc/puppet/modules/
    5. /etc/puppet/modules/
    6. └── motd
    7. ├── files #存放文件目录
    8. └── etc
    9. └── motd
    10. ├── manifests #存放模块pp配置文件目录
    11. └── init.pp
    12. └── templates #存放模板目录
    13. 5 directories, 2 files

    2、编写pp文件

    1. [root@puppetmaster modules]# vim motd/manifests/init.pp
    2. class motd{ #定义一个类叫motd
    3. package{ 'setup': #定义package资源
    4. ensure => present, #要求setup这个包处于被安装状态
    5. }
    6. file{ '/etc/motd': #定义file资源
    7. ensure => present, #要求file文件处于存在状态
    8. owner => 'root', #要求file文件属主为root
    9. group => 'root', #要求file文件属组为root
    10. mode => '0644', #要求file文件权限为644
    11. source => "puppet://$puppetserver/modules/motd/etc/motd", #要求file文件从puppetmaster端服务器下载
    12. require => Package['setup'], #要求文件被配置之前先执行package资源
    13. }
    14. }
    15. [root@puppetmaster modules]# cat motd/files/etc/motd
    16. -- --
    17. --------puppet test---------
    18. -- --

    3、编写site.pp文件

    1. [root@puppetmaster ~]# vim /etc/puppet/manifests/site.pp
    2. $puppetserver = 'puppetmaster.kisspuppet.com' #设置全局变量
    3. node 'puppetmaster_cert.kisspuppet.com'{
    4. include motd
    5. }
    6. node 'agent1_cert.kisspuppet.com'{
    7. include motd
    8. }
    9. node 'agent2_cert.kisspuppet.com'{
    10. include motd
    11. }
    12. node 'agent3_cert.kisspuppet.com'{
    13. include motd
    14. }

    四、测试motd模块

    1. [root@agent1 ~]# puppet agent --test #测试节点agent1
    2. info: Caching catalog for agent1_cert.kisspuppet.com
    3. info: Applying configuration version '1394304542'
    4. notice: /Stage[main]/Motd/File[/etc/motd]/content:
    5. --- /etc/motd 2000-01-13 07:18:52.000000000 +0800
    6. +++ /tmp/puppet-file20140309-4571-1vqc18j-0 2014-03-09 02:51:47.000000000 +0800
    7. @@ -0,0 +1,3 @@
    8. +-- --
    9. +--------puppet test---------
    10. +-- --
    11. info: FileBucket adding {md5}d41d8cd98f00b204e9800998ecf8427e
    12. info: /Stage[main]/Motd/File[/etc/motd]: Filebucketed /etc/motd to puppet with sum d41d8cd98f00b204e9800998ecf8427e
    13. notice: /Stage[main]/Motd/File[/etc/motd]/content: content changed '{md5}d41d8cd98f00b204e9800998ecf8427e' to '{md5}87ea3a1af8650395038472457cc7f2b1'
    14. notice: Finished catalog run in 0.40 seconds
    15. [root@agent1 ~]# cat /etc/motd
    16. -- --
    17. --------puppet test---------
    18. -- --
    19. [root@agent1 ~]#
    20. [root@puppetmaster ~]# puppet agent -t #测试节点puppetmaster
    21. info: Caching catalog for puppetmaster_cert.kisspuppet.com
    22. info: Applying configuration version '1394305371'
    23. notice: /Stage[main]/Motd/File[/etc/motd]/content:
    24. --- /etc/motd 2010-01-12 21:28:22.000000000 +0800
    25. +++ /tmp/puppet-file20140309-3102-1gadon0-0 2014-03-09 03:02:51.966998294 +0800
    26. @@ -0,0 +1,3 @@
    27. +-- --
    28. +--------puppet test---------
    29. +-- --
    30. info: FileBucket adding {md5}d41d8cd98f00b204e9800998ecf8427e
    31. info: /Stage[main]/Motd/File[/etc/motd]: Filebucketed /etc/motd to puppet with sum d41d8cd98f00b204e9800998ecf8427e
    32. notice: /Stage[main]/Motd/File[/etc/motd]/content: content changed '{md5}d41d8cd98f00b204e9800998ecf8427e' to '{md5}87ea3a1af8650395038472457cc7f2b1'
    33. info: Creating state file /var/lib/puppet/state/state.yaml
    34. notice: Finished catalog run in 0.52 seconds
    35. [root@puppetmaster ~]# cat /etc/motd
    36. -- --
    37. --------puppet test---------
    38. -- --