初学puppet
初学puppet
puppet是什么?
puppet是一个开源的软件自动化配置和部署工具,很多大型IT公司均在使用puppet对集群中的软件进行管理和部署。
Puppet简介
Puppet的目录是让管理员只集中于要管理的目标,而忽略实现的细节。Puppet即可以运行在单机上,也可以以C/S结构使用。在大规模使用puppet的情况下,通常使用C/S结构,在这种结构中puppet客户端只运行puppeclient,puppet服务端只运行puppemaster。
Puppet的工作原理
1) 客户端puppet调用fast探测出主机的一些变量,如主机名、内存大小、IP地址等。Puppet把这些信息使用SSL连接发送给服务器端
2) 服务器端的puppetmaster通过fast工具分析检测客户端的主机名,然后找到项目的主配置文件manifest里面对应的node配置,并对该部分内容进行解析,fast发送过来的信息可以作为变量处理,node牵扯到的代码才被解析,没牵扯到的不解析,解析分为语法检查,如果语法没错,继续解析,解析结果生成一个结果‘伪代码’,然后把‘伪代码’发给客户端
3) 客户端收到‘伪代码’并且执行,客户端把执行结果发给服务器
4) 服务器端把客户端的执行结果写入日志
Puppet工作过程中的注意事项
1) 为了保证安全,Client和Master之间是基于SSL和证书的,只有经Master证书认证的Client可以与Master通信
2) Puppet会让系统保持在人们所期望的某种状态并一直维持下去,如检测某个文件并保证其一直存在,保证SSH服务始终开启,如果文件被删除了或者ssh服务关闭了,puppet下次执行时(默认30分钟)会重新创建该文件或者启动SSH服务
Puppet服务端与客户端的安装
OS:Centos 6.5 x86_64
Puppet master:master.xiaohao.com(*.*.*.*)
Puppet agent:agent.xiaohao.com(*.*.*.*)
Puppet 要求所有机器有完整的域名,如果没有 DNS 服务器提供域名的话,可以在机器上设置主机名(注意:要先安装 Puppet之前设置主机名,因为安装 Puppet 时会把主机名写入证书,客户端和服务端通信需要这个证书),为了简化安装过程我配置了/etc/hosts。
[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
*.*.*.* master.xiaohao.com
*.*.*.* agent.xiaohao.com
修改设备主机名:
[root@master yum.repos.d]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master.xiaohao.com
关闭selinux内核防火墙:
#sed '/^SELINUX/s/=.*/=disabled/g' /etc/sysconfig/selinux -i
关闭iptables防火墙:
#iptables –F
#service iptables stop
#chkconfig iptables off
系统默认yum不使用,配置阿里的镜像yum源(百度搜索下“阿里镜像”)
本地系统是CentOS6.5,所以使用CentOS6的镜像yum源。
puppet server和两台应用服务器共三台机器依次执行下面的指令:
wget -O /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-6.repo
修改yum源文件的release版本:
#
cd /etc/yum.repos.d/
#
vim CentOS-Base.repo
注意:修改$releasever(版本)为6,共修改了20处,可以使用yum安装软件包了。
Puppet软件包安装:
Puppet server和agent客户端安装epel-release源
#
rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm
Puppet server端安装puppet-server:
#yum –y install puppet-server puppet
Puppet agent客户端安装puppet:
#yum -y install puppet
查看三台机器安装的puppet版本:
#puppet –V
3.8.7
疑问?--如果puppet server 是3.8,那么puppet agent是 2.6能正常运行吗?
注释:
第一点:最常见的Puppet部署模型是客户端-服务端模型。许多人询问是否能使用不同的Puppet版本作为master和agent。答案是可以,但前提是要遵照一些注意事项。第一点要注意的是master的版本一定要高于agent。例如,你可以将一个0.24.8版本的agent连接到一个2.6.0版本的master,但是反过来不行。
第二点:要注意的是,agent的版本越老,在与新版本的master搭配时正确运行的可能性就越小。一个0.20.0版本的agent搭配一个2.6.0的master基本不可能正确工作。通常,0.24.x版的agent都能正常连接到2.6.x和0.25.x版本的master并且工作正常。更新版本的master就可能无法完全兼容早期的agent,一些功能和特性可能会出现异常。
最后,将2.6.x或更新版本的master与0.24.x及早期版本的agent混合使用意味着你无法获得2.6.x版本提供的全部性能提升。0.24.x版的agent依然会使用较慢的XML-RPC传输层来进行通讯,从而无法利用新的REST接口。
设置ntp时间同步:
因为公司已经有ntp服务器,直接使用了,未重新搭建ntp
# service ntpd start
修改服务端puppet.conf主配置文件
[root@puppet-master ~]# vim /etc/puppet/puppet.conf
[main]
# The Puppet log directory.
# The default value is '$vardir/log'.
logdir = /var/log/puppet ###默认存放日志路径
# Where Puppet PID files are kept.
# The default value is '$vardir/run'.
rundir = /var/run/puppet ###pid存放路径
# Where SSL certificates are kept.
# The default value is '$confdir/ssl'.
ssldir = $vardir/ssl ###证书存放目录,$vardir为/var/lib/puppet
[agent]
# The file in which puppetd stores a list of the classes
# associated with the retrieved configuratiion. Can be loaded in
# the separate ``puppet`` executable using the ``--loadclasses``
# option.
# The default value is '$confdir/classes.txt'.
classfile = $vardir/classes.txt
# Where puppetd caches the local configuration. An
# extension indicating the cache format is added automatically.
# The default value is '$confdir/localconfig'.
localconfig = $vardir/localconfig
certname = master.xiaohao.com
server = master.xiaohao.com ###设置agent认证连接master端的服务器名称,此名称必须得能够解析
[master]
certname = master.xiaohao.com ###设置puppetmaster认证服务器名称
启动puppetmaster服务
# /etc/init.d/puppetmaster start
Starting puppetmaster: [OK]
# chkconfig puppetmaster on ###设置开机启动
# chkconfig --list|grep puppetmaster
puppetmaster 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
修改客户端配置文件
[root@agent ~]# cat /etc/puppet/puppet.conf
[main]
# The Puppet log directory.
# The default value is '$vardir/log'.
logdir = /var/log/puppet
# Where Puppet PID files are kept.
# The default value is '$vardir/run'.
rundir = /var/run/puppet
# Where SSL certificates are kept.
# The default value is '$confdir/ssl'.
ssldir = $vardir/ssl
[agent]
# The file in which puppetd stores a list of the classes
# associated with the retrieved configuratiion. Can be loaded in
# the separate ``puppet`` executable using the ``--loadclasses``
# option.
# The default value is '$confdir/classes.txt'.
classfile = $vardir/classes.txt
# Where puppetd caches the local configuration. An
# extension indicating the cache format is added automatically.
# The default value is '$confdir/localconfig'.
localconfig = $vardir/localconfig
server = master.xiaohao.com
listen = true
启动puppet服务:
#service puppet start
#chkconfig puppet on
Puppet证书申请
Puppet客户端与服务器端是通过SSL隧道通信的,客户端安装完成后,需要向服务器端申请证书:
首次连接服务器端会发起证书申请,在客户端执行命令如下:
puppet agent --server master.xiaohao.com -test
在服务器端可以用puppet cert -list命令查看到申请证书的客户端主机名。
puppet cert -s命令可以为特定的主机颁发证书,puppet cert –s and –a 表示给所有的主机颁发证书
例如puppet cert –s agent.xiaohoa.com 为客户端颁发证书。
# puppet cert --list -all ###带“+”表明注册成功
+ "agent" (SHA256) A7:19:D1:25:6E:64:AA:84:53:AF:F0:8B:63:C9:2D:B1:47:49:11:6E:C9:3A:5A:EF:00:72:F4:7B:6E:E7:24:65
验证puppet配置
在服务端写个例子测试一下。这个例子作用很简单,用来在客户端的/tmp目录下新建一个 test.txt 文件,内容为:hello,test!在服务端编写代码:【服务器端不需要新建这个文件】
#vi /etc/puppet/manifests/site.pp
node default {
file {
"/tmp/test.txt": content => "helo,test!";
}
}
puppet客户端测试
在客户端执行 puppet,运行成功后会在 /tmp 看到新生成的 test.txt:
#puppet agent -t
执行命令后显示如下:
Notice: Ignoring --listen on onetime run
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent.xiaohao.com
Info: Applying configuration version '1534319026'
Notice: /Stage[main]/Main/Node[default]/File[/tmp/test.txt]/ensure: defined content as '{md5}bf2fcd5a98ca557c37106f400c2954be'
Info: Creating state file /var/lib/puppet/state/state.yaml
Notice: Finished catalog run in 0.01 seconds
最后查看执行结果:
#cat /tmp/test.txt
Hello,test!
此致puppet服务器端和客户端安装完毕,接下来就是深入的配置了。
附puppet自动签发证书步骤:
https://www.cnblogs.com/kaishirenshi/p/7767811.html
初学puppet的更多相关文章
- DDD初学指南
去年就打算总结一下,结果新换的工作特别忙,就迟迟没有认真动手.主要内容是很多初学DDD甚至于学习很长时间的同学没有弄明白DDD是什么,适合什么情况.这世界上没有银弹,抛开了适合的场景孤立的去研究DDD ...
- gulp初学
原文地址:gulp初学 至于gulp与grunt的区别,用过的人都略知一二,总的来说就是2点: 1.gulp的gulpfile.js 配置简单而且更容易阅读和维护.之所以如此,是因为它们的工作方式不 ...
- 初学seaJs模块化开发,利用grunt打包,减少http请求
原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...
- 初学Vue2.0--基础篇
概述: 鉴于本人初学,使用的编译器是webStorm,需添加对VUE的支持,添加方法可以参考 http://www.jianshu.com/p/142dae4f8b51. 起步: 1. 扎实的 Jav ...
- Puppet自动化部署-安装及配置(3)
本文介绍Puppet Master及Agent相关的安装及配置. 一. 官网下载Puppet安装YUM源 [root@puppet-master ~]# rpm -ivh https://yum.pu ...
- Puppet自动化运维-资源介绍篇(4)
1.什么是资源? 资源是Puppet最基础的元素,每个资源的定义都具有标题,类型,以及一系列的属性. 资源定义有如下的特性: (1) Puppet使用title在编译时区分每个资源,使用命名变量在 ...
- Puppet自动化部署-前期环境准备(2)
在安装Puppet环境之前需要配置好机器的基本配置,如规范网络地址IP.hostname,certname认证名称,ntp时间同步等配置完毕,完善的搭建自动化环境. 1.环境介绍 此处实现部署的环境是 ...
- Puppet自动化运维-C/S架构概念(1)
1.Puppet工作模式 (1)采用C/S架构(即是server<=>client) (2)Master 会对自己形成自签名CA中心,对Agent端进行证书颁发,验证通过才允许Agent( ...
- 初学Python
初学Python 1.Python初识 life is short you need python--龟叔名言 Python是一种简洁优美语法接近自然语言的一种全栈开发语言,由"龟叔&quo ...
随机推荐
- JAVA对象转换JSON
1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码 代码如下: JSONArray array = JSONArray.fromObject(userlist); String ...
- Linux Shell命令系列(4)
16. cat命令 “cat”代表了连结(Concatenation),连接两个或者更多文本文件或者以标准输出形式打印文件的内容. 17. cp 命令 “copy”就是复制.它会从一个地方复制一个文件 ...
- Spark Mllib里的分层抽样(使用map作为分层抽样的数据标记)
不多说,直接上干货! 具体,见 Spark Mllib机器学习实战的第4章 Mllib基本数据类型和Mllib数理统计
- Docker | 第六章:构建私有仓库
前言 上一章节,讲解了利用Dockerfile和commit进行自定义镜像的构建.大部分时候,公司运维或者实施部门在构建了符合公司业务的镜像环境后,一般上不会上传到公共资源库的.这就需要自己搭建一个私 ...
- Javascript常见问题
倒计时 <Script Language="JavaScript"> var timedate= new Date("October 1,2002" ...
- C 碎片五 数组
构造类型数据是有基本类型数据按照一定规则组成的.数组,结构体,共用体都属于构造类型的数据.数组是有序数据的集合,C语言数组中的每一个元素都属于同一个数据类型,用数组名和下标来唯一确定数组中的元素. 一 ...
- android获取https证书
最近碰到一个问题, 有朋友问android这边能不能拿到服务器下发的证书,意思就是 自签名证书的https接口,在请求的时候,也没有添加自签名证书进信任列表,直接去发https请求,按照正常htt ...
- Redis分片(分区)
分区的概念 分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集. 如果只使用一个redis实例时,其中保存了服务器中全部的缓存数据,这样会有很大风险,如果单台redis服 ...
- oracle 11g r2卸载
1. 进入计算机管理>>服务里,停止所有oracle的服务 2. 开始菜单>>程序>>Oracle>>Oracle安装产品>>Univers ...
- Java的几种加载驱动的方法
1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 2.DriverManager.registerD ...