学习Puppet(一)
puppet的入门
1.简介
puppet是一种采用C/S星状结构的linux、Unix平台的集中配置管理系统。
puppet拥有自己的语言,可管理配置文件、用户、cron任务、软件包、系统服务等。
puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源的依赖关系。
2.工作原理
puppet是一个或者多个maste,众多client,所有的客户端都定期(默认为30分钟)使用facter工具把客户端的基本配置信息,通过https的xmlrpc协议发送给服务器端,服务器端通过分析客户端主机名,找到该主机的配置代码,然后编译配置代码,把编译好的配置代码发回客户端,客户端执行代码完成配置。并且把代码执行情况反馈给puppet服务器端。
注释:xmlrpc是使用http协议作为传输协议的rpc机制,使用xml文本的方式传输命令和数据。
3、puppet的工作流程
1) 客户端puppetd调用facter,facter探测出主机的一些变量,例如主机名、内存大小、IP地址等。puppetd把这些信息通过ssl连接发送到服务器端;
2) 服务器端的puppetmaster检测客户端的主机名,然后找到manifest里面对应的node配置,并对该部分内容进行解析,facter送来的信息可以作为变量处理,node牵涉到的代码才能解析,其他没有涉及的代码不解析。解析分为几个阶段,语法检查,如果语法错误就报错。如果语法没错,就继续解析,解析的结果生成一个中间的“伪代码”,然后把伪代码发给客户端;
3) 客户端接收到“伪代码”,并且执行,客户端把执行结果发送给服务器;
4) 服务器把客户端的执行结果写入日志。
puppet工作过程中有两点值得注意:
第一, 为了保证安全,client和master之间是基于ssl和证书的,只有经过master证书认证的client可以与master通信;
第二, puppet会让系统保持在你所期望的某种状态并一直维持下去,如检测某个文件并保证其一直存在,保证ssh服务始终开启,如果文件被删除了或者ssh服务被关闭了,puppet下次执行时(默认30分钟),会重新创建该文件或者启动ssl服务。
4.安装部署
1)环境准备(master和agent)
# etc/init.d/iptables stop 关闭iptables
# /usr/sbin/ntpdate pool.ntp.org 时间同步,这块很重要
# setforce 0 闭安全策略
2)修改主机名和host解析
echo "10.0.0.60 master.test.com">>/etc/hosts
echo "10.0.0.61 agent.test.com">>/etc/hosts
3)安装facter和puppet
1、安装ruby环境
# yum install ruby –y
2、建立puppet组和用户
# groupadd puppet
# useradd -g puppet -s /bin/false -M puppet
3、下载并安装软件包
# wget http://downloads.puppetlabs.com/facter/facter-1.6.5.tar.gz
# wget http://downloads.puppetlabs.com/puppet/puppet-2.6.13.tar.gz
# tar xf facter-1.6.5.tar.gz
# cd facter-1.6.5
# ruby install.rb
# facter 检查,通常会收集主机的信息参数
# tar xf puppet-2.6.13.tar.gz
# cd puppet-2.6.13
# ruby install.rb
# cp conf/redhat/* /etc/puppet/
# cp conf/auth.conf /etc/puppet/
master端执行:
# mkdir /etc/puppet/manifests 创建配置文件目录
# cp /etc/puppet/server.init /etc/init.d/puppetmaster 拷贝启动文件到/etc/init.d下面
# chmod 755 /etc/init.d/puppetmaster 给权限
# /etc/init.d/puppetmaster start 启动服务
# lsof -i:8140 查看端口是否起来
授权(三步:请求-查询-授权):
1、agent端执行:目的向master请求证书
# puppetd --test --server master.test.com 向master请求证书
2、master端执行
# puppetca -l 查看谁在请求证书
# puppetca -s agetn.test.com 有查询结果再授权
# puppetca -a 给所有的请求都授权
#ll /var/lib/puppet/ssl/ca/signed/* 此目录下多了agent.test.com
3、agent端执行
# puppetd --test --server master.test.com
4、若出错,删除以下文件重新执行以上三步:
# rm -rf /var/lib/puppet/ssl/ 删除agent端的ssl
# rm -rf /var/lib/puppet/ssl/ca/signed/agent.test.com 删除master端的
4)资源
常用的资源主要有以下几个:
file: 文件管理
package: 软件包管理
service: 系统服务管理
cron: 配置定期任务
exec: 运行shell命令
5、举例说明其实际应用
5.1 文件配置
master端:服务器端保存着所有对客户端服务器的配置代码,在puppet里面叫做manifests,客户端下载manifest之后,可以根据manifest对服务器进行配置,例如软件包管理,用户管理和文件管理等等。
# cd /etc/puppet/manifests/
# cat site.pp 此文件在配置文件server.sysconfig中有定义
node default{
file {"/tmp/test.txt": 首行用冒号‘:’,之后的多行用逗号或分号分隔,最后一行可以没有
content=>"hello world\n";
}
}
意思:有一个默认节点(每一个agent叫做一个节点,在这个节点的/tmp下创建一个文件叫test.txt,里面的内容为hello world).
agent端去验证
# puppetd --test --server master.test.com 所有在master端配置以后,是在agent端来执行
# cat /tmp/test.txt
再写一个:往/tmp 目录发送一个脚本
# cat site.pp
node default{
file { "/tmp/clearlog.sh":
content=>"find /log/ -type f -size +10KB |xargs rm -f\n";
}
}
# puppetd --test --server master.test.com 此句可以写成脚本文件,注意/var/lib/puppet/state/lock
# cat /tmp/test.txt
5.2 创建文件并改变用户和授权
# cat site.pp
node default{
file {"/tmp/test.txt":
owner => "root", 属主
group => "puppet", 属组
mode => "0777", 权限
content => "test" 文件内容
}
}
agent端验证
# puppetd --test --server master.test.com
ll /tmp/test.txt 权限和属组已改变
# cat /tmp/test.txt 文本内容已改变
意思:当agent端执行的时,会到agent的/tmp下,创建文件test.txt并设置改文件所属用户为root,所属组为puppet,然后权限设置为 777
5.3 管理用户和组
group {“test”:
gid=>999,
ensure=>present, present表示创建,absent表示删除
}
user {“test”: 管理用户
name=>”test”,
uid=>999,
gid=>999,
managehome=>true, 创建家目录
groups=>[‘puppet’,’root’], 附加组
shell=>”/bin/bash”,
ensure=>present,
}
5.4 管理crontab任务
# cat site.pp
cron { "ntp time":
command => "/usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1",
minute => '*/10',
hour => ['2-4'],
monthday => [2,4],
ensure => present,
environment => "PATH=/bin:/usr/bin:/usr/sbin"
}
agent端来验证
# puppetd --test --server master.test.com
# crontab -l
5.5 同步master端/etc/puppet/system_conf/script下的文件到agent
a、修改master配置文件
# vim /etc/puppet/fileserver.conf
[ system_conf ]
path /etc/puppet/system_conf/
alow *
b、重启master
# /etc/init.d/puppetmaster restart
c、把需要同步的文件放到master 的/etc/puppet/system_conf/下
# mkdir /etc/puppet/system_conf
# cp /etc/resolv.conf /etc/puppet/system_conf/
# echo "#test" >>/etc/puppet/system_conf/resolv.conf
d、修改master端 site.pp
# vim /etc/puppet/manifests/site.pp
file { “/etc/resolv.conf”:
mode=>644, 系统文件一定注意文件权限
source =>
“puppet://master.test.com/system_conf/resolv.conf”
}
可以配置:
系统文件 hosts , resolv.conf ,i18n ,yum配置文件
脚本文件 /script/service_all_clear.sh
5.6 根据业务配置不同的机器
# vim /etc/puppet/manifests/site.pp
node default{ 默认客户端
file {"/tmp/test.txt":
owner => "root",
group => "puppet",
mode => "0777",
content => "test"
}
node ‘agent.test.com’ { 仅应用于agent客户端,可以用正则表达式
file {“/etc/resolv.conf”:
mode=>664,
source=>”puppet://master.test.com/system_conf/resolv.conf”,
}
}
6、重要配置文件
puppet.conf(主配置文件)、server.init(服务端启动脚本)、client.init(客户端启动脚本)、fileserver.conf(文件服务器)、server.sysconfig(服务端环境变量)、client.sysconfig(客户端环境变量)
master端启动脚本中涉及到文件/etc/sysconfig/puppetmaster,可将配置文件/etc/puppet/server.sysconfig复制为/etc/sysconfig/puppetmaster;
也可更改启动脚本(:%s#/etc/sysconfig/puppetmaster#/etc/puppet/server.sysconfig#g)。
学习Puppet(一)的更多相关文章
- 学习Puppet(三)
一.相关概念: 1. puppet基于C/S架构,使用ruby编写,在类UNIX平台上集中配置管理系统,它可以管理配置文件.用户.cron任务.软件包.系统服务. 2. puppet把系统实体称为 ...
- 学习Puppet(二)
puppet的工作流程 1.简介 puppet是一种采用C/S星状结构的linux.Unix平台的集中配置管理系统.puppet拥有自己的语言,可管理配置文件.用户.cron任务.软件包.系统服务等. ...
- Puppet学习笔记(CentOS6.3+Puppet3.01)
Puppet学习笔记(CentOS6.3+Puppet3.01) 技术 Add comments Oct262012 下了决心,好好学习puppet,周末专门去参加一个puppet的培训,难得朋友那 ...
- 第一篇puppet
1,什么是puppet puppet是一种Linux.Unix.windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件.用户.cron任务.软件包.系统服务等.puppe ...
- Advanced Puppet 系列的前言
什么是Advanced 在网络上,你能找到大量关于Puppet的安装,配置以及基础用法的文章和博客.你在通过一段时间的实战后,熟练掌握了Puppet基础用法,随着你管理的集群日益扩大,你的部署逻辑越来 ...
- 企业级自动化运维工具---puppet详解
本文收录在Linux运维企业架构实战系列 1.认识puppet 1.1 引入 puppet是什么,咱们先不用专业的名词解释它,咱们先描述一些工作场景,看明白这些工作场景,自然会知道puppet是什么. ...
- puppet(4)-类、模版语言、模块
puppet(4)-类.模版语言.模块 代码重用: class, module 类 类的简单说明 类是用于公共目的的一组资源,是命名的代码块,创建后可在puppet全局进行调用,类可以继承类是我们构建 ...
- 项目10.2-企业级自动化运维工具---puppet详解
1.认识puppet 1.1 引入 puppet是什么,咱们先不用专业的名词解释它,咱们先描述一些工作场景,看明白这些工作场景,自然会知道puppet是什么. (1)场景一: 管理员想要在100台服务 ...
- 1、puppet基础
Puppet:IT基础设施自动化管理工具 参考文章: https://yq.aliyun.com/articles/120228 http://www.51niux.com/?id=105 http: ...
随机推荐
- 【C#表达式树 四】Expression类上的函数列表
Expression相当于工厂,这个工厂有各式各样的模型(函数),用来生成各种零部件(节点类型),最后组装成表达式树. Expressions这个命名空间有各种个容器用陈放生产出来的零部件. Expr ...
- QT:MYSQL driver not loaded解决方法
0.参考(按对本人帮助从高到低排列) Qt5.14.1 如何编译和使用mysql和mariadb数据库驱动 (15条消息) QMYSQL driver not loaded 的原理和解决办法_m158 ...
- 爬虫之Beautfulsoup模块及新闻爬取操作
今日内容概要 IP代理池的概念及使用 requests其他方法补充 Beautifulsoup模块 避免你自己写正则表达式 利用该模块爬取京东的商品信息 今日内容详细 IP代理池的概念及使用 1.有很 ...
- LeetCode-020-有效的括号
有效的括号 题目描述:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺 ...
- 制作CocoaPods公有库和私有库
认识公有库和私有库 公有库:开源自己封装的库供别人使用,且往cocoaPods的官方Repo仓库(即CocoaPods Master Repo)中新增自己库的索引,该库索引是以*.podspec.js ...
- 【SQL】数据库运维实习工作经验
1.导入表格的时候回出现类型不对应的问题,T-SQL代码如下: USE zzzj2017 ALTER TABLE CJ ALTER COLUMN 付款时间 datetime 2.删除 USE s ...
- HBase海量数据高效入仓解决方案
一.方案背景 现阶段部分业务数据存储在HBase中,这部分数据体量较大,达到数十亿.大数据需要增量同步这部分业务数据到数据仓库中,进行离线分析,目前主要的同步方式是通过HBase的hive映射表来实现 ...
- 使用Logseq构建GTD系统
2021-05-08: 1.0版本初步完成,待完善已完成任务回顾 2021-05-10: 1.1版本完成,修改不重要不紧急为将来清单,且新增每周回顾 前言 最近在阅读<小强升职记>,感觉里 ...
- JDK 线程池
JDK 线程池 线程池参数 在JDK的4种线程池之前, 先介绍一下线程池的几个参数 corePoolSize 线程池的核心线程数量, maximumPoolSize 线程池的最大线程数量 keepAl ...
- kkFileView对接svn服务完成文件在线预览功能
1.需求: 之前在公司内部搭建了svn服务器,给部门存放文档.视频,做成了一个文档服务器来用,随着视频文件太大,每次下载太慢 需要把文件在线打开查看 2.解决: kkFileView https:// ...