集中管理利器-puppet快速入门-下

Puppet配置

1.    文件管理 file

文件服务器写法:

/etc/puppet/ fileserver.conf 定义

[files]

path /tmp/files  ## puppet数据存放目录 =è后面远程备份实战会用到

allow *.example.com

实战1: 备份masterc.shagent /tmp目录下。

代码:

##remote backup

filebucket{   main:
    server =>   "pmaster.example.com",
    path => false,
}

###备份master机上c.sh文件到agent /tmp目录下

file   {"/tmp/master.sh":
     source =>   "puppet://pmaster.example.com/files/c.sh",
     backup => main,
}

请留意如图中的目录结构

50.png

结果输出:

51.png

实战2: ##备份agent本地/etc/passwd文件到/tmp并命名为test3,如果文件已存在,先备份再覆盖

代码:

##备份agent本地/etc/passwd文件到/tmp并命名为test3

file   {"/tmp/test3":
    source => "/etc/passwd",
    backup =>   ".bak_$uptime_seconds",
    group => nobody,
    owner => nobody,
    mode => 600;
}

结果输出:

52.png

实战3##制定文件内容

代码:

##制定文件内容

file   {"/tmp/test4_content":
    content =>  "content test \n",
}

结果输出:

集中管理利器-puppet快速入门-下

集中管理利器-puppet快速入门-下

实战4##创建软链接测试

代码:

##创建软链接测试

file {"/tmp/test5_link1":
    ensure => link,
    target =>   "/var/log/messages";
    "/tmp/test5_link2":
    ensure => link,
    target =>   "/var/log/puppet/puppet.log";
}

结果输出:

集中管理利器-puppet快速入门-下

集中管理利器-puppet快速入门-下

实战5.##文件删除测试

代码:

##文件删除测

file   {"/tmp/test6":
    ensure => absent;
}

结果输出:

62.png

文件管理常用参数诠释:

1.backup参数
 
指定在文件内容替换之前进行备份操作,可以备份在本地,也可以集中备份。集中远程备份的话可以使用filebucket(我们在后面的实战部分会进行详细介绍),这个备份的时候如果备份在本地可以指定备份的文件名。

2.content参数
 
指定文件的内容(字符串),这个参数和sourcetarget参数冲突。

3.ensure参数
  这个参数指定是否创建、删除文件或者目录,有presentabsentfiledirectory等值。其中present会检查文件是否存在,不存在就会创建一个空文件。absent会删除文件或者目录,如果是目录需要指定recurse参数指定是否允许递归。如果指定的是其他的参数,则会创建连接文件,为了方便管理,建议在创建的时候使用ensure =>   link,并通过target参数指定文件。注意不能在windows系统上链接文件,

4.force参数
  该参数强制执行文件操作,进行如下操作的时候必须指定force参数
  1
purge 子目录
  2
)用文件或者链接文件替换目录
  3
)使用ensure =>   absent参数删除目录

5.group参数
  指定文件或者目录的属组,可以是组名或者组id,如果是windows的话属组和属主不能相同。

6.ignore参数
  这个参数指定在递归期间对符合指定的模式的文件操作将被忽略。

7.links参数
  这个参数指定处理文件期间如何处理链接文件,可以设置followmanage。在拷贝文件的时候,follow将会拷贝目标文件代替链接文件,manage将只会拷贝链接文件,ignore将会跳过。

8.mode参数
  这个参数用来指定文件或者目录的权限,puppet使用传统的unix权限方案,如果系统采用的权限方案不同的,puppet为这些系统将权限翻译成等价的权限,比如windows。这些权限可以是数字(r=4,w=2,x=1)也可以是字符(rwxst)

9.owner参数
  指定文件的属主,可以是用户名或是用户id,如果是windows的话属组和属主不能相同。

10.path参数
  指定文件管理的路径。Windows路径也使用/而不是\

11.purge参数
 
这个参数会删除在master上不存在的文件,这个参数只有在管理目录的时候指定了recurse =>   true参数的时候才有意义。

12.recurse参数
 
这个参数指定是否进行递归调用以及递归调用的深度,选项如下
  1
inf,true  —在远程和本地都进行递归调用
  2
remote —只在远程进行递归调用
  3
false —不进行递归调用
  4
[0-9]+ —true参数一样,但是限制递归调用目录的深度

13.source参数
 
该参数指定将会被拷贝到指定位置的资源文件,值可以是指定远程文件的URIS或者本地的完整路径。可以指定多个sorce,这个参数和contenttarget冲突。

14.target参数
 
这个参数指定创建链接文件的目标文件或者目录。 

文档参考:

http://docs.puppetlabs.com/references/stable/type.html#file

http://www.jbxue.com/

1.    用户管理

代码:

###用户管理

group{"py":           #组名
ensure =>   "present",    #创建用户组
gid => 2002,           #组id
name =>   "py",
}
 
user{"py":
    #ensure => "absent",  #删除py用户
    ensure => "present",  #新增py用户
    uid => 2002,
    gid => 2002,
    home => '/home/py',
    shell => "/bin/bash",
    password => '$1$zRFsT1$X3TE0/smnkWtxE2P.BPWq/',  #grub-md5-crypt 工具生成
 
}
file   {"/home/py":        #创建用户家目录
    group => 2002,
    owner => 2002,
    mode => 700,
    ensure => directory;
}

结果输出:

63.png

用户管理常用参数诠释:

1.manages_aix_lam
 
用来管理AIXLAM(Loadable Authentication Module)系统。

2.manages_members
 
对于目录服务是组属性成员,而不是用户。

3.system_groups
 
用来允许你创建比较小GID的系统组,一般小于500

()Puppet组管理参数

1.allowdupe
 
是否允许重复的GIDS,默认是false

2.attributes
 
在一个key=>value对中指定AIX组的属性,需要manages_aix_lam特性。

3.ensure
 
创建或者删除组,值为presentabsent

4.gid
 
ID,如果不指定的话会自动生成一个数字,但是不建议这么做。

5.ia_load_module
 
使用I&A模块来管理用户,同样需要manages_aix_lam特性。

6.members
 
用来指定组的成员。

7.name
 
指定组的名字。

8.provider
 
使用group资源的后端。这些后端包括:
  aix — AIX
的组管理。
  directoryservice —
OS X上使用目录服务进行组管理。
  groupadd —
使用groupadd管理组,大部分的平台默认识用这个来管理。
  ldap —
通过ldap进行组管理。
  pw —
freebsd平台上通过pw进行组管理。
  windows_adsi —
windows平台上使用本地用户管理。

9.system
 
指定组是否是小GID的系统组。

二、用户的管理

()Puppet用户管理特性
  1.allows_duplicates
 
支持含有相同UID的用户。

2.manages_aix_lam
 
用来管理AIXLAM(Loadable Authentication Module)系统。

3.manages_expiry
 
管理一个用户使用的有效期。

4.manages_homedir
 
创建或者删除用户的家目录。

5.manages_password_age
 
设置密码时间需求和限制。

6.manages_passwords
 
更改用户的密码,通过传入密码hash字串,后面实战部分会详细介绍。

7.manages_solaris_rbac
 
管理角色和普通用户。

8.system_users
 
用来允许你创建比较小GID的系统用户,一般小于500

()Puppet用户管理参数

1.allowdupe
 
是否允许重复的UID

2.attributes
 
为用户指定AIX属性,需要manages_aix_lam特性。

3.auths
 
指定用户的认证方式。

4.comment
 
用户的描述。

5.ensure
 
指定用户所处的基本状态。其值可以为:presentabsentrole

6.expiry
 
用户使用期限。

7.gid
 
设置用户的组ID。可以是数字也可以是组名。

8.groups
 
设置用户的组名,只能是组名,不能是GID

9.home
 
设置用户的家目录。

10.   ia_load_module
 
使用I&A模块来管理用户,同样需要manages_aix_lam特性。

11. managehome
 
当进行用户管理的时候,是否同时管理用户的家目录。

12. name
 
指定用户名。

13. password
 
指定用户的密码,后面的实战部分会详细讲解。

14.   password_max_age
 
一个密码在必须更改之前能使用的最多天数。

15.   password_min_age
 
一个密码在必须更改之前能使用的最少天数。

16. profiles
 
指定用户拥有的配置文件。

17. project
 
和用户相关的项目的名字,需要manages_solaris_rbac特性。

18. provider
 
使用user资源的后端。这些后端包括:
  aix — AIX
的用户管理。
  directoryservice —
OS X上使用目录服务进行用户管理。
  Hpuxuseradd — HP-UX
的用户管理。
  ldap —
通过ldap进行用户管理。
  pw —
freebsd平台上通过pw进行用户管理。
  user_role_add — solaris
的用户和角色管理。
  useradd —
通过useradd进行用户管理,加入你要进行密码管理的话,需要安装rubyshadow密码库,一般是ruby-libshadow
  windows_adsi —
windows平台上使用本地用户管理。

19. roles
 
用户的角色,针对solaris系统适用。

20. shell
 
指定用户登录的shell

21. system
 
指定用户是否为系统用户,一般是小于500UID用户。

22.uid
 
指定用户的UID

文档参考:

http://docs.puppetlabs.com/references/latest/type.html#user
http://docs.puppetlabs.com/references/latest/type.html#group

http://www.jbxue.com/

1.    命令执行

代码:

/etc/puppet/manifests/site.pp   配置

file   {"/tmp/mysql_test/mysql_test.tgz":    ##将pmaster /tmp/files/mysql_test.tgz文件下发到agent /tmp/mysql_test/目录下
    source =>   "puppet://pmaster.example.com/files/mysql_test.tgz",  
 
}
exec {   "unzip tgz packget":
    command => "tar -xvf   /tmp/mysql_test/mysql_test.tgz",     ###所有命令必须为全路径或者path参数指定命令搜索路径
    path =>   "/usr/bin:/usr/sbin:/bin:/sbin",
    cwd =>   "/tmp/mysql_test"  ##命令执行的路径为: /tmp/mysql_test/
    creates =>   "/etc/my.cnf"  #当/etc/my.cnf不存在的时候,才会执行该命令
    tries => 2,  #重试次数
    try_sleep => 3, #重试间隔 s为单位
 }

结果输出:

64.png

常用参数诠释:

1. command
 
指定要执行的命令。如果忽略,这个参数的值默认为资源的标题。必须填写命令的完整路径或者提供这个命令的查找路径。假如命令执行成功,执行过程的输出将会记录到普通(normal)日志中,但是如果命令执行失败,任何的输出都会记录到错误日志中

2. creates
 
命令创建的一个文件。加入这个参数设置的话,只有这个文件不存在的时候命令才会执行,例子:

3. cwd
 
命令执行的路径。假如目录不存在,命令执行将会失败。

4. environment
 
为命令设置附加的环境变量。加入你用这个参数设置PATH,那么将会把path参数的值覆盖。多个环境变量需要使用数组指定。

5. group
 
执行命令运行的用户组。这个看起来在各个平台运行结果不确定,这是平台的问题不是ruby或者puppet的问题。

6. logoutput
 
是否记录输出信息。默认会根据exec资源的日志等级来记录输出信息,使用on_failure只有当命令执行出错的时候才会记录输出信息。值可以为truefaleson_failure和任何合法的日志等级。

7. onlyif
 
只有onlyif指定命令执行返回为0的时候,命令才会执行

8. path
 
命令执行搜索的路径。如果没有指定path,命令需要填写完整的路径。路径可以指定为一个数组并通过冒号分隔。

9.timeout
 
指定命令运行的最长时间。假如命令执行的时间查过timeout设定的时间,那么就会认为命令执行失败了并且会停止该命令。设置为0表示没有执行时间限制。时间以秒为单位。

10.tries
 
命令执行重试次数,默认为1。设置这个参数命令将会重试你设置的次数直到合理的代码返回。

11.try_sleep
 
设置命令重试的间隔时间,单位是秒。

12.user
 
指定执行命令的用户。
 
备注:加入你使用这个参数,任何错误输出不会在当下扑捉。这是源自ruby内部的一个bug

文档参考:

http://docs.puppetlabs.com/references/latest/type.html#exec

http://www.jbxue.com/

1.    cron 管理

实例:

cron { "sh   /tmp/a.sh":
    command => "/bin/sh   /tmp/a.sh",
    user=> root,
    minute    => '*/3'
    #ensure    => "absent";     ##cron删除
}

结果输出:

65.png

Cron管理常用参数诠释

1.command
 
计划任务执行的命令,最好指定命令的完整路径。

2.ensure
 
定义资源是否存在,也有通过这个参数来删除指定的计划任务。可能的值为presentabsent

3.environment
 
和这个计划任务有关的环境变量,比如设置PAHT,   PATH=/bin:/usr/bin:/usr/sbin

4.hour
 
指定计划任务X小时运行,如果指定话,值的范围必须设置在0-23之间。

5.minute
 
指定计划任务在X分钟运行,如果指定话,值的范围必须设置在0-59之间。

6.month
 
指定计划任务在一年中的X月运行,如果指定话,值的范围必须设置在1-12之间。

7.monthday
 
指定计划任务在一个月的X天运行,如果指定话,值的范围必须设置在1-31之间。

8.name
 
指定计划任务的名字,这个名字只是提供给任命做参考,并且

9.target
 
计划任务的存放位置。

10. user
 
指定执行计划任务中命令的用户。puppet不会去检查用户是否运行执行计划任务,但是这个用户必须允许执行计划任务。默认的用户为运行puppet的用户。

11. weekday
 
指定计划任务在一周的X天运行。如果指定话,值的范围必须设置在0-7之间。注意0是表示星期天。

1.    常用命令归类

puppet genconfig      #查看当前配置

service   puppetmasterd start   #启动puppetmaster

service puppet   start     ##启动客户端

客户端的运行报告在服务器端:/var/lib/puppet/reports/
 
每次运行会生产一个报告,报告文件名为:/var/lib/puppet/reports/hy18.uniqlick.com/201108020948.yaml

Agent  /etc/hosts中添加主机信息

puppetmasterd –genconfig   > puppet.conf

puppet master   –verbose –no-daemon

puppet agent   –server=pmaster –no-daemonize –verbose    ##agent   連接server

使用—waitforcert 參數改變agent等待時間

puppetmasterd   –configprint modulepath  ##打印默认路径

puppet cert –list  ##显示等待签名的服务器

puppet cert   –sign node1.example.com  ##签名

puppert cert –sign   –all #对所有等待的证书进行签名

服务器控制客户端立即运行

puppet kick 

官网不建议使用,只检查客户端返回状态,不检查命令执行结果,且新版本会弃用,这个功能建议puppet加强                    

70.png71.png

1.    配置Agent

/etc/puppet/

puppet.conf:

[agent]
listen = true

72.png

auth.conf   红色部分为新增

path /run
auth any
method save
allow   pmaster.example.com
# this one is   not stricly necessary, but it has the merit
# to show the   default policy which is deny everything else
path /
auth any

2.    demo方式启动agent

service puppet restart    ###启动成功不代表成功了,netstat确认端口被监听,puppet这块功能有待完善

 73.png

3.    Master远程确认8139端口可通,执行puppet kick

74.png

4.    agent确认最终结果

5. 报错参考:

1.连接master的时候出现如下报错:
  dnsdomainname: Unknown host
  解决办法:
  检查机器主机名的设置,以及是否添加进hosts。

2. 连接master的时候出现如下报错:
  err: Could not request certificate: getaddrinfo: Name or service not known
  解决办法:
  服务器端没有配置hosts域名绑定,在hosts中添加。

3.连接master的时候出现如下报错:
  warning: peer certificate won't be verified in this SSL session
  解决办法:
  服务端还没有返回签发证书,使用puppet cert –list查看

4. 连接master的时候出现如下报错:
  err: Could not retrieve catalog from remote server: certificate verify failed
  解决办法:
  客户端和服务器端时间不同步,SSL连接需要依赖主机上的时间是否正确。
  执行更新时间的命令:/sbin/ntpdate asia.pool.ntp.org

class类的尝试

1.    配置主配置文件:

75.png

#   cat site.pp

import  'nodes/nodes.pp'
node default {
file {   "/tmp/linuxlst.txt":
       owner    => root,
       group    => root,
       ensure => present,
    content =>"good morning!\n",
     mode    => 644,
}

#   cat nodes/nodes.pp

node   'node1.example.com' {
    #include test::test
    include mysql::mysql
}

2.    单独配置mysql模块

#查看puppet默认加载的模块目录, —即在这些目录下的配置会被默认加载

76.png

[root@pmaster   puppet]# pwd

/etc/puppet

[root@pmaster   puppet]# tree modules/           ##/etc/puppet/modeles目录下进行本次的类配置

modules/
|-- mysql
|   |-- manifests
|   |     |-- config.pp
|   |     |-- init.pp
|   |     |-- install.pp
|   |     `-- service.pp
|   `-- template
|       `-- my.cnf.erb
`-- test
    `-- manifests
        `-- init.pp

77.png

#   cat modules/mysql/manifests/config.pp   #类似python,*.pp必须和定义的类名保持一致

class mysql::config{
file   {"/tmp/mysql_test/mysql_test.tgz":    ##将pmaster   /tmp/files/mysql_test.tgz文件下发到agent   /tmp/mysql_test/目录下
    source =>   "puppet://pmaster.example.com/files/mysql_test.tgz",  
}
}

#   cat modules/mysql/manifests/install.pp    #类似python,*.pp必须和定义的类名保持一致

class mysql::install{
exec {   "unzip tgz packget":
    command => "tar -xvf   /tmp/mysql_test/mysql_test.tgz",     ###所有命令必须为全路径或者path参数指定命令搜索路径
    path =>   "/usr/bin:/usr/sbin:/bin:/sbin",
    cwd =>   "/tmp/mysql_test",  ##命令执行的路径为: /tmp/mysql_test/
    creates =>   "/etc/my.cnf",  #当/etc/my.cnf不存在的时候,才会执行该命令
    tries => 2,  #重试次数
    try_sleep => 3, #重试间隔 s为单位
}
}

#   cat modules/mysql/manifests/init.pp   #init.pp中定义包涵的所有类

class   mysql::mysql{
    include mysql::install,mysql::config
}

3.    agent上验证结果:

puppetd –test   –server pmaster.example.com

4.    好处:

通过如上方式,一个模块一个目录,干净整洁,且于维护配置,且利于功能模块复用.

5.    示例:

78.png

Ok,截止如上,puppet基本配置大家已经掌握,文章开始的问题大问题在学习的过程中大家可能已经在答案了,部分问题还需要大家自己再摸索.

对于Puppet的个人感觉:

1.       对没有一定基础的同学,入门较难;

2.       因灵活性,扩展性,语言方面限制大企业应用较难,主要针对中小型企业的应用;

3.   在对正确性及灵性要求较高的情况下,puppet适用性会受到质疑;

如上仅代表个人见解,如有不对,请谅解.

有兴趣同学进一步的学习方向

Ø  Puppet Master 负载均衡配置

Ø  精通Class类配置

Ø  Puppet 图形界面dashboard / Foreman的安装配置

Ø  Puppet 内置web界面替换(如用nginx,apache代替)

Ø  Puppet factor 自定义信息收集(需对ruby语言有一定了解)

原创文章,作者:stanley,如若转载,请注明出处:http://www.178linux.com/3987

(0)
stanleystanley
上一篇 2015-05-07
下一篇 2015-05-11

相关推荐

  • 文件系统管理_设定文件系统的配额

    认识配置配额系统 :为控制用户使用的空间的大小,在linux可以实现对分区的大小控制,控制用户在这个分区内使用空间的大小同时还可以对用户的文件个数实现控制。 在linux系统中其遵循文件分区来实现控制 磁盘的配额只针对单个分区来实现控制,不能对单块磁盘(硬盘)来实现控制的 【搭建试验环境 1】 怎样把某一个文件夹(/home)单独放到(迁移)一个独立的分区中…

    Linux干货 2017-04-24
  • 网络25期第一周作业

    一、计算机硬件的组成及功能 1、控制器       控制器负责从存储器中取出指令,并对指令进行译码。控制器主要是由指令寄存器、译码器程序计数器、操作控制器等组成。 2、运算器      运算器又称算数逻辑单元,是计算机进行算术计算和逻辑计算的部件。 3、存储器 &nbs…

    Linux干货 2016-12-06
  • Python第一周小结

    经历了两个星期Linux运维基础的铺垫,这周我们正式开始了python的学习。经过第一周的各种挣扎以及反复训练,终于有所收获了一点东西。现在将第一周中学到的一个非常重要的算法技巧总结如下: 即:折半思想 例:给定一个不超过五位数的正整数,判断该数有几位数 Code1:                                              …

    Linux干货 2018-03-26
  • OpenSSL用法详解

    OpenSSL用法详解 OpenSSL:        组件:libcrypto,libssl                 openssl &nb…

    Linux干货 2016-09-23
  • 马哥教育网络班21期+第6周课程练习

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@localhost ~]# cp /etc/rc.d/rc.sysinit /tmp/ [root@localho…

    Linux干货 2016-08-15
  • System作业

    1、求每班总成绩和平均成绩 [root@Centos7 bin]# awk '!/^name/{a[$2]++;b[$2]+=$3}END{for(i in a){print i,b[i],b[i]/a[i]}}' f1 4 100 50 5&nbs…

    Linux干货 2016-09-20