linux运维学习之自动化运维工具Puppet

  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,查看简短的介绍

linux运维学习之自动化运维工具Puppet

  属性是可以了,那么怎么用呢?有什么选项呢?我们可以使用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