学习Puppet的基本安装部署

发布时间:2020-12-11编辑:脚本学堂
Puppet的基本安装部署,很不错的puttet入门级文章,供大家学习参考。

Puppet的基本安装部署,很不错的puttet入门级文章,供大家学习参考。
一、安装ruby
1、服务器端:
因为配置nagios要使用storconfig,需要安装ruby 1.8.7以上版本,因为rhel5自带为1.8.5,所以需要源码安装。
 

复制代码 代码如下:
ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p352.tar.gz
tar -xczf ruby-1.8.7-p352.tar.gz
./configure --prefix=/usr/local/ruby
make
make install
ln -s /usr/local/ruby/bin/ruby /usr/bin/ruby (必须)

注意:如果之前yum安装了ruby:
 

复制代码 代码如下:
yum erase ruby*
mv /usr/lib/ruby /tmp

(如果已经安装了puppet,再安装一次即可,记得安装之前要备份)

关于`require': no such file to load -- puppet/application/master
原因:卸载了yum的ruby
因为puppet会将很多的文件拷贝到ruby安装目录下的lib文件夹,所以卸载了ruby,puppet安装的文件也被删除了,再次安装puppet即可
可以看到在安装puppet所作的操作:
chmod 0644 /usr/local/ruby/lib/ruby/site_ruby/1.8/puppet/rails/inventory_node.rb
lib/puppet/rails/host.rb -> /usr/local/ruby/lib/ruby/site_ruby/1.8/puppet/rails/host.rb

2、客户端:
yum 安装即可
    yum install ruby ruby-devel ruby-ri

二、安装puppet
1、可以使用epel库里带的rpm版本(不推荐)。
    yum install puppet-server

2、使用源码安装
先安装facter
factor:The only prerequisite for Puppet that doesn’t come as part of the Ruby standard library is facter, which is also developed by Puppet Labs.
  

复制代码 代码如下:
  wget http://downloads.puppetlabs.com/facter/facter-1.6.0.tar.gz
    tar -xvzf facter-1.6.0.tar.gz
    cd facter-1.6.0
    ruby install.rb

安装puppet
  

复制代码 代码如下:
  wget http://downloads.puppetlabs.com/puppet/puppet-2.7.3.tar.gz
    tar -xvzf puppet-2.7.3.tar.gz
    cd puppet-2.7.3
    ruby install.rb

服务器端:
  

复制代码 代码如下:
  useradd puppet
    cd puppet-2.7.3
    cp conf/redhat/* /etc/puppet/
    rm /etc/puppet/client.*
    mv /etc/puppet/server.init /etc/init.d/puppetmasterd
    mv /etc/puppet/server.sysconfig /etc/sysconfig/puppetmaster
    chmod 755 /etc/init.d/puppetmasterd
    service puppetmasterd restart

打开相应的iptables端口8140

客户端:
 

复制代码 代码如下:
    useradd puppet
    cd puppet-2.7.3
    rm /etc/puppet/server.*
    mv conf/redhat/puppet.conf /etc/puppet/
    mv conf/redhat/client.init /etc/init.d/puppet
    chmod 755 /etc/init.d/puppet

客户端指定运行时的参数:
vi /etc/puppet/puppet.conf
    添加相应配置
    [main]
    server=master.puppet.com
    runinterval=600 (每10分钟运行一次)
这里我们仅需要写这两个参数,确保client可以正确连接到server。以后我们会将这个配置文件由puppet来统一管理,只需要在master上修改,即可同步到所有的client上,而且修改后自动重启client的puppet服务,以使修改生效。

参考:关于可选的参数
http://docs.puppetlabs.com/references/stable/configuration.html#certname
查看当前值:
    puppet --genconfig

启动:
服务器端:
    service puppetmasterd start

客户端:
    service puppet start

客户端的运行报告在服务器端:/var/lib/puppet/reports/
每次运行会生产一个报告,报告文件名为:/var/lib/puppet/reports/hy18.uniqlick.com/201108020948.yaml
一个以运行时的utc时间为文件名的文件,即当前时间-8小时
这个报告很难看懂,后面将部署puppet dashboard,以图形的方式显示这些报告,方便查看。

三、关于DNS及hosts
对于基本的使用,仅仅需要为服务器端配置一个dns,使客户端可以解析服务器端的ip就可以了。
如果需要通过服务器端推送,需要使用puppet kick命令。这就需要服务器端能够解析所有的客户端。将客户端加到hosts文件里即可。

客户端连接服务器时使用的是自己的fqdn,执行facter,检查输出中的fqdn是否是你期望的,如果不是,修改hostname。编辑/etc/sysconfig/network并执行hostname 主机名,立即生效。

四、审批证书
1、客户端申请证书
首先检查是否可以连接到服务器端的8140端口。
    telnet master.puppet.com 8140
端口通畅,ok,执行下面的命令:
    puppetd --server master.puppet.com --test --waitforcert 60

执行后,不要关闭终端。
2、服务器端审批证书
查看待审证书
    puppetca --list

批准证书
    puppetca -s client1.puppet.com

注意:生成证书时,主机名会写入证书,所以证书生成后,如果更改主机名,证书就失效了。
解决办法:其实申请证书的过程就是服务器端生成证书,并发送到客户端的过程。
删除掉服务器端的客户机证书 rm -f /var/lib/puppet/ssl/ca/signed/主机名.pem
或者:puppetca --clean xx.xx.xxx
客户端删除掉ssl目录/var/lib/puppet/ssl
重新申请证书即可。

五、测试
1、服务器端:
vi /etc/puppet/manifests/site.pp
该文件定义puppet相关的变量和默认配置,是puppet执行的第一个文件
 

复制代码 代码如下:
    node default {
            file{"/tmp/temp1.txt":content =>"test puppet,ok";}
    }

default,默认节点,除了指定的节点,剩余的节点都会执行。
例如:
   

复制代码 代码如下:
node default {
            file{"/tmp/temp1.txt":content =>"test puppet,ok";}
    }
    node client1.puppet.com {
            file{"/tmp/2.txt":content =>"test2,ok";}
    }

这样的配置文件,client1.puppet.com不会执行default里面的内容。
即:一个client只能存在于一个node中。
可以通过在node default中使用if 判断来选择生效的node
   

复制代码 代码如下:
$hostgroup = [ '1.1.1.1','2.1.1.1',]
    node default {
    if ( $ipaddress in $hostgroup){
    include cacti::iostat
    }

2、客户端:
    puppetd --server master.puppet.com --test
正确的话,你将会看到创建的文件。

六、服务器端控制客户端立即执行
使用puppet kick

1、服务器端需要能解析client的IP
解决:将客户端的IP和fqdn写到服务器端的hosts里即可。或者使用内网的DNS。
2、服务器端:
保证/etc/puppet/namespaceauth.conf存在,文件可以为空。
这其实是一个bug,可以通过puppet kick -h看到
Additionally, due to a known bug, you must make sure a
namespaceauth.conf file exists in puppet agent's $confdir. This file
will not be consulted, and may be left empty.

3、客户端
puppet.conf中添加下面的配置
    [agent]
        listen = true

将监听8139端口,确保iptables打开相应的端口。
否则:Host client1.puppet.com failed: Connection refused - connect(2)

在path /之前加上 path /run,如下
    path /run
    method save
    allow master.puppet.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

否则:Error 403 on SERVER: Forbidden request

测试:
puppet kick -d --host client1.puppet.com
Triggering client1.puppet.com
Getting status
status is success
client1.puppet.com finished with exit code 0
Finished