您的位置:首页 > 运维架构

运维自动化之puppet

2012-07-06 13:30 627 查看
Server IP:192.168.72.10/24 hostname:puppet-server

Client IP:192.168.72.111/24 hostname:puppet-client-01

Clinet IP:192.168.72.168/24 hostname:puppet-client-02

关闭selinux

1、配置服务器和客户端的IP地址和主机名,确保可以相互ping通主机名

2、服务器和客户端安装所需环境

[root@puppet]# yum install ruby* -y

注:如果需要精细安装,只需如下4个包

[root@puppet]# yum install ruby-libs ruby ruby-irb ruby-rdoc -y

3、同步服务器和客户端的时间

[root@puppet]# ntpdate time.nist.gov

注:如果没有ntpdate可以yum安装

[root@puppet]# yum install ntpdate -y

4、服务器和客户端安装facter和puppet主程序

5、下载安装facter

[root@puppet]# wget http://downloads.puppetlabs.com/facter/facter-latest.tgz

[root@puppet]# tar -zxvf facter-latest.tgz

[root@puppet facter-1.6.6]# cd facter-1.6.6

[root@puppet facter-1.6.6]# ruby install.rb

6、下载安装puppet

[root@puppet]wget http://puppetlabs.com/downloads/puppet/puppet-2.6.14.tar.gz

[root@puppet]# tar -zxvf puppet-2.6.14.tar.gz

[root@puppet srv]# cd puppet-2.6.14

[root@puppet puppet-2.6.14]# ruby install.rb

7、修改hosts文件

server端

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 puppet-server

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.72.111 puppet-client-01

client端

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 puppet-client-01

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.72.10 puppet-server

8、服务器server端配置

copy源文件

[root@puppet-server puppet-2.6.14]# mkdir /etc/puppet

[root@puppet-server puppet-2.6.14]# cp conf/auth.conf /etc/puppet/

[root@puppet-server puppet-2.6.14]# cp conf/redhat/fileserver.conf /etc/puppet/

[root@puppet-server puppet-2.6.14]# cp conf/redhat/puppet.conf /etc/puppet/

[root@puppet-server puppet-2.6.14]# cp conf/redhat/server.init /etc/init.d/puppetmaster

[root@puppet-server puppet-2.6.14]# chmod +x /etc/init.d/puppetmaster

[root@puppet-server puppet-2.6.14]# chkconfig --add puppetmaster

[root@puppet-server puppet-2.6.14]# chkconfig puppetmaster on

[root@puppet-server puppet-2.6.14]# chkconfig --list puppetmaster

puppetmaster 0:off 1:off 2:on 3:on 4:on 5:on 6:off

[root@puppet-server puppet-2.6.14]# mkdir -p /etc/puppet/manifests

创建puppet帐号

[root@puppet-server puppet-2.6.14]# puppetmasterd --mkusers(目的是在/var/lib/puppet下创建一些目录)

启动服务

[root@puppet-server puppet-2.6.14]# /etc/init.d/puppetmaster restart

Stopping puppetmaster: [ OK ]

Starting puppetmaster: [ OK ]

9、客户client端配置

[root@puppet-client-01 puppet-2.6.14]# mkdir /etc/puppet/

[root@puppet-client-01 puppet-2.6.14]# cp conf/auth.conf /etc/puppet/

[root@puppet-client-01 puppet-2.6.14]# cp conf/namespaceauth.conf /etc/puppet/

[root@puppet-client-01 puppet-2.6.14]# cp conf/redhat/puppet.conf /etc/puppet/

[root@puppet-client-01 puppet-2.6.14]# cp conf/redhat/client.init /etc/init.d/puppet

[root@puppet-client-01 puppet-2.6.14]# chmod +x /etc/init.d/puppet

[root@puppet-client-01 puppet-2.6.14]# chkconfig --add puppet

[root@puppet-client-01 puppet-2.6.14]# chkconfig puppet on

[root@puppet-client-01 puppet-2.6.14]# vim /etc/puppet/namespaceauth.conf

......

[fileserver]

allow *

[puppetmaster]

allow *

[puppetrunner]

allow *

[puppetbucket]

allow *

[puppetreports]

allow *

[resource]

allow *

......

创建puppet帐号和rra目录

[root@puppet-client-01 puppet-2.6.14]# puppetd --mkusers

注:如果报错,可以手动创建用户。

重启服务

[root@puppet-client-01 puppet]# /etc/init.d/puppet restart

10、服务server端防火墙配置

[root@puppet-server ~]# iptables -A INPUT -p tcp --dport 8140 -j ACCEPT

[root@puppet-server ~]# /etc/init.d/iptables save

11、客户client端防火墙配置

[root@puppet-client-01 ~]# iptables -A INPUT -p tcp --dport 8139 -j ACCEPT

[root@puppet-client-01 ~]# /etc/init.d/iptables save

12、服务端修改配置文件,设置允许的地址

[root@puppet-server ~]# vim /etc/puppet/fileserver.conf

......

[files]

path /tmp/srv/

allow 192.168.72.0/24

......

手动认证

1、客户端发送请求

[root@puppet-client-01 ~]# puppetd --test --server puppet-server

2、服务器端查看

[root@puppet-server ~]# puppetca -l

puppet-client-01 (4B:58:77:C0:52:22:DD:1E:A4:A8:B8:5E:4F:9C:71:25)

3、服务器签名认证

[root@puppet-server ~]# puppetca -s -a(对所有客户端认证)

notice: Signed certificate request for puppet-client-01

notice: Removing file Puppet::SSL::CertificateRequest puppet-client-01 at '/var/lib/puppet/ssl/ca/requests/puppet-client-01.pem'

注:[root@puppet-server ~]# puppetca -s $hostname(对某个主机认证)

自动认证

1、服务端

[root@puppet-server ~]# vim /etc/puppet/puppet.conf

......

[main]

autosign = true

......

2、客户端

[root@puppet-client-01 puppet-2.6.14]# vim /etc/puppet/puppet.conf

[agent]

......

listen = true #打开客户端的监听服务端的puppetrun命令

server = puppet-server #指定服务端

puppetport = 8139 #客户端的监听端口,默认是8139,可不加

runinterval = 60 #同步文件时间,默认1800s

......

3、[root@puppet-client-01 puppet-2.6.14]#puppetd

#客户端运行命令puppetd,会放在后台运行,从此客户端会每隔60s同步一次服务器里的site.pp配置

功能测试:

1、puppet运维自动化之组管理

......

group { "ceshi":

gid => 800, #该组的 gid,必须是数字,如果不指定,将自动分配 ,不同的系统自动分配的算法不一样,不推荐使用自动分配gid

allowdupe => false, #是否允许两个相同的gid, 这个参数不能在freebsd上面使用, 可以设置的值是false , true

ensure => present, #创建或者删除组,设置absent就删除该组,设置 present就创建该组

members => [ ceshi1,ceshi2,ceshi3 ] #该组的成员

}

......

2、puppet运维自动化之文件分发

通过puppet服务器向客户端分发文件

[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp

......

file

{"/tmp/srv/darren": #资源的标题

name => "/tmp/srv/darren",#name等于标题,所以可以省略

source => "puppet://puppet-server/files/darren",

owner =>root, #客户端下载后的文件属主

group =>root, #客户端下载后的文件属组

mode =>777 #客户端下载后的文件权限

}

......

file

{"/tmp/srv/darren":

source => "puppet://puppet-server/files/darren",

}

......

file {

"/tmp/srv/ceshi.txt":

content => file("/tmp/srv/ceshi.txt");

}

......

3、puppet运维自动化之crontab文件管理

......

cron { "reboot":

command => "/sbin/init 6",

user =>root,

minute =>35,

hour =>13

}

#除了name和command这两个参数以外,其他都是可选项

#name该crontab的名字,用于区分不同的crontab

#command是crontab要执行的命令,环境变量按照系统本地规则进行管理,推荐使用绝对路径

#ensure指定该资源是否启用,可设置成true或false

#environment在crontab环境里指定环境变量,例如PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

#user把crontab任务加入到默认的crontab列表,默认是运行puppet的用户

#minute运行crontab的分钟,可设置0-59

#hour运行crontab的小时,可设置0-23

#monthday运行crontab的每月中的某一天,可设置1-31

#month运行crontab的月份,1-12

#weekday运行crontab的星期数,0-7

......

4、puppet运维自动化之分类管理客户端

......

node puppet-client-01 {

file {

"/tmp/srv/192.168.72.0":

source => "puppet://puppet-server/files/192.168.72.0",

owner =>root,

group =>root,

mode =>777,

ensure =>present

}

}

......

#node,节点定义,当一个节点(puppet客户端)连接到puppet服务器端,puppet解析器会查找这个节点的node代码片断,然后利用这个代码片断来生成该客户端的配置代码。

5、puppet运维自动化之yum安装软件包,以httpd模拟测试

......

package { "httpd": ensure => "installed" }

#ensure设置软件包得状态:installd(present)表示要安装该软件,absent表示卸载该软件,latest表示安装软件包的最新版本。

......

6、puppet运维自动化之网络下载安装rpm包

......

package { "epel":

ensure => present,

provider => rpm,

source => "http://mirrors.sohu.com/fedora-epel//6/x86_64/epel-release-6-5.noarch.rpm"

}

......

7、puppet运维自动化之安装多个软件包

......

Package { ensure => "installed" } #注意:第一个P是大写,这就意味着对软件包管理设置了一个全局的的参数。

package { "lrzsz": }

package { "telnet": }

package { "sudo": }

......

8、puppet运维自动化之服务管理

......

service {

"nfs":

ensure => running;

"iptables":

ensure => stopped;

"puppet":

enable => true;

"httpd":

enable => false;

}

......

参数

#binary :运行服务的命令的路径, 只用于不支持init的操作系统, 如果没有指定启动脚本,就用这个命令来启动服务。

#enable :服务是否随开机而启动,可设置的值为true,false,需要provider支持enableable。

#ensure: 服务是否运行,可设置的值为running,stopped,也可以用true,false。

#hasrestart:指出管理脚本是否支持restart参数,如果不支持,就用stop和start实现restart效果。可以设置的值是true 或 false。

#hasstatus :服务的init脚本是否支持status参数,可设置的值为ture,false。

#name: 该资源的namevar, 服务的名字,通常就是在/etc/init.d/目录下的名字。

#path: 指定查找init 脚本的路径。

#pattern :搜索进程表匹配字符串,用于不支持init的脚本,当要停止一个服务的时候,通过查看进程运行列表来判断。

#provider :The specific backend for provider to use,可设置的值有base, daemontools,init等。

#restart :重启服务

#start: 开启服务

#status :服务运行状态

#stop: 停止服务

9、puppet运维自动化之主机管理

......

#客户端192.168.72.128添加主机别名name01和name02

host { "name":

ip => '192.168.72.128',

host_aliases => ["name01", "name02" ],

ensure =>'present'

}

......

#host:安装和管理主机实体。对大部分系统来说,这些实体就在/etc/hosts文件中

#ip:主机的IP地址

#host_aliases:主机别名,可以有多个,多个值需要指定为一个数组。

#ensure:确定该主机是否启用,有效值present和absent

10、puppet运维自动化之执行外部命令

......

#客户端解压puppet软件包

exec { "tar xf /tmp/srv/puppet-2.6.14.tar.gz":

cwd => "/tmp/srv/",

creates => "/tmp/srv/puppet",

path => ["/bin","/usr/bin","/usr/sbin"]

}

......

#cwd:指定命令执行的目录。如果目录不存在,则命令执行失败

#creates:指定命令所生成的文件。如果提供了这个参数,那么命令只会在所指定的文件不存在的情况的被执行

#path:命令执行的搜索路径。如果path没有被定义,命令需要使用绝对路径。路径可以以数组或以冒号分隔的形式来定义。

11、puppet运维自动化之目标客户端执行脚本(前提是客户端已经存在该脚本)

......

#客户端执行hello.sh脚本

exec {

"/tmp/srv/hello.sh":

cwd =>"/tmp/srv",

timeout =>120, #脚本的执行时间,防止死循环,单位为秒

user =>root,

path =>["/sbin","/usr/local/sbin","/usr/local/bin","/usr/bin","/bin"],

}

......

错误解决参考:

http://k.ifeng.com/149804/4112878

http://www.mysqlops.com/2011/11/08/puppet-errors.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  puppet 运维自动化