本文共 2593 字,大约阅读时间需要 8 分钟。
Puppet是集中配置管理系统,可以说使我们Ansible的升级版,当我们的服务器集群过于大时,Ansible就可能力不从心了,我们知道Ansible是基于ssh的连接,而我们的Puppet则是通过https xmlrpc链接,安全系数明显上了一个层次。
Puppet的工作模式,是通过对Puppetmasterd进行更改,client每隔半个小时取一次数据,不管对数据的处理成功与否,都要返回一个报告,通知到master,Puppet有两种工作模型,一种是单机模型,一种是master/agent模型,看名字都知道一种是在本地自己玩自己的,一种是管理从的,我们今天就先来玩一下单机模型。 单机模型甚至都不用开启Puppet服务,直接可以使用命令,当然了命令的格式很长,但是Puppet提供很好的帮助文档来帮助我们对该命令的使用,我们可以使用Puppet help查看具体语法和相关选项。 语法:puppet <subcommand> [options] <action> [options] <subcommand>中有几个是我们常用的选项,比如:apply:本地使用puppet,也就是单机模型的必需选项
agent:我们下章的master/agent模型使用的必需选项 cert:Puppet的证书相关,既然使用的https xmlrpc来通信,自带了CA和cert describe:这个选项特别重要,资源,是我们在进行控制时可以使用的类似Ansible的一些模块,我们可以使用puppet describe --help来查看都支持哪些资源 device:网络设备远程管理 doc:文档相关 facts:系统变量相关,Puppet还可以调用系统变量,不过不管是定义还是调用,都要使用$
一般来说,我们接触过Ansible之后,再来瞅Puppet,会简单的多,我们Puppet也是编写一些类似剧本一样的资源清单,来调用资源进行管理,那么我们可用的资源都有什么呢?
我们使用puppet describe --list查看所有的清单列表,我们介绍几种常用的:cron:计划任务相关的,类似于Ansible的cron模块
exec:执行外部命令 file:文件相关 group:用户组相关 host:主机相关 mount:挂载相关 notify:通知机制 package:安装包相关,类似于Ansible的yum,不过package可以指定以什么方式安装 service:服务相关的 yumrepo:yum仓库先关 ...
有很多的资源,我们什么时候用,什么时候查,不过死记硬背,当然我们知道了资源名,怎么用啊,我具体分为三步:
1 puppet describe --list:查看都有什么资源
2 puppet describe file -m -s:查看file的简短的providers和元参数,使用这个查出选项 3 puppet describe file -p:查看file的一些providers,使用这个看选项参数
举个例子,我们想安装一个nginx服务,安装后启动,开机自启动。
首先我们先要定义一个以.pp结尾的文件,puppet的资源清单就是这么定义的,比如为install.pp,内容如下:package{'nginx':
name => "nginx", #name指定安装包为nginx ensure => installed, #安装方式为默认yum安装}service{'nginx':
ensure => running, #服务名称为nginx的启动 enable => true, #开机启动为true}
有个可能看出来了,这个格式是怎么回事?为什么有的有name,有的没有name,service没有name会不会不知道启动哪个服务,你这些参数怎么查到的?
首先格式:
type {'title':
attribute1 => value1, atrribute2 => value2,……}注意:type必须使用小写字符;title是一个字符串,在同一类型中必须惟一,资源清单一般以.pp结尾;
其次是name没有定义的问题,资源属性中有一个为namever的属性,当你不定义时,会自动引用title的名称为name。
最后是关于这些资源的查询与用法,比如我们先用的是package,所以我们可以这样查询,puppet describe package -m -s,查看简短的介绍
属性是可以了,那么怎么用呢?有什么选项呢?我们可以使用puppet describe package -p查看具体属性怎么用,那么既然package可以查的到那我们的service也是妥妥的可以使用了。
我们配置好之后,可以使用puppet apply -v --noop install.pp来试运行一下,如果没有报错,去掉--noop再运行,可以提高正确率哦,其中有些常用选项,我来和大家介绍一下:
-v:详细输出
-d:debug模式,输出极为详细
--noop:调试模式,试运行,可以提前排错
-l PATH:输出结果到指定文件中
资源间有的还存在一些依赖关系,比如我们直接启动服务,而服务没有安装完成怎么办?所以资源间的次序可以使用一些属性before、require、notify和subscribe来定义,我们有多种方法,定义这种依赖关系:
1 在package下加入一行before => Service['nginx']
2 在service下加入一行require => Package['nginx'], 3 package的}后面加入->也可以实现一依赖关系 4 在所以资源定义的下面,自己一行 Package['nginx'] -> Service['nginx']
转载于:https://blog.51cto.com/13296640/2050686