puppet学习与精通之入门

puppet 入门

Skip
to end of metadata

    1puppet 是什么

puppet是一个开源的软件自动化配置和部署工具,很多大型IT公司均在使用puppet对集群中的软件进行管理和部署。

2.  设计架构

  • puppet是基于c/s架构的。服务器端保存着所有对客户端服务器的配置代码,在puppet里面叫做manifest.
  • 客户端下载manifest之后,可以根据manifest对服务器进行配置,例如软件包管理,用户管理和文件管理等等。

如上图所示,puppet的工作流程如下:

(1)客户端puppetd调用facter,facter探测出主机的一些变量,例如主机名,内存大小,ip地址等。pupppetd 把这些信息通过ssl连接发送到服务器端;

(2)服务器端的puppetmaster 检测客户端的主机名,然后找到manifest里面对应的node配置, 并对该部分内容进行解析,facter送过来的信息可以作为变量处理,

node牵涉到的代码才解析,其他没牵涉的代码不解析。解析分为几个阶段,语法检查,如果语法错误就报错。如果语法没错,就继续解析,解析的结果生成一个中间的“伪代码”,然后把伪代码发给客户端;

(3)客户端接收到“伪代码”,并且执行,客户端把执行结果发送给服务器;

(4)服务器端把客户端的执行结果写入日志。

puppet工作过程中有两点值得注意:

  1. 为了保证安全,client和master之间是基于ssl和证书的,只有经master证书认证的client可以与master通信;
  2. puppet会让系统保持在你所期望的某种状态并一直维持下去,如检测某个文件并保证其一直存在,保证ssh服务始终开启,如果文件被删除了或者ssh服务被关闭了,

    puppet下次执行时(默认30分钟),会重新创建该文件或者启动ssh服务。

3 puppet语法

1 资源

1.常用的资源主要有以下几个:

file:文件管理         更详细资料

package:软件包管理         更详细资料

service:系统服务管理        更详细资料

cron:配置定期任务          更详细资料

exec:运行shell命令          更详细资料

2.资源常用属性

1资源公共属性

before         用于控制不同对象(资源)的执行顺序关系,表示某个对象(资源)在另一个对象之后发生(require与之相反,它表示之前发生)。

subscribe     检测某个资源,当它发生变化时,该资源会重新加载。

2 file资源

owner         设置文件的属主

group          指定那个该文件的用户组,值可以是gid或者组名

mode          mode用于设置文件的权限

content        一个文件的内容可以由content属性来包含固定的内容,

source         可以用source命令来从其他url复制文件内容。

template      利用template,可以通过erb模板生成文件内容,erb模板可以使用变量。而且还可以对变量进行计算和操作。

3 package资源

ensure         设置该软件包应该在什么状态.

installed 表示要安装该软件,也可以写成present;

absent 表示反安装该软件;

pureged 表示干净的移除该软件;

latest 表示安装软件包的最新版本.

4 service资源

enable          服务在开机的时候是否启动,可以设置的值是true和false,需要provider支持enableable

ensure          是否运行服务, running表示运行服务,stopped 表示停止服务

restart           指定重启脚本,否则就先停止该服务再启动该服务

start              指定启动服务的命令,通常init模式的管理脚本都支持,不需要手工指定

status            指定status命令,如果不指定,就从进程列表查询该服务

stop              指定停止服务的脚本.

2 类和函数

1类

类可以把多个相关的资源定义在一起,组成一个类,类可以继承。

c
l a s s   ssh {

f
i l e    {

"
/ e t c / ssh / sshd_config "
 :

source 
=>   " puppet : / / $ f i l e s e r v e r / ssh / sshd_config

.
cfg " ;

}

package  
{

"
ssh "
 :

ensure  =>  
i n s t a l l e d ;

}

s
e r v i c e    {

"
ssh "
 :

ensure  => 
running ;

}

}

这里,file/etc/ssh/sshd_config的内容是从puppet服务器上面下载的,file资源的内容可以从

别的url得到,也可以erb模板生成,erb模板是很强大的工具,这个后面会说到。package

资源安装ssh软件,service资源保证ssh服务在运行状态。类的继承这里就不讲了,因为是

入门手册,另外用的不多。

2函数

函数(在puppet中称为“defination”)可以把多个资源包装成一个资源,或者把一个资源包装成一个模型,便于使用。

函数

例如,在debian里面管理一个apache虚拟机非常简单,把一个虚拟主机的配置文件放到/etc/sites-available/里面,

然后做一个符号链接到/etc/sites-enabled目录。 

你可以为你每个虚拟主机复制同样的配置代码,但是如果你使用下面的代码就会更好和更简单:

define
virtual_host(
$docroot$ip$order 500$ensure =
“enabled”) {

$file =
“/etc/sites-available/
$name.conf”

#
The template fills in the docroot, ip, and name.

file
$file:

content
=> template(“virtual_host.erb”),

notify 
=> Service[apache]

}

file
{ “/etc/sites-enabled/
$order-$name.conf”:

ensure => $ensure ?
{

enabled 
=> 
$file,

disabled
=> absent

}

}

}

然后,你就可以使用这个定义来管理一个apache虚拟主机,如下面代码所示:

virtual_host
{ “reductivelabs.com”:

order  
=> 
100,

ip     
=> “
192.168.0.100″,

docroot
=> “/var/www/reductivelabs.com/htdocs”

3 节点

puppet如何区分不同的客户端,并且给不同的服务端分配manifest呢?puppet使用叫做node的语法来做这个事情,node 后面跟客户端的主机名3,例如下面的例子:

节点

node 
host1 . example . com ‘
 {

i
n c l u d e ssh

}

node 
host2 . example . com ‘
 {

i
n c l u d e apache , mysql , php

}

当主机host1.example.com来连服务端时,只会执行node ‘host1.example.com‘里面的代码,不会执行node host2.example.com里面的代码。正如前面所说,可以定义一个default

结点。比如没有针对host3的node配置,host3就用default的配置了。在这里include的意思是include 类。同样,节点也支持继承。

4 变量和数组

1 变量:

puppet也和其他语言一样,支持变量和数组,puppet用$符号定义变量,变量的内容用双引号括起来。例如 :

变量

$
t e s t=
"
h e l l o , guys "

f
i l e {

"
/tmp/ t e s t "
 :

content
=> $ t e s t ;

}

  • puppet可以使用由facter提交的变量,facter在客户端收集系统信息整理成不同的变量提交给puppet服务器端,服务器端的代码可以使用这些变量实现高级的功能,例如不同的硬件配置生成不同的应用软件配置文件。
    • 运行facter命令可以看到很多变量的输出,这些变量可以在puppet代码里面直接使用。

2 数组:

puppet利用方括号来定义数组,数组的内容由逗号分割,例如下面的例子:

[ " apache2 " , " httpd " , " ssh " ]

数组可以用在资源定义里面,例如前面提到的例子。也可以用在函数里面,例如:

数组

d
e f i n e php : : pear ( ) {

package
{ " `php

$
{name} " : 
ensure =>
i n s t a l l e d }

}

php
: : pear { [ 

ldap ‘
 
mysql ‘
 
ps ‘
 ‘snmp
 
s q l i t e ‘
 
t i d y ‘
 ,

xmlrpc
‘ ] : }

变量也有有效范围,同其他语言一样分为局部和全局变量,简单说来,就是在里面定义的变量的使用范围就限制在里面。

5 模块

    • 一个模块就是一个/etc/puppet/modules目录下面的一个目录和它的子目录,在puppet的主文件site.pp里面用import modulename可以插入模块。新版本的puppet可以自动插入/etc/puppet/modules目录下的模块。
    • 引入模块,可以结构化代码,便于分享和管理。例如关于apache的所有配置都写到apache模块下面。
    • 一个模块目录下面通常包括三个目录:files,manifests,templates。manifests 里面必须要包括一个init.pp的文件,这是该模块的初始(入口)文件,导入一个模块的时候,会从init.pp开始执行。可以把所有的代码都写到init.pp里面,也可以分成多个pp文件,init 再去包含其他文件。files目录是该模块的文件发布目录,puppet提供一个文件分发机制,类似rsync的模块。templates 目录包含erb模型文件,这个和file资源的template属性有关。
    • puppet安装好以后,modules目录是没有的,自己建立一个就行,然后在里面可以新增加你的模块。

4 常用命令


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

[[email protected]
~]# puppet help

    Usage:
puppet <subcommand> [options] <action> [options]

                                                 

    Available
subcommands, from Puppet Faces:

      ca               
Local Puppet Certificate Authority management. #管理本地证书

      catalog          
Compile, save, view, and convert catalogs. #编译、保存、查看puppet代码,或转换成Catalogs

      certificate      
Provide access to the CA 
for certificate
management. #提供访问CA证书的管理

      certificate_request 
Manage certificate requests. #管理证书的请求

      certificate_revocation_list 
Manage the list of revoked certificates. #管理撤销证书的列表

      config           
Interact 
with Puppet‘s
configuration options. #配置现象

      facts            
Retrieve and store facts. #系统信息检查

      file             
Retrieve and store files 
in a
filebucket #在filebucket中检索和存储文件

      help             
Display Puppet help. #查看帮助

      instrumentation_data 
Manage instrumentation listener accumulated data. #管理监听的数据

      instrumentation_listener 
Manage instrumentation listeners. #管理监听的状态

      instrumentation_probe 
Manage instrumentation probes. #管理监听探测

      key              
Create, save, and remove certificate keys. #创建、保存、删除证书密钥

      man              
Display Puppet manual pages. #查看手册

      module           
Creates, installs and searches 
for modules
on the Puppet Forge. #从Puppet Forge创建、安装、查询模块

      node             
View and manage node definitions. #管理节点

      parser           
Interact directly 
with the
parser. #解析器管理,检查pp文件语法

      plugin           
Interact 
with the
Puppet plugin system. #插件管理

      report           
Create, display, and submit reports. #创建、查看报告

      resource         
API only: interact directly 
with resources
via the RAL. #查看资源帮助

      resource_type    
View classes, defined resource types, and nodes from all manifests. #查看类、默认资源类型与节点信息

      secret_agent     
Mimics puppet agent. #模拟Agent

      status           
View puppet server status. #查看puppet状态

                                                 

    Available
applications, soon to be ported to Faces:

      agent            
The puppet agent daemon #客户端进程,负责从Master端获取信息

      apply            
Apply Puppet manifests locally #运行本地manifests

      cert             
Manage certificates and requests #证书颁发,用于签署证书

      describe         
Display help about resource types #资源帮助

      device           
Manage remote network devices #管理远程网络设备

      doc              
Generate Puppet documentation and references #生成puppet文档

      filebucket       
Store and retrieve files 
in a
filebucket #在filebucket中检索和存储文件

      inspect          
Send an inspection report #发送report报告

      kick             
Remotely control puppet agent #远程控制agent,远程触发puppet agent命令

      master           
The puppet master daemon #编译配置文件、模板、节点的自定义插件

      queue            
Queuing daemon 
for asynchronous
storeconfigs #队列进程

                                                 

    See ‘puppet
help <subcommand> <action>‘
 for help
on a specific subcommand action.

    See ‘puppet
help <subcommand>‘
 for help
on a specific subcommand.

    Puppet
v2.
7.23

1、常用命令:

1. `puppet master` #编译配置文件、模板、节点的自定义插件

2. `puppet agent` #客户端进程,负责从Master获取数据

3. `puppet cert` #证书颁发,用于签署证书

4. `puppet kick` #远程控制agent,远程触发puppet agent命令

5. `puppet apply` #运行本地manifests

2、帮助:

1. `puppet doc` #生成puppet文档

2. `puppet help` #显示puppet帮助信息

3. `puppet resource` #查看资源帮助

4. `puppet describe` #资源帮助

5. `puppet status` #查看puppet状态

3、模块和不常用命令:

1. `puppet module` #从puppet forge创建、安装、查询模块

2.` puppet device` #远程管理网络设备

3. `puppet inspect` #发送report报告

4. `puppet filebucket` #在filebucket中检索和存储文件

5. `puppet queue` #队列进程

5 实例操作

启动

[[email protected] opt]# /etc/init.d/puppetmaster start

认证:

客户端发送请求            Puppeted --test –server testsns (testsns为client名称)

服务器查看                   Puppetca –list

服务器端签名               Puppetca –s –a //对所有客户端全部签名             Puppetca –s nfstest //只签名某个客户端  (nfs test为client名称)

1文件分发:

通过puppet可以向被管理机上推送文件,方法是使用file类型的source属性

1:修改/etc/puppet/fileserver.conf

2:修改/etc/puppet/manifests/ site.pp

实例:要把server服务器上/opt目录下的mysql-5.1.49-linux-i686-icc-glibc23.tar.gz传输至client服务器的/opt目录下,文件名不变。

第一步

Vi /etc/puppet/fileserver.conf

[files]

path /opt/

allow 192.168.133.0/24

第二步

vi /etc/puppet/manifests/site.pp

file

{ "/opt/mysql-5.1.49-linux-i686-icc-glibc23.tar.gz":

source => "puppet://$puppetserver/files/mysql-5.1.49-linux-i686-icc-glibc23.tar.gz",

}

第三步

在client客户端执行更新命令

puppetd --test --server testsns

此处“$puppetserver”是puppet Server端的名称,即hostname,网上教程都是在hosts里指定。testnsns为client名字

2修改文件属性:

实例:把/tmp/dd142/ puppet-2.6.13.tar.gz文件的权限改为puppet用户,并设置权限为666。

第一步:

编辑Server端的site.pp

vi /etc/puppet/manifests/site.pp

---内容如下

file

{ "/tmp/dd142/puppet-2.6.13.tar.gz":

owner => "puppet",

group => "puppet",

mode => 666,

}

第二步:

在client端执行命令

puppetd --test --server testsns

3执行SHELL命令或shell脚本:

实例:通过puppet分发执行shell脚本,在客户端的opt目录下新建一目录shelldir。

第一步:

编辑Server端的site.pp

vi /etc/puppet/manifests/site.pp

exec { "exec-mkdir":

cwd => "/opt",

command => "sh /opt/lgh.sh",

user => "root",

path => "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin",

}

第二步:

在client端编辑一shell脚本

vi /opt/lgh.sh

#!/bin/bash

mkdir /opt/shelldir

第三步:

在client端执行命令

puppetd --test --server testsns

4Hello World

实例:一个slave从master中获取其manifest,该maniftest要求slave依次做以下工作:安装gcc,创建文件夹/home/dxc/test,下载文件hello.c程序,编译hello.c。

(1)    假设代码结构组织

Master上代码的目录结构如下:

|– auth.conf

|– fileserver.conf   #puppet文件服务器配置文件

|– manifests   #puppet主文件所在目录

|   |– modules.pp        #puppet各个模块汇总

|   |– nodes         #各个slave要处理的模块

|   |   `– execHello.pp      #hello模块对应由那些slave处理

|   `– site.pp                  #puppet主文件(入口文件)

|– modules     #puppet的各个模块所在文件

|   `– hello   #hello模块

|       |– files    #该模块对应的文件资源,可能是要发送给slave的配置文件等

|       |   `– hello.c

|       `– manifests   #模块的manifest文件

|           `– init.pp                  #模块入口文件

`– ssl       #puppet的证书文件目录

(2)    程序执行流程

代码调用顺序是:

Slave发起连接请求 =》site.pp =》nodes =》modules =》init.pp

首先,slave向发起master连接请求,进行证书验证;

接着,证书验证通过后,master会直接找到入口文件manifests目录下的site.pp文件,该文件可能包含一些全局变量,参数缺省值(当各个模块没有设置这些参数时,它们的缺省值)以及其它pp文件的调用(在该例子中,会调用modules.pp和nodes下的各个pp文件);

然后,master通过nodes下的各个pp文件定位到该slave要执行的模块(init.pp是各个模块的入口),汇总这些模块代码返回给slave;

最后,slave根据master发过来的manifest,配置信息。

时间: 2024-08-08 05:26:06

puppet学习与精通之入门的相关文章

Puppet学习笔记(CentOS6.3+Puppet3.01)

Puppet学习笔记(CentOS6.3+Puppet3.01) 技术 Add comments Oct262012 下了决心,好好学习puppet,周末专门去参加一个puppet的培训,难得朋友那么热心,组织大家一起去学习.我就提前做一下功课. 2012年10月29日:参加完两天的培训,深刻体会到puppet的强悍,当然讲Puppet的朋友,还是非常有经验,不只是puppet经验,还有讲课的经验,学习一个新东西的经验.一个最大的收获:官方的文档非常好,把puppet读完,你就差不多. Cont

Struts学习傻瓜式入门篇

或许有人觉得struts不容易学,似乎里面的一些概念让未接触过的人迷惑,MVC1.MVC2.模式……我写这篇文章是想让从来没有接触过struts的人,能有个简单的入门指引,当然,系统地学习struts是必要的,里面有很多让人心醉的东东,那是后话了. 该案例包括首页,用户登陆.网站向导页面.就这么简单,没有深奥的struts概念,主要靠动手,然后用心体会. WEB Server用tomcat4.到http://jakarta.apache.org下载struts1.1,把zip文 件释放到c:\s

现代C++学习笔记之一入门篇:智能指针(C++ 11)

原始指针:通过new建立的*指针 智能指针:通过智能指针关键字(unique_ptr, shared_ptr ,weak_ptr)建立的指针 在现代 C++ 编程中,标准库包含智能指针,该指针用于确保程序不存在内存和资源泄漏且是异常安全的. 在现代 C++ 中,原始指针仅用于范围有限的小代码块.循环或者性能至关重要且不会混淆所有权的 Helper 函数中. 1 void UseRawPointer() 2 { 3 // Using a raw pointer -- not recommended

puppet学习之使用git实现puppet版本控制

puppet学习之使用git实现puppet版本控制 本文通过创建用户资源的例子介绍为多台agent同时添加用户账户.git仓库的创建.puppet加入git仓库.通过远程管理主机管理配置文件及文件版本的回滚处理. 一.系统环境 系统平台:Centos6.6_x86_64 主机规划: 192.168.115.21   puppet1.hnr.com  master 192.168.115.22   puppet2.hnr.com  agent 192.168.115.23   puppet3.h

RPC学习----Thrift快速入门和Java简单示例

一.什么是RPC? RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据.在OSI网络通信模型中,RPC跨越了传输层和应用层.RPC使得开发包括网络分布式多程序在内的应用程序更加容易. 二.什么是Thrift? thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和

刚刚学习完了Java入门,不知下一步

刚刚学习完了Java入门,学习了进阶,下一步不知道该往哪个方面继续学习了! 当初自学Java的时候就想着有一天可以编制出自己的软件,最好是可以引领生活,世界进步的(话有点大,没关系,还没有实现,谁知道呢)!刚才上网又自己查了一下,不知道<Java思想>怎么样,能不能看懂,是不是都是英文的??? 大神求助啊:迷茫中...

puppet学习—默认WEBRick安装DashBoard

DashBoard是puppet的控制台,用于显示puppet master和puppet agent的相关信息.本文以默认的WEBRick提供Web服务.DashBoard 安装在master.test.com.并且在客户端配置文件做如下配置 #vim /etc/puppet/puppet.conf [agent] report = true 一.安装依赖软件包 #rpm -ivh http://yum.puppetlabs.com/el/6Server/products/x86_64/pup

学习Android开发入门

学习Android开发入门第四章:类与对象(上)-掌握成员变量和局部变量的使用-掌握方法重载和重写-掌握构造方法的执行过程-掌握static关键字的使用-掌握多态 本章 链接:1)http://pan.baidu.com/s/1gdmm3Nt2)http://pan.baidu.com/s/1kTn0sCZ<5>第五章:类与对象(下)- 掌握包的概念及包语句- 掌握掌握各种访问权限- 掌握final和abstract关键字- 掌握接口的定义及使用- 使用Eclispe创建jar包 本章 链接:

3、Kafka学习分享|快速入门-V3.0

Kafka学习分享|快速入门 这个教程假定你刚开始是新鲜的,没有现存的Kafka或者Zookeeper 数据.由于Kafka控制控制脚本在Unix和Windows平台不同,在Windows平台使用bin\windows\ 代替 bin/,并且更改脚本扩展名为.bat. 第一步:下载编码 下载0.10.2.0版本并且解压它. 第二步:启动服务器 Kafka使用Zookeeper,因此如果你没有Zookeeper server,你需要先启动a ZooKeeper server.你可以使用Kafka的