自动化运维工具Puppet 快速入门

来源:http://www.pykjg.com 作者:一分快三官网 人气:93 发布时间:2019-10-31
摘要:一、简介 当服务器数量达到自然的局面时,仅依据人为实现批量安插服务器个能源的陈设,运转工作将变得繁缛且易于失误,为了解决那大器晚成标题,咱们应当怎么办吧?大家能够引

一、简介

当服务器数量达到自然的局面时,仅依据人为实现批量安插服务器个能源的陈设,运转工作将变得繁缛且易于失误,为了解决那大器晚成标题,咱们应当怎么办吧?大家能够引入一堆工具,那批工具可编写制定相应的manifests代码,运转它便得以活动实现具有的劳作,近日可比盛行的运转工具关键有:puppet,ansible, slackstack等,在此大家珍视以puppet来开展话题。在有个别特大型网络公司中,运行自动化管理着几百照旧上千台服务器,它能够本着多台服务器进行统生机勃勃操作,举例计划联合软件、实行联合上线维护等,何况能够高效变成上线安顿,收缩人力及人力误操作风险。

二、Puppet的行事规律   

puppet的指标是让系统管理员只集中于要管理的靶子服务器,而忽视达成的内部情状。puppet不仅可以够在单机上行使,也得以C/S结构采用,在广阔铺排puppet的图景下,平时大家会使用C/S结构,在此种结构下,服务端运转puppet-master程序顾客端运维puppet-client服务程序

实际的干活流程图如下所示:

对于puppet的的垄断(monopoly),明白puppet的干活原理是贰个必备的的品级,只有在摸底了puppet的工作原理后才具更加好应用puppet,上面让我们合作明白学习puppet的行事原理:

聊到puppet的做事原理,必须要从以下四个方面来讲到,如下所示:

(1)定义:使用Puppet特定的语言定义基础配置音讯。平时我们把那一个音信写在Modules中。

(2)模板:在安顿奉行以前检查实验代码,但并不着实实行。

(3)实践:定义的配置活动计划。检查评定并记录下所产生变化的生龙活虎部分。

(4)报告:将希望的扭转、实际发生的转移及任何退换发送给报告系统。

如下所示为puppet的做事数据流暗意图

图片 1

数据流说明:

1.率先具备的节点(Node)Node节点将Facts和本机新闻发送给Master

2.Master告诉Node节点应该怎么安顿,将那几个音信写入Catalog后传给Node。

3.Node节点在本机进行代码分析验证并实行,将结果反映给Master。

4.Master经过API将数据发给解析工具。报告完全可以由此开放API或与别的系统融为风姿洒脱体。

整整数据流的走向是基于SSL安全公约的,如下图所示:

图片 2

模板文件管理进程表达如下:

Puppet通过编写翻译Manifest中的内容 (即模板中剧情),将编写翻译好的代码存入Catalog。在奉行前先进行代码的辨证,再实行,完毕最最初所定义好的状态。代码编写翻译过程如图所示:

图片 3

正如所示为全数puppet自动陈设进程中agent和master的亲力亲为的互动进度:

图片 4

进程说明:

  1. Puppet顾客端Agent将节点名与facts音信发送给Master。

2. Puppet服务端Master通过分类推断央求的顾客端是哪个人,它将在做什么。这些判定是透过site.pp中满含的Node.pp配置文件定义的。

3. Puppet服务端Master将所急需的Class类新闻举行编写翻译后存入Catalog并发送给Puppet客商端Agent,到此造成第二次交互。

4. Puppet客商端Agent对Catalog举办代码验证(语法检查及错误检查)并执行。主借使代码的印证,并将举办进程的音讯及结果写入日志。

5. Puppet客商端Agent最后达到最早始所定义的景况,并且将结果及别的推行多少经过开放API的款式发送给Puppet服务端Master。

以上正是puppet的劳作规律须要注意是:因为任何经过中都以基于ssl完毕的,所以首要的是保障agent和master间能够依照ssl通信!

三、puppet常用财富及配置实例

实例一: 创建CentOS客商为普通客户,且uid为4000,gid为3000,所属组为centos,附加组为mygrp

user{'centos':

  name    => 'centos', #概念客户名

  ensure  => present,  #始建客商

  uid    => 4000,    #定用户id

  groups  => 'mygrp',  #概念别的附加组

  require => Group['mygrp'] #此财富重视于事先创设mygrps组

}

group {'mygrp':

  name    => 'mygrp',#概念组名

  ensure  => present, #创制组,与此相反的是absent,删除组

  gid    => '3000', #组id

  system  => false,  #是否为系统组,默感到false

}

总结:

user常用属性:

name:客户名,uid:顾客id,gid:组id,groups:附加组,comment:注释音讯

expiry:过期时刻,home:家目录,shell:私下认可的shell类型,system:是还是不是为系统组,

ensure:创造或删除客商即present、absent,password:加密后的密码

group常用属性: 

ensure:创制或删除组即present、absent,name:组id,system:是不是为系统组等

[root@node1 manifets]# puppet apply -v user.pp #将此manifests清单编写翻译为伪代码catalog,并推行,且重回推行结果现今单机情势的主机上

Notice: Compiled catalog for node1.alren.com in environment production in 0.55 seconds

Info: Applying configuration version '1480561275'

Notice: /Stage[main]/Main/Group[mygrp]/ensure: created

Notice: /Stage[main]/Main/User[centos]/ensure: created

Notice: Finished catalog run in 0.11 seconds

[root@node1 manifets]# id centos

uid=4000(centos) gid=4000(centos) groups=4000(centos),3000(mygrp)

[root@node1 manifets]# vi user.pp

[root@node1 manifets]# puppet apply -v user.pp

Notice: Compiled catalog for node1.alren.com in environment production in 0.58 seconds

Info: Applying configuration version '1480561376'

Notice: /Stage[main]/Main/Group[mygrp]/ensure: removed

Notice: /Stage[main]/Main/User[centos]/ensure: removed

Notice: Finished catalog run in 0.13 seconds

[root@node1 manifets]# id centos

id: centos: no such user

[root@node1 manifets]#

实例二:此manifests代码为设置httpd包,为其提供配置文件,并且运营服务

service{'httpd':

  ensure    => running,

  enable    => true,

  restart  => 'systemctl restart httpd.service',

  require  => Package['httpd'],

}

package{'httpd':

  ensure    => installed,

}

file{'httpd.conf':

  path      => '/etc/httpd/conf/httpd.conf',

  source    => '/root/manifests/httpd.conf',

  ensure    => file,

  notify    => Service['httpd'],

  before    => Service['httpd'],

}

package常用属性:

ensure:installed,present,latest,absent name:包名 

source:程序包来源,仅对不会自动下载的有关程序包的provider有用,举例rpm或dpkg

servicec常用属性:

ensure:running,stopped运营甘休 enable:开机是或不是运行 restart:重启命令

require:被信赖于事先安装程序包,

file常用属性:

path:文件需放置的岗位所在处  source:源文件在哪    ensure:file,present,absent,directory,link...

file指的是索然无味文书,link为连续几天来文件,此需结合target一同使用 directory:类型为目录,可经过source指向的路线复制生成,recuse属性指明是或不是为递归复制

owner:属主 group:属组 mode:权限

[root@node1 manifets]# puppet apply -v  web.pp

Notice: Compiled catalog for node1.alren.com in environment production in 1.48 seconds

Info: Applying configuration version '1480563754'

Info: Computing checksum on file /etc/httpd/conf/httpd.conf

Info: /Stage[main]/Main/File[httpd.conf]: Filebucketed /etc/httpd/conf/httpd.conf to puppet with sum 42566ec31df37e3d44429b285d015e1d

Notice: /Stage[main]/Main/File[httpd.conf]/content: content changed '{md5}42566ec31df37e3d44429b285d015e1d' to '{md5}8b01e334a6e975b659df5dd351923ccb'

Info: /Stage[main]/Main/File[httpd.conf]: Scheduling refresh of Service[httpd]

Notice: /Stage[main]/Main/Service[httpd]: Triggered 'refresh' from 1 events

Notice: Finished catalog run in 1.95 seconds

[root@node1 manifets]# ss -tnl

State      Recv-Q Send-Q Local Address:Port              Peer Address:Port

LISTEN    0      5      192.168.122.1:53                    *:*

LISTEN    0      128        *:22                    *:*

LISTEN    0      128    127.0.0.1:631                    *:*

LISTEN    0      100    127.0.0.1:25                    *:*

LISTEN    0      32        :::21                    :::*

LISTEN    0      128      :::22                    :::*

LISTEN    0      128      ::1:631                  :::*

LISTEN    0      128      :::8088                  :::*

LISTEN    0      100      ::1:25                    :::*

[root@node1 manifets]#

实例三:每八分钟同步下系统时间,写入准期义务

cron{'synctime':

  command  => '/usr/sbin/ntpdate 10.1.0.1 &>/dev/null', #须实行的授命

  ensure    => present,  #成立职责布置

  minute    => '*/5',    #过多少长度是时间实施

  user      => root,    #以何人的身价运营

}

[root@node1 testmanifests]# puppet apply -v cron.pp

Notice: Compiled catalog for node1.alren.com in environment production in 0.18 seconds

Info: Applying configuration version '1480593969'

Notice: /Stage[main]/Main/Cron[synctime]/minute: minute changed '*/3' to '*/5'

Notice: Finished catalog run in 0.09 seconds

[root@node1 testmanifests]# crontab -l

# HEADER: This file was autogenerated at 2016-12-01 20:06:10 +0800 by puppet.

# HEADER: While it can still be managed manually, it is definitely not recommended.

# HEADER: Note particularly that the comments starting with 'Puppet Name' should

# HEADER: not be deleted, as doing so could cause duplicate cron jobs.

# Puppet Name: synctime

*/5 * * * * /usr/sbin/ntpdate 10.1.0.1 &>/dev/null  #查看见此职分安排存在

[root@node1 testmanifests]#

实例四:puppet之if条件判断

if $osfamily =~ /(?i-mx:debian)/ {  $osfamily为facter中收获的内嵌变量

          $webserver = 'apache2' #自定义变量

} else {

          $webserver = 'httpd'

}

package{"$webserver":

  ensure    => installed,

  before    => [ File['httpd.conf'], Service['httpd'] ],

}

file{'httpd.conf':

  path      => '/etc/httpd/conf/httpd.conf',

  source    => '/root/testmanifests/httpd.conf',

  ensure    => file,

}

service{'httpd':

  ensure    => running,

  enable    => true,

  restart  => 'systemctl restart httpd.service',

  subscribe => File['httpd.conf'], #文告任何的财富扩充刷新操作

}

[root@node1 testmanifests]# puppet apply -v if.pp

Notice: Compiled catalog for node1.alren.com in environment production in 1.53 seconds

Info: Applying configuration version '1480594920'

Info: Computing checksum on file /etc/httpd/conf/httpd.conf

Info: FileBucket got a duplicate file {md5}8b01e334a6e975b659df5dd351923ccb

Info: /Stage[main]/Main/File[httpd.conf]: Filebucketed /etc/httpd/conf/httpd.conf to puppet with sum 8b01e334a6e975b659df5dd351923ccb

Notice: /Stage[main]/Main/File[httpd.conf]/content: content changed '{md5}8b01e334a6e975b659df5dd351923ccb' to '{md5}42566ec31df37e3d44429b285d015e1d'

Info: /Stage[main]/Main/File[httpd.conf]: Scheduling refresh of Service[httpd]

Notice: /Stage[main]/Main/Service[httpd]: Triggered 'refresh' from 1 events

Notice: Finished catalog run in 1.97 seconds

[root@node1 testmanifests]# ss -tnl

State      Recv-Q Send-Q Local Address:Port              Peer Address:Port

LISTEN    0      5      192.168.122.1:53                    *:*

LISTEN    0      128        *:22                    *:*

LISTEN    0      128    127.0.0.1:631                    *:*

LISTEN    0      100    127.0.0.1:25                    *:*

LISTEN    0      128      :::80                    :::*

LISTEN    0      32        :::21                    :::*

LISTEN    0      128      :::22                    :::*

LISTEN    0      128      ::1:631                  :::*

LISTEN    0      100      ::1:25                    :::*

[root@node1 testmanifests]#

实例五:puppet之case语句

case $osfamily {

"RedHat": { $webserver='httpd' }

/(?i-mx:debian)/: { $webserver='apache2' }

default: { $webserver='httpd' }

}

package{"$webserver":

ensure=> installed,

before=> [ File['httpd.conf'], Service['httpd'] ],

}

file{'httpd.conf':

ensure=> file,

path => '/etc/httpd/conf/httpd.conf',

source=> '/root/testmanifests/httpd.conf',

}

service{'httpd':

ensure=> running,

enable=> true,

restart => 'systemctl restart httpd.service',

subscribe=> File['httpd.conf'],

}

[root@node1 testmanifests]# puppet apply -v case.pp

Notice: Compiled catalog for node1.alren.com in environment production in 1.61 seconds

Info: Applying configuration version '1480595667'

Info: Computing checksum on file /etc/httpd/conf/httpd.conf

Info: FileBucket got a duplicate file {md5}42566ec31df37e3d44429b285d015e1d

Info: /Stage[main]/Main/File[httpd.conf]: Filebucketed /etc/httpd/conf/httpd.conf to puppet with sum 42566ec31df37e3d44429b285d015e1d

Notice: /Stage[main]/Main/File[httpd.conf]/content: content changed '{md5}42566ec31df37e3d44429b285d015e1d' to '{md5}3dfa14b023127a3766bddfe15fe14b9a'

Info: /Stage[main]/Main/File[httpd.conf]: Scheduling refresh of Service[httpd]

Notice: /Stage[main]/Main/Service[httpd]: Triggered 'refresh' from 1 events

Notice: Finished catalog run in 1.91 seconds

[root@node1 testmanifests]# #可依据活动的语言习贯选用适合的语法,如下所示雷同可高达上诉的指标

$webserver = $osfamily ? {

"Redhat" => 'httpd',

/(?i-mx:debian)/ => 'apache2',

default => 'httpd',

}

package{"$webserver":

ensure  => installed,

before  => [ File['httpd.conf'], Service['httpd'] ],

}

file{'httpd.conf':

path    => '/etc/httpd/conf/httpd.conf',

source  => '/root/testmanifests/httpd.conf',

ensure  => file,

}

service{'httpd':

ensure  => running,

enable  => true,

restart => 'systemctl restart httpd.service',

subscribe => File['httpd.conf'],

}

四、puppet类与持续

puppet中命名的代码模块,日常索要被使用,如如重写则代码冗余,使用定义风姿罗曼蒂克组通用指标的财富,可在puppet全局调用,就能够消逝那类难点,类能够被接二连三,也能够包蕴子类。

类的语法格式有两种,调用类的法子常用的有两种,能够在类中传送参数等灵活的操作,如以下实例:

class webserver { #类注脚后续调用后才生效,调用的措施常用的有三种

$webpkg = $operatingsystem ? {

/(?i-mx:(centos|redhat|Fedora))/        => 'httpd',

/(?i-mx:(Ubuntu|debian))/      => 'apache2',

default => 'httpd',

}

package{"$webpkg":

ensure  => installed,

}

file{'/etc/httpd/conf/httpd.conf':

ensure  => file,

owner  => root,

group  => root,

source  => '/root/testmanifests/httpd.conf',

require => Package["$webpkg"],

notify  => Service['httpd'],

}

service{'httpd':

ensure  => running,

enable  => true,

}

}

include webserver  #接受include进行调用

#表达调用类的第两种办法

class web($webserver='httpd') { #向类中传送参数

package{"$webserver":

ensure  => installed,

before  => [ File['httpd.conf'], Service['httpd'] ],

}

file{'httpd.conf':

path    => '/etc/httpd/conf/httpd.conf',

source  => '/root/testmanifests/httpd.conf',

ensure  => file,

}

service{'httpd':

ensure  => running,

enable  => true,

restart => 'systemctl restart httpd.service',

subscribe => File['httpd.conf'],

}

}

class{'web':

webserver      => 'apache2', #调用类

}

[root@node1 ~]# puppet apply -v --noop class2.pp

Notice: Compiled catalog for node1.alren.com in environment production in 1.53 seconds

Info: Applying configuration version '1480596978'

Notice: /Stage[main]/Web/Package[apache2]/ensure: current_value absent, should be present (noop)

Notice: /Stage[main]/Web/File[httpd.conf]/content: current_value {md5}3dfa14b023127a3766bddfe15fe14b9a, should be {md5}8b01e334a6e975b659df5dd351923ccb(noop)

Info: /Stage[main]/Web/File[httpd.conf]: Scheduling refresh of Service[httpd]

Notice: /Stage[main]/Web/Service[httpd]: Would have triggered 'refresh' from 1 events

Notice: Class[Web]: Would have triggered 'refresh' from 3 events

Notice: Stage[main]: Would have triggered 'refresh' from 1 events

Notice: Finished catalog run in 0.65 seconds

[root@node1 ~]#

   

类的接续:子类可三回九转父类的能源属性,同时可定义父类空头支票的额能源属性,一个父类可同期被多个子类所承继

class nginx { #概念父类新闻

package{'nginx':

ensure  => installed, #安装程序包

}

service{'nginx': #运维程序

ensure  => running,

enable  => true,

require => Package['nginx'],

}

}

class nginx::web inherits nginx {  #持续父类的原来属性,同偶然候扩张file财富属性

file{'ngx-web.conf':

path    => '/etc/nginx/conf.d/ngx-web.conf',

ensure  => file,

require => Package['nginx'],

source  => '/root/testmanifests/nginx/ngx-web.conf',

}

file{'nginx.conf':

path    => '/etc/nginx/nginx.conf',

ensure  => file,

content => template('/root/testmanifests/nginx.conf.erb'), #此模板需事先存在能够使用

require => Package['nginx'],

}

Service['nginx'] {

subscribe => [ File['ngx-web.conf'], File['nginx.conf'] ], #文告任何能源扩充刷新操作

}

}

include nginx::web #调用注明的类

五、puppet模板(此内容但是多解释,需自行提升)

模板是三个如约预订的、预约的布局贮存了八个文件或子目录的目录,目录里面包车型大巴那一个文件或子目录必得根据一定的格式的命名标准,puppet会在配置的渠道下搜寻所需的能源模块。模块的称呼日常是只好以小写字母最早,可以蕴涵小写字母,数字下划线,不过无法动用main和settings。 

模块的组成都部队分:

manifests/:能源项目清单

init.pp:必得定义三个类,类名必需与模块名相仿;

files/:静态文件

templates/:模板文件

lib/: 插件目录,常用来存款和储蓄自定义的facts以致自定义类型 

spec/:相符于tests目录,存款和储蓄lib/目录下插件的应用扶持和典范;

tests/:当前模块的施用扶助或选择范例文件;

小结:运营工具备许多诸如:Puppet,Ansible,slackstack等,puppet还是一个很好用的自动化运转工具,大大缓和的运营人士的双重操作,提升了工效,在运维进程中可依附业务须要接收不一致的运行工具,在服务器数量不是超级大的情状下可利用轻量级的ansible,在服务器数量达到自然的规模时选择重量级的puppet相对来讲功用越来越高。当面对有得采纳的时候想起一句话:箩卜大白菜各有所好,相符自身只顾、驾驭三个运营工具比全会那么一些,解决难点更有优势。

Puppet 学习种类:

Puppet 学习后生可畏:安装及简便实例应用 http://www.linuxidc.com/Linux/2013-08/88710.htm

Puppet学习二:简单模块配置和应用 http://www.linuxidc.com/Linux/2013-08/88711.htm

连带阅读:

有关Puppet agent端二种备份苏醒方案研讨商量 http://www.linuxidc.com/Linux/2013-07/87885.htm
选择更安全的秘技注册你的Puppet节点 http://www.linuxidc.com/Linux/2013-07/87884.htm
透过配备SSH深切驾驭Puppet的语法及办事机制 http://www.linuxidc.com/Linux/2013-07/87882.htm
Puppet利用Nginx多端口完结负载均衡 http://www.linuxidc.com/Linux/2013-02/79794.htm
CentOS(5和6)下Puppet的C/S格局实例 http://www.linuxidc.com/Linux/2011-12/50502.htm

Puppet 的亲力亲为介绍:请点这里
Puppet 的下载地址:请点这里

本文长久更新链接地址:http://www.linuxidc.com/Linux/2016-12/137893.htm

图片 5

本文由一分快三平台发布于一分快三官网,转载请注明出处:自动化运维工具Puppet 快速入门

关键词:

上一篇:没有了

下一篇:Zabbix3.0对tcp连接数和景观的监控优化

最火资讯