Puppet安装配置及使用

Puppet

Table of Contents

  • 1. Puppet介绍


    • 1.1. Puppet工作流程

  • 2. 环境配置


    • 2.1. 注意事项

    • 2.2. 基本配置

    • 2.3. epel的yum源配置

  • 3. 管理端节点配置


    • 3.2.1. 开启8140端口

    • 3.2.2. 设置puppetmaster开机自启

    • 3.1. 以yum方式安装puppet-server

    • 3.2. Master配置


  • 4. 客户端节点配置


    • 4.1. 以yum包方式安装puppet

    • 4.2. 设置puppet服务开机自启

    • 4.3. 客户端连接测试

    • 4.4. 证书申请

    • 4.5. 重新生成证书

    • 4.6. 配置客户端自动同步

  • 5. 客户端与管理端常用命令介绍


    • 5.1. puppetrun的使用

    • 5.2. 客户端启动方式

    • 5.3. 服务端命令

    • 5.4. 查看配置项

  • 6. Puppet资源管理

  • 7. 参考资料

1 Puppet介绍

1.1 Puppet工作流程

1.Puppet客户端请求节点配置Puppet master进行SSL认证
2.将信息日志写入cactlog
3.Puppet解析器解释代码 (包括错误检查以及语法检查),并写入日志
4.事务处理(例如是否有权限,是否要同步文件,是否有collection资源)
5.客户端发送日志
6.Ssl认证授权结束,整个流程结束

2 环境配置

2.1 注意事项

安装过程中需要注意以下几点:

1. 管理端与客户端的时间要同步
2. 各主机名使用dns解析最好,若无使用hosts文件设置指定也行

2.2 基本配置

在Master端与Node端需要满足的条件:

  1. 操作系统及IP地址

os:              rhel5u8 32bit
server:          192.168.18.87
client:          192.168.18.187
  1. /etc/hosts文件

[[email protected] ~]# cat /etc/hosts
192.168.18.87 puppet.clear.com puppet
192.168.18.187 web1.clear.com web1

[[email protected] ~]# cat /etc/hosts
192.168.18.87     puppet.clear.com puppet
192.168.18.187   web1.clear.com web1
  1. /etc/sysconfig/network文件

[[email protected] ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=puppet.clear.com

[[email protected] ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=web1.clear.com

2.3 epel的yum源配置

下载epel的rpm包,在管理端做如下操作。完成后在客户端也做同样的操作,这里略过。

[root@puppet ~]# wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
[root@puppet ~]# rpm -ivh epel-release-5-4.noarch.rpm
[root@puppet ~]# yum -y install ruby ruby-rdoc

3 管理端节点配置

3.1 以yum方式安装puppet-server

配置好epel源之后,接下来就可以使用yum来方便地安装软件了,管理端需要安装的包如下:

# yum -y install puppet puppent-server facter

3.2 Master配置

3.2.1 开启8140端口

# iptables -A INPUT -p tcp -m state --state NEW --dport 8140 -j ACCEPT

3.2.2 设置puppetmaster开机自启

4 客户端节点配置

4.1 以yum包方式安装puppet

在客户端上只需要安装puppet包即可,操作如下:

[root@web1 ~]# yum -y install puppet

4.2 设置puppet服务开机自启

[root@web1 ~]# service puppet start[root@web1 ~]# chkconfig �Clevel 345 puppet on

4.3 客户端连接测试

接下来测试,操作如下:

[root@web1 ~]# puppetd --test --server puppet.clear.com
Exiting; no certificate found and waitforcert is disabled

info: Caching catalog for web1.clear.com
info: Applying configuration version '1395971071'
notice: Finished catalog run in 0.03 seconds
这里提示认证未找到,因为这是第一次使用,管理端未给客户端签名而已。

这时,到管理端来,查看有没有需要签名的客户端,

[root@puppet ~]# puppetca --list
  "web1.clear.com" (23:99:E1:61:ED:87:F0:19:33:D3:57:54:E1:31:B5:9D)

接下来我们为web1来签名认证,

[root@puppet ~]# puppetca -s web1.clear.com   # 为单个节点进行认证
notice: Signed certificate request for web1.clear.com
notice: Removing file Puppet::SSL::CertificateRequest web1.clear.com at '/var/lib/puppet/ssl/ca/requests/web1.clear.com.pem'

我们可以再次的查看有没有需要签名的客户端,
[root@puppet ~]# puppetca --list   # 此时已经没有输出了

如果有多台客户端来申请签名认证,可以使用下面命令来完成所有认证,
[root@puppet ~]# puppetca -s -a

4.4 证书申请

puppet客户端与服务器是通过SSL隧道通信的,客户端安装完成后,需要向服务器端申请证书,

  1. 首次连接服务器端会发起证书申请,在客户端执行如下命令

    [root@web1 ~]# puppet agent --server puppet.clear.com


  2. 在服务器端可以用puppet cert �Clist命令查看到申请证书的客户端主机名

  3. puppet cert -s web1.clear.com为客户端颁发证书

  4. 验证puppet配置

    在服务端写个简单的例子测试一下,用来在客户端的/tmp目录下创建一个
    testfile文件


4.5 重新生成证书

很多时候由于更换主机名,我们需要重新配置认证。

首先在客户端删除/var/lib/puppet/ssl/文件夹,

[root@web1 ~]# rm -rf /var/lib/puppet/ssl/*

然后在服务器端删除客户端的证书,

[root@puppet ~]# puppetca --clean web1.clear.com

最后在客户端执行,

[root@web1 ~]# puppetd --test --server puppet.clear.com

即可重新生成证书。

4.6 配置客户端自动同步

在客户端安装完puppet并且认证后,我们可以看到效果,怎样让它自动与服务器同步呢?默认多少分钟跟服务器同步呢?皆可以修改配置文件来搞定。以下看操作,

  1. 配置puppet相关参数和同步时间

去掉配置文件里的4行注释,根据自己的环境修改,修改好后如下:
[root@web1 ~]# cat /etc/sysconfig/puppet
PUPPET_SERVER=puppet.clear.com    # 服务器mater的host
PUPPET_PORT=8140                       # 访问服务器的8140端口
PUPPET_LOG=/var/log/puppet/puppet.log  # 本地日志
PUPPET_EXTRA_OPTS=--waitforcert=500

[root@web1 ~]# service puppet restart
  1. 修改默认同步时间

客户端会半小时跟服务器同步一次,我们可以根据需要修改此值的大小。
[root@web1 ~]# vim /etc/puppet/puppet.conf
runinterval = 60   # 代表60秒跟服务器同步一次

[root@web1 ~]# service puppet restart

5 客户端与管理端常用命令介绍

5.1 puppetrun的使用

puppetrun用于连接客户端,强制运行本地配置文件,在默认安装puppet后puppetrun是不能使用,需要配置,如下:

客户端:

/etc/puppet/puppet.conf下添加:
[agent]
listen = true

/etc/puppet/auth.conf在path /字样上面添加
path /run
method save
allow *
path /
auth any

/etc/puppet/namespaceauth.conf下
[puppetrunner]
allow *

然后重启客户端,

[root@web1 ~]# service puppet restart

5.2 客户端启动方式

5.3 服务端命令

5.4 查看配置项

6 Puppet资源管理

当我们配置完毕puppet相关信息时,我们需要更近一步来部署puppet真正应用,puppet常用资源主要有以下几个,

file:    主要负责管理文件
package: 软件包的安装管理
service: 系统服务的管理
cron:    配置自动任务计划
exec:    远程执行命令
  1. File资源

    file {
    "/tmp/test.txt":
    content => "hello\n";
    }
    意思是在/tmp新建一个test.txt文件,文件内容为hello。


  2. Package

    package {
    ["screen","ntp"]:
    ensure => installed;
    
    "pppoe":
    ensure => "absent";
    意思是yum install screen ntp服务,并且卸载pppoe安装包。
    }


  3. Service

    service {
    "sshd":
    ensure => running;
    "nfs":
    ensure => stopped;
    }
    意思是定义启动sshd服务,停止nfs服务。


  4. Cron

    cron {
    "ntpdate":
    command => "/usr/sbin/ntpdate pool.ntp.org",
    user => root,
    hour => 0,
    minute => 0,
    }
    意思是在客户端写入一个计划任务:0 0 * * * /usr/sbin/ntpdate pool.ntp.org自动同步时间。


  5. 向客户端推送本地脚本

    首先修改/etc/puppet/fileserver.conf文件,添加如下三行:
    [files]
    path /etc/puppet/files
    allow *
    
    然后复制所需的脚本到/etc/puppet/files目录,没有则创建。
    
    file {
    "/tmp/nginx_install.sh":
    source => "puppet://puppet.clear.com/files/nginx_install.sh",
    group => root,
    owner => root,
    mode => "755",
    }
    意思是把/etc/puppet/files/nginx_install.sh这个脚本推送到客户端的/tmp下。


  6. Exec远程执行脚本

    如第五步,我们把nginx_install.sh推送过去后,这时候我们就可以执行如下:
    exec {
    "/tmp/nginx_install.sh":
    cwd => "/tmp",
    user => root,
    path => ["/usr/bin","/usr/sbin","/bin","/bin/sh"],
    }


  7. 执行命令

    更新sysctl.conf
    file {
    "/etc/sysctl.conf":
    source => "puppet://puppet.clear.com/files/sysctl.conf",
    owner => "root";
    group => "root",
    mode => 644,
    }
    
    exec {
    "sysctl refresh kernel config":
    path => ["/usr/bin","/usr/sbin","/bin","/sbin"],
    command => "/sbin/sysctl -p",
    subscribe => File["/etc/sysctl.conf"],
    refreshonly => true


7 参考资料

1. http://wgkgood.blog.51cto.com/1192594/869694
2. puppetmanual.pdf

Date: 2012-12-03

Author: LavenLiu

Created: 2014-03-28 周五 15:30

Emacs 24.3.1 (Org mode 8.2.5c)

Validate

你可能感兴趣的:(自动化运维,puppet安装)