puppet安装配置及应用实例

puppet简介

Puppet是一种Linux、Unix平台的集中配置管理系统,使用ruby语言,可管理配置文件、用户、cron任务、软件包、系统服务等。Puppet把这些系统实体称之为资源,Puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。

工作流程

1、客户端Puppetd调用facter,facter探测出主机的一些变量,例如主机名,内存大小,ip地址等。pupppetd 把这些信息通过ssl连接发送到服务器端;
2、服务器端的Puppetmaster 检测客户端的主机名,然后找到manifest里面对应的node配置, 并对该部分内容进行解析,facter送过来的信息可以作为变量处理,node牵涉到的代码才解析,其他没牵涉的代码不解析。解析分为几个阶段,语法检查,如果语法错误就报错。如果语法没错,就继续解析,解析的结果生成一个中间的“伪代码”,然后把伪代码发给客户端;
3、客户端接收到“伪代码”,并且执行,客户端把执行结果发送给服务器;
4、服务器端把客户端的执行结果写入日志。

安装puppet

环境

两台Redhat7.1虚拟机system1和system2,system1为master,system2为agent
防火墙firewalld关闭
selinux关闭

下载puppet源

[root@server1 html]# rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-10.noarch.rpm --nodeps
[root@server2 conf]# rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-10.noarch.rpm --nodeps

system1上安装puppet-server

[root@server1 html]# yum install puppet-server -y

启动puppet-server并设置开机启动

[root@server1 html]# systemctl start puppetmaster.service 
[root@server1 html]# systemctl enable puppetmaster.service 

在/etc/hosts中添加system1和system2域名解析,使system1,system2能够互相访问

[root@server1 html]# vim /etc/hosts
192.168.56.135  server1.example.com
192.168.56.137  server2.example.com
[root@server2 conf]# vim /etc/hosts
192.168.56.135  server1.example.com
192.168.56.129  server2.example.com

配置puppet-server

[root@server1 conf]# vim /etc/puppet/puppet.conf 
[master]
certname=server1.example.com

重启puppet-server

[root@server1 html]# systemctl restart puppetmaster.service 

配置puppet-agent
system2安装puppet

[root@server2 conf]# yum install puppet -y

配置puppet

[root@server2 conf]# vim /etc/puppet/puppet.conf 
[agent]
certname = server2.example.com
server = server1.example.com
report = true

启动puppet并设置开机启动

[root@server2 conf]# systemctl start puppet.service 
[root@server2 conf]# systemctl enable puppet
Created symlink from /etc/systemd/system/multi-user.target.wants/puppet.service to /usr/lib/systemd/system/puppet.service.

配置puppet

向server发送证书请求

[root@server2 conf]# puppet agent --server=server1.example.com --verbose --no-daemonize --debug

在server端查看client是否发生证书请求
[root@server1 manifests]# puppet cert --list

"server2.example.com" (SHA256) DF:E1:A4:CD:62:0C:32:40:49:51:3E:D3:DD:3D:87:FA:2F:BC:C2:E0:9D:2E:A7:2E:20:1D:75:E4:5D:37:07:17

给server2签发证书

[root@server1 manifests]# puppet cert --sign server2.example.com

这样就完成了server和agent认证

使用puppet实现自动化实例

1.文件属性管理

[root@server1 manifests]# vim site.pp 
node default { 
file{ 
"/root/install.log":
owner => "puppet",
group => "puppet",
mode => 777,
}
}

在server2上同步server1配置

[root@server2 usr]# puppet agent --server=server1.example.com --no-daemonize --verbose --onetime

install.log的属主和属组已经由root变为了puppet

[root@server2 ~]# ll install.log 
-rwxrwxrwx 1 puppet puppet 0 Oct 24 22:03 install.log

2.添加用户,用户组

node default {        
group{"student":       
gid=>5000,       
ensure=>present,       
}
       
user {"student":                      
uid=>5000,                      
gid=>5000,                      
home=>"/home/student",                      
shell=>"/bin/bash",                      
password=>"123456",           
      
}  
}

server2上同步server1配置

[root@server2 ~]# puppet agent --server=server1.example.com --no-daemonize --verbose --onetime

server2上已经创建了student用户和组并且id和uid为5000

[root@server2 ~]# id student
uid=5000(student) gid=5000(student) groups=5000(student)

3.安装,卸载软件

[root@server1 manifests]# vim site.pp 
package {
        ["gcc"]:
        ensure=>installed;
}

server2上同步system1配置

[root@server2 ~]# puppet agent --server=server1.example.com --no-daemonize --verbose --onetime

server2上安装上了gcc

[root@server2 ~]# rpm -qa |grep gcc
libgcc-4.8.5-39.el7.x86_64
gcc-4.8.5-39.el7.x86_64

4.启停服务

[root@server1 manifests]# vim site.pp 
service {
            "httpd":
             ensure => running;
            "firewalld":
             ensure => stopped;

server2上将httpd关闭并打开firewalld服务,同步server1配置

[root@server2 ~]# systemctl stop httpd
[root@server2 ~]# systemctl start firewalld.service

[root@server2 ~]# puppet agent --server=server1.example.com --no-daemonize --verbose --onetime

server2上httpd和firewalld状态已经改变

Notice: /Stage[main]/Main/Service[httpd]/ensure: ensure changed 'stopped' to 'running'
Notice: /Stage[main]/Main/Service[firewalld]/ensure: ensure changed 'running' to 'stopped'

6.配置定时任务

[root@server1 manifests]# vim site.pp 
cron { "cron":
        command => "sh /root/test.sh",
        user => "root",
        minute => "40",
        hour => "15"
}

server2同步server1配置

[root@server2 ~]# puppet agent --server=server1.example.com --no-daemonize --verbose --onetime

server2上定时任务已创建完成

Notice: /Stage[main]/Main/Cron[cron]/ensure: created
[root@server2 ~]# crontab -l
#Puppet Name: cron
40 15 * * * sh /root/test.sh

7.同步文件

[root@server1 manifests]# vim site.pp 
file
{       "/mnt/nginx-1.10.0.tar.gz":
         source => "puppet://puppet-server/files/nginx-1.10.0.tar.gz",
         owner => root,
             group => root,
             mode => 755
}
[root@server1 manifests]# vim /etc/puppet/fileserver.conf 
[files]
  path /mnt
  allow *

server2上同步server1配置

[root@server2 ~]# puppet agent --server=server1.example.com --no-daemonize --verbose --onetime

server2上已经从server1同步了nginx包

Notice: /Stage[main]/Main/File[/mnt/nginx-1.10.0.tar.gz]/ensure: defined content as '{md5}c184c873d2798c5ba92be95ed1209c02'
[root@server2 ~]# ll /mnt
-rwxr-xr-x 1 root  root 908954 Oct 27 21:56 nginx-1.10.0.tar.gz
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值