搭建puppet

puppet 是基于 rubby开发,C/S架构,支持多平台,可以管理配置文件、用户、cron任务、软件包、系统服务等。分为社区免费版和企业收费版,企业版支持图形化配置。

一、安装和配置



1、准备工作

准备两台机器,这两台机器都关闭 selinux,清空 iptables 规则并保存。

master:192.168.0.109

slaver:192.168.0.110

2、编辑 hosts 文件

两台都设置,若机器太多,可以通过搭建 DNS,则不用在每台机器上设置这个

# vim /etc/hosts


192.168.0.109  master.test.com

192.168.0.110  slaver.test.com

3、设置 hostname

在 master 上

[[email protected] ~]# vim /etc/sysconfig/network

HOSTNAME=master.test.com

在 slaver 上

[[email protected] ~]# vim /etc/sysconfig/network

HOSTNAME=slaver.test.com

4、安装 ntpdate

两台机器都要安装 ntpdate,并建立自动同步时间的任务计划

# yum install -y ntp

# crontab -e

*/10 * * * * ntpdate time.windows.com >/dev/null 2>&1      //每十分钟同步一次

5、服务端安装配置

1)安装puppet源

[[email protected] ~]# rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm

2)安装服务端程序

[[email protected] ~]# yum install -y puppet-server

3)启动服务

[[email protected] ~]# service puppetmaster start

4)开机启动

[[email protected] ~]# chkconfig puppetmaster on

6、客户端安装配置

1)安装puppet源

[[email protected] ~]# rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm

2)安装客户端程序

[[email protected] ~]# yum install -y puppet

3)编辑配置文件

[[email protected] ~]# vim /etc/puppet/puppet.conf          //在 [agent] 下添加


server = master.test.com

listen = true

runinterval = 10                     //主动更新,每隔10s

4)启动服务

[[email protected] ~]# service puppet start

5)开机启动

[[email protected] ~]# chkconfig puppet on

二、配置认证



1、服务端查看客户端证书列表

[[email protected] ~]# puppet cert list --all     //如果是已经签发的证书,会在本行最前面带一个"+"


"slaver.test.com" (SHA256) 6A:04:86:D0:CF:1E:CA:AF:77:98:FA:41:1D:06:00:3E:59:76:77:3D:5A:C0:12:11:30:8F:83:83:62:34:B1:39

+ "master.test.com" (SHA256) 5E:3B:12:B6:A1:30:20:9A:D1:2C:4D:74:2F:DC:6E:12:15:D0:F5:AD:82:BE:13:2F:D0:2C:C0:68:14:5D:F7:AD (alt names: "DNS:master.test.com", "DNS:puppet", "DNS:puppet.test.com")

2、客户端上生成 ssl 证书

[[email protected] ~]# puppet agent --test --server master.test.com

3、服务端签发指定客户端证书

[[email protected] ~]# puppet cert --sign slaver.test.com

4、服务端查看客户端证书列表

[[email protected] ~]# puppet cert list --all


+ "master.test.com" (SHA256) 5E:3B:12:B6:A1:30:20:9A:D1:2C:4D:74:2F:DC:6E:12:15:D0:F5:AD:82:BE:13:2F:D0:2C:C0:68:14:5D:F7:AD (alt names: "DNS:master.test.com", "DNS:puppet", "DNS:puppet.test.com")

+ "slaver.test.com" (SHA256) 63:F4:42:04:31:CD:A2:27:BA:4B:27:BB:76:B3:B8:EA:00:F6:A5:5F:90:60:A2:2F:8D:2C:6C:7B:A8:C2:60:21

注意:由上可知配置认证成功

三、测试证书



服务端编辑配置文件

[[email protected] ~]# vim /etc/puppet/manifests/site.pp


node default{

file{"/tmp/123.txt": content => "aaaaababbau";

}

}

注意:如果不配置该文件,则客户端不会同步任何数据。在客户端上等 10s 后会自动执行服务端上的任务,会在客户端的 /tmp/ 目录下生成一个“123.txt”文件,内容为"aaaaababbau"

四、配置自动签发证书



1、服务端删除客户端证书(可以用--all参数全部删除)

[[email protected] ~]# puppet cert clean slaver.test.com

2、客户端删除 ssl 相关文件

[[email protected] ~]# rm -rf /var/lib/puppet/ssl/*

3、服务端编辑配置文件

[[email protected] ~]# vim /etc/puppet/puppet.conf         //在 [main] 下添加

autosign = true

4、服务端创建自动签发的配置文件

[[email protected] ~]# vim /etc/puppet/autosign.conf

*.test.com

5、服务端重启 puppetmaster 服务

[[email protected] ~]# /etc/init.d/puppetmaster restart

6、客户端重启 puppet 服务

[ro[email protected] ~]# /etc/init.d/puppet restart

7、服务端查看签名

[[email protected] ~]# puppet cert list --all      //可以查看到 slaver.test.com 已经签名

注意:如果客户端不重启puppet服务,也可以在服务端通过命令来自动签名

[[email protected] ~]# puppet agent --test --server master.test.com

五、模块管理



模块是 puppet 的最大单元,模块里面有类,类下面有资源。同步文件、远程执行命令、任务计划等叫做资源,都是通过模块来实现的。下面我们来自定义一个模块:

1、服务端上操作

1)创建目录

[[email protected] ~]# mkdir /etc/puppet/modules/testm              //模块名称为 testm
[[email protected] ~]# cd /etc/puppet/modules/testm

[[email protected] testm]# mkdir {files,manifests,templates}

注意:一个模块下需要有这三个目录,files存一些文件或目录(可以为空),manifests存模块的主配置文件,templates存模板(可以留空)

2)创建需同步的文件

[[email protected] testm]# touch files/111.txt

[[email protected] testm]# echo "aaaaabbbbbbb" > files/111.txt

3)创建模块的初始入口文件(必须的文件)
[[email protected] testm]# vim manifests/init.pp                           //内容如下

class testm{
    file {"/tmp/222.txt":
        owner => "root",
        group => "root",
        mode => 0400,
        source => "puppet://$puppetserver/modules/testm/111.txt"
        }
}

注意:init.pp:包含一个与模块名称同名的类,同时声明其它子类。这里类名字也叫做 testm, 类下面定义了一个资源 file,文件名字叫做 /tmp/222.txt ;owner,group,mode 定义文件的属主、数组以及权限,source 定义这个文件从哪里获取。 $puppetserver 一会儿也要定义一下,这里指的是服务器上的 /etc/puppet/modules/testm/files/111.txt 文件。

[[email protected] testm]# puppet parser validate manifests/init.pp      //检查语法是否有错误

4)编辑主配置文件
[[email protected] testm]# vim /etc/puppet/manifests/site.pp        //删除之前做实验的,添加内容如下

$puppetserver = ‘master.test.com‘
node ‘slaver.test.com‘{
    include testm
}

注意:$puppetserver 定义服务端的主机名,node后面为客户端的主机名,这里面定义该客户端要加载的模块;testm 是类名。

2、客户端操作
1)执行命令:
[[email protected] tmp]# puppet agent --test --server=master.test.com

注意:如果客户端上启动了puppet服务,不用执行这命令,它也会自动同步,因为之前配置了自动认证。

2)查看文件同步成功

[[email protected] tmp]# cat /tmp/222.txt

由上可知,客户端的 /tmp/222.txt 文件与服务端的 /modules/testm/files/111.txt 文件内容一样,同步文件成功。

3、同步目录
上面的模块其实只是同步了一个文件而已,那么要想同步一个目录如何做?我们可以通过实现同步一个目录来做一个包发布系统。 比如在一台机器上编译安装好了apache,那么就可以通过这样的模块把这个apache目录整个分发到其他机器上。

1)准备Apache文档

[[email protected] testm]# cd files/

[[email protected] files]# mkdir apache2

[[email protected] files]# cd apache2

[[email protected] apache2]# mkdir {bin,lib,log}

[[email protected] apache2]# touch lib/config

[[email protected] apache2]# echo "12345abcde" > lib/config

注意:因为我这台机器没有安装Apache,所以手动新建一些测试文件;若安装了Apache,可直接拷贝文件到 files 目录下就行。

2)编辑模块配置文件

[[email protected] testm]# vim manifests/init.pp                           //添加类

class apache{
    file {"/usr/local/apache2":
        owner => "root",
        group => "root",
        source => "puppet://$puppetserver/modules/testm/apache2",
        recurse => true,
        purge => true
        }
}

注意:在管理文件夹时,只有当设置了 recurse 为 true 的情况下,purge 参数才会生效,表示递归的意思,没有这个不能同步目录;purge 参数可以保证当服务端删除某个文件,客户端可以跟着删除。这段逻辑的意思是要清空 /usr/local/apache2 目录下所有非 puppet 管理的文件,purge 参数通常的目的是清理管理目录以及防止被他人添加恶意文件。

[[email protected] testm]# puppet parser validate manifests/init.pp      //检查语法是否有错误

3)编辑主配置文件
[[email protected] testm]# vim /etc/puppet/manifests/site.pp               //声明 apache 类

$puppetserver = ‘master.test.com‘
node ‘slaver.test.com‘{

include testm

include apache

}

4)在客户端查看同步文件成功

4、远程执行命令

1)服务端编辑模块配置文件

[[email protected] ~]# vim /etc/puppet/modules/testm/manifests/init.pp    //在之前的apache类下添加资源

exec {"touchfile":
    unless => "test -f /tmp/444.txt",
    path => ["/bin", "/sbin", "/usr/bin", "/usr/sbin"],
    command => "/bin/touch /tmp/444.txt"
    }

注意:unless后面的命令作为一个条件,当条件成立时,不会执行下面的命令,如果想要条件成立时,执行下面的命令,用 onlyif。要注意的是,我们一定要给执行的这条命令加个条件,使用unless就可以,必须满足这个条件才能执行命令,否则这个命令会一直执行,不太妥当。

2)客户端查看执行效果

从上图可以看到命令执行成功,从日志文件上也可以看到执行成功的日志信息。

5、任务计划

1)服务端编辑模块配置文件

[[email protected] ~]# vim /etc/puppet/modules/testm/manifests/init.pp    //在之前的apache类下添加资源

cron {"tpp1":
    command => "/sbin/ntpdate time.windows.com",
    user => "root",

minute => "*/10",

monthday => "10-15",

# ensure => "absent"                                  //当增加了这行配置,则会把该cron删除掉
}

说明:分、时、日、月、周分别对应puppet里面的minute、hour、monthday、month、weekday

2)查看执行效果

从上图可以看到命令执行成功,从日志文件上也可以看到执行成功的日志信息。

6、其他

显示本地已安装的模块:puppet module list

搜索模块:puppet module search Module_Name

安装模块:puppet module install Module_Name

在线下载模块站点:https://forge.puppetlabs.com

package  http://puppet.wikidot.com/package

service http://puppet.wikidot.com/srv

exec http://puppet.wikidot.com/exec

cron http://puppet.wikidot.com/cron

扩展学习



Puppet运维自动化经验分享:http://kisspuppet.com

puppet:http://www.cnblogs.com/yuxc/category/431506.html

purge参数模块引发的惨案:http://www.cnblogs.com/yuxc/p/3909066.html

puppet文件管理:http://blog.chinaunix.net/uid-20639775-id-3314583.html

puppet自动化运维专题:http://os.51cto.com/art/201306/398025.htm

puppet模块和类: http://www.mamicode.com/info-detail-35011.html

时间: 2024-10-18 21:16:11

搭建puppet的相关文章

搭建puppet dashboard及遇到的问题

其实网上这样的文章已经很多了,这里随便摘出两篇,以供参考 1.Puppet Dashboard的安装与配置 2.Puppet学习笔记(CentOS6.3+Puppet3.01) 发这篇文章主要说下自己部署过程中踩过的坑: 1.在手动导入报告文件到mysql的时候报 undefined method `source_index' for Gem:Module 错误 原因是自己yum安装的rubygem版本是2.0以上,而2.0以后取消了source_index这个方法,这个puppet dashb

Ubuntu 16.04搭建puppet服务

Ubuntu 16.04搭建puppet服务: Puppet是一种配置管理工具,可帮助系统管理员自动执行服务器基础架构的配置和管理. 一.安装软件 master: curl -O https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb dpkg -i puppetlabs-release-pc1-xenial.deb apt-get update apt-get install puppetserver ln -s /opt/pu

搭建Puppet自动化部署环境

最近项目上线,自己在部署过程中发现很多问题,发现没有自动化部署工具简直就是纯体力活儿,费时又费力,干的事就是那几个,就不能"一键完成么"的想法油然而生,答案是肯定的,自动化的工具有很多,之所以安装Puppet,只是因为比起别的软件,这款软件原来有学习过,现在又重新拾起来,要把它用到生产环境中,让运维工作不再是体力活,而是实现,全自动部署,更新,这篇只是聊聊安装和配置Puppet,后续还会写具体在生产环境中如何实现自动化代码更新,软件部署等,敬请期待~ 环境介绍: puppetserve

用 Puppet 搭建易管理的服务器基础架构(1)

我通过伯乐在线翻译了一个Puppet简明教程,一共分为四部分,这是第一部分. 原文地址:http://blog.jobbole.com/87679/ 本文由 伯乐在线 - Wing 翻译,黄利民 校稿.未经许可,禁止转载!英文出处:Manue Kiessling.欢迎加入翻译组. 关于 Puppet Puppet 是一种 Linux.Unix.Windows 平台的集中配置管理系统,使用自有的 Puppet 描述语言,可管理配置文件.用户.cron任务.软件包.系统服务等.Puppet把这些系统

利用Puppet全自动部署tomcat

上一篇聊了puppet的安装部署方法,如果你还没有安装puppet,请点击下方链接查看具体安装方法: <搭建Puppet自动化部署环境> 这篇来看一下如何利用Puppet全自动部署tomcat,在Puppet中有很多资源,其中比较常用的包括: package    通过程序安装软件 service    启动或停止服务 file      文件传输 exec      执行命令 由于tomcat用源码包安装的居多,所有下面主要用到file和exec资源 一.打开文件传输功能 1.vim /et

Puppet实现自动化运维

Puppet实现自动化运维 一.案例分析 1.案例概述: 随着服务器数量的增多,系统管理员任务量也逐渐增加,这时就需要简洁的.强大的框架来完成系统管理任务为实现这一目的,我们将引入一批工具,这批工具是"可编程"的,系统管理员只需要为这批工具写上几行"代码",它便会自动完成所有的工作,这批工具就是运维自动化puppet 在一些大型互联网企业中,运维自动化管理着几百甚至上千台服务器,它可以针对多台服务器进行统一操作,例如部署统一软件.进行统一上线维护等,而且能够快速完成

Advacned Puppet: Puppet Master性能调优

本文是Advanced Puppet系列的第一篇:Puppet master性能调优,谈一谈如何优化和提高C/S架构下master端的性能. 故事情节往往惊人地类似:你是一名使用Puppet管理线上业务的DevOps工程师,随着公司的业务发展,你所管理的集群规模日益扩大.终于某一天,你突然发现执行一次puppet agent -vt的时间长得不可接受,多台agent并发运行时竟然会有节点运行失败,往日从来没有考虑过Puppet的性能居然成为了瓶颈……首先要恭喜你,因为Puppet Master端

使用puppet实现自动化运维

使用puppet实现自动化运维 服务概述: 1.什么是puppet puppet是一个为实现数据中心自动化管理而设计的配置管理软件.是一种Linux.Unix平台的集中配置管理系统,使用ruby语言,可管理配置文件.用户.cron任务.软件包.系统服务等.puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系. 2.Puppet的工作模式 Puppet是一个C/S架构的配置管理工具,在中央服务器上安装puppet-server软件包(被称作

自动化运维工具puppet的部署与应用

作为一名运维工程师,维护服务器的正常运行是最基本的职责,随着服务器的增多,任务量也随之增大,就需要寻找一款能够降低工作量的工具.那么今天就给大家介绍一批工具,这批工具是"可编程"的,只需要为这批工具写上几行代码,它便会自动完成所有的工作,这批工具就是运维自动化puppet(为什么说是一批工具,因为软件不止一个).Puppet可以针对多台服务器进行统一的操作,例如:软件分发,统一执行脚本,在服务器上写好脚本分发给客户机,客户机就会自动执行,减少了人力及误操作风险. 1. puppet工作