学习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: ...
随机推荐
- 你的程序员女孩「GitHub 热点速览 v.22.09」
本周最火的项目要数上周推荐的开源项目 How to Cook,火到一周涨了 18k+ star,但网友对它的定量烹饪方法褒贬不一.在本人看来,烹饪本就是一门"玄学",萝卜青菜各有所 ...
- 【C# 线程】线程局部存储(TLS) 实战部分 ThreadStatic|LocalDataStoreSlot|ThreadLocal<T>
往袋子里面装苹果 错误案例示范 关于C#多线程的文章,大部分都在讨论线程的起停或者是多线程同步问题.多线程同步就是在不同线程中访问同一个变量(一般是线程工作函数外部的变量),众所周知在不使用线程同步的 ...
- Collection接口和Map接口的 size 方法和 isEmpty方法
一.Collection接口的 size 方法和 isEmpty方法 int size(); 返回列表中元素的数目,如果这个列表包含超过Integer.MAX_VALUE,则返回Integer.MAX ...
- linux中rlwrap安装
转至:https://www.cnblogs.com/hw-1015/p/6601294.html 在linux上使用sqlplus命令的时候,上下键.空格键.删除键都不能使用,非常麻烦.安装了rlw ...
- android --一个简单的登录界面
MainActivity.java package com.example.empty_project; import androidx.appcompat.app.AppCompatActivity ...
- 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入
前言:在C/S架构上,WPF无疑已经是"桌面一霸"了.在.NET生态环境中,很多小伙伴还在使用Winform开发C/S架构的桌面应用.但是WPF也有很多年的历史了,并且基于MVVM ...
- AHUACM寒假集训VI(网络流)
luoguP2472.蜥蜴 传送门 题目大意: R × C ( 1 ≤ R , C ≤ 20 ) R\times C(1\leq R,C\leq20) R×C(1≤R,C≤20)的网格上,每个格子有一 ...
- JavaScript与C#互通的DES加解密算法的实现(转)
本文提供了一个能使JavaScript与C#互通的DES加解密算法的实现,在前台页面中用JavaScript版本的DES算法将数据加密之后,传到服务器端,在服务器端可用C#版本的DES解密算法将其解密 ...
- MySQL第一讲概论
MySQL 后期内容 Python 今日内容概要 MySQL的概念 数据库软件的安装及使用 配置文件介绍 数据库常用命令(库操作.表操作.记录操作) 今日内容详细 什么是数据库 1.单机游戏 本地保存 ...
- CoLAKE: 如何实现非结构性语言和结构性知识表征的同步训练
原创作者 | 疯狂的Max 论文CoLAKE: Contextualized Language and Knowledge Embedding 解读 01 背景与动机 随着预训练模型在NLP领域各大任 ...