推荐-自动化运维之puppet小试牛刀

 一、puppet介绍

      puppet是IT基础设施自动化管理工具,“她”能够帮助系统管理员管理基础设施的整个生命周期:供应(provisioning、配置(configuration)、联动(orchestration)及报告(reporting)。

      基于puppet,可实现自动化重复任务、快速部署关键行应用以及在本地或云端完成主动管理变更和快速扩招架构规模等。遵循GPL协议(2.7.0-),基于ruby语音开发, 2.7.0以后使用(Apache 2.0 license),对应系统管理员是抽象的,只依赖于ruby于facter,能管理多达40多种资源,列如:file、user、grup、host、package、service、cron、exec、yum repo等,适合整个软件的生命周期管理。puppet适用开发环境、测试环境、生产环境。

 

二、puppet工作方式:

 

三、puppet的工作模型有单机(agent)和master/agent模型,基于SSL认证机制。

puppet-work.jpg

 

三、puppet工作模型:

   puppet通过声明性、基于模型的方法进行IT自动化管理

        定义:通过puppet的生命性配置语言定义基础设置配置的目标状态;

        模拟:强制应用改变的配置之前先进行模拟性应用;dry-run

        强制:自动、强制部署达成目标状态,纠正任何偏离的配置;

        报告:报告当下状态及目标状态的不同,以及达成目标状态多进行的任何强制性改变;


四、puppet管理的常用类型:package, user, group, file, service, exec, cron, notify

        

notify {'title':
               message  => 'something here',
          }

package的常用属性:
       ensure:present, installed, absent, latest
       name: 包名
       source:包文件的路径,可以是本地文件系统路径,也可以网络文件路径;
        puppet:///modules/MODULE_NAME/FILENAME

            
           package{'mysql':
           ensurce  => installed,
           provider  => msi,
           source   => "D:\mysql\mysql-5.5.45.msi",
            install_options =>  {'INSTALLDIR' => 'C:\mysql'},
           }

file的常用属性:
       content:直接生成的文件内容;
        生成方式有三种:
         ensurce: file, directory, link, absent
           source: 通过指定的URL下载文件至目标位置;
           target: 符号链接文件的链接目标;
           owner: 属主
           group: 属组
           mode: 权限
           path:文件路径
           force: 强制删除;仅用于ensure为absent时;
           purge: 清除指定目录中存在的,但是在puppet中未定义的文件;
           replace:是否替换已经存在的文件;

                          

 service的常用属性:
       ensure:
        true, running
        false, stopped
       enable: 是否开机自动启动
       name:服务名称
       path: 服务脚本路径

       start:
       stop:
       restart: reload
       status:

exec的常用属性:
       用于执行命令;但通常仅应该用于必须执行命令才能完成操作时(puppet本身无法完成此功能);

       command: 要执行的命令,通常应该使用绝对路径;
       path:为非绝对路径的命令指定搜索路径;
        user:
       group:

      refresh: 默认为收到依赖的资源的事件时会重新执行此命令;但此属性可以修改此默认行为;
       refreshonly: 此资源不会自动被执行,除非被依赖的资源发生了改变;
       returns: 指定状态返回值;

            
group的常用属性:
       ensure: present, absent
       name: 组名
       gid: GID
       system: 是否为系统组;true, yes; false, no

user的常用属性:
       ensure: present, absent
       name: 用户名
       uid: UID
       system: 是否为系统用户;
       gid: 基本组;
       groups: 附加组;
       home: 家目录;
       password: 密码;
       shell: 默认shell

cron的常用属性:
       ensure: present, absent
       command: 周期性执行的命令;
       environment: 定义PATH环境变量;
       hour:
       minute:
       month:
       monthday:
       weekday:

                    

 资源的特殊属性:
   元参数:用于定义资源间的关系
    before => Type['title']
    require => Type['title']


五、centos7安装配置puppet


1、分别修改master/agent里的/etc/hosts  

      192.168.139.128         agent.puppet.com

      192.168.139.131         master.puppet.com

     vim /etc/hostname (分别执行)

      agent.puppet.com

      master.puppet.com

2、关闭防火墙selinux确定2台机器时间一致

3、安装epel源,下载地址https://fedoraproject.org/wiki/EPEL/zh-cn   (2台都安装)

   安装: rpm -Uvh epel-release-7.no

   yum -y install ruby ruby-libs ruby-shadow(puppet需要)

4、安装master端 

    yum -y  install puppet(client端) puppet-server facter(相当于  资产管理的一个东西,能自动汇报或者获取客户端信息(如,软件环  境,操作系统等))

   配置master端:puppet的主配置文件为:/etc/puppet/puppet.conf   

添加如下内容:

                            [master]

                            certname=master.puppet.com  //服务端的名字

改 证书保存地址,建议放在 /var/puppet/ssl    (/var/puppet/  文件夹需要手动创建,并将拥有者改为:puppet用户和组)

                            [main]

                            ssldir=/var/puppet/ssl

                            mkdir -pv /var/puppet   chown -R puppet:puppet /var/puppet 

创建 touch /etc/puppet/manifests/site.pp 文件,如果有就不用创建,如果没有请创建,这个文件关系到puppetmaster能否启动。

启动: service puppetmaster start       service puppet start

 

查看puppet支持命令:puppet help

查看支持的资源类型:
  puppet describe -l
  puppet describe -s TYPE
  puppet describe TYPE

 

定义资源的要点:
  1、同一种类型中,资源名称必须惟一;
  2、资源名称是否区分大小与取决于OS;

 

六、证书申请

    

Puppet注册方式基本上有三种:自动注册、手动注册和预签名注册,不同的注册方式决定了注册的难易程度,当然安全性也会不一样。

 

手动注册:

   手动注册是由Agent端先发起证书申请请求,然后由Puppetserver端确***方可注册成功,这种注册方式安全系数中等,逐一注册(puppet cert --sign certnmame)在节点数量较大的情况下是比较麻烦的,效率也低,批量注册(puppet cert --sign --all)效率很高,一次性便可注册所有的Agent的请求,但是这种方式安全系数较低,因为错误的请求也会被注册上。

 

1、节点申请注册

 

[root@agent ~]# puppet agent –test

info: Creating a newSSL key foragent_cert.puppet.com

info: Caching certificate forca

info: Creating a newSSL certificate request foragent_cert.puppet.com

info: Certificate Request fingerprint (md5): 69:D2:86:E4:7F:00:E0:55:61:19:02:34:9E:9B:AF:F9

Exiting; no certificate found and waitforcert isdisabled
 

2、服务器端确定认证

[root@master ~]# puppet cert –list –all #查看认证情况

  "agent_cert.puppet.com"  (69:D2:86:E4:7F:00:E0:55:61:19:02:34:9E:9B:AF:F9) #未认证

+ "master.puppet.com"(C0:E3:6B:76:36:EC:92:93:4D:BF:F0:8F:77:00:91:C8) (alt names: "DNS:puppet", "DNS:puppet.puppet.com", "DNS:master.puppet.com")

[root@master ~]# puppet cert –sign agent_cert.puppet.com #注册agent

notice: Signed certificate request foragent_cert.puppet.com #将请求的证书正式注册

notice: Removing file Puppet::SSL::CertificateRequest agent_cert.puppet.com at '/var/lib/puppet/ssl/ca/requests/agent_cert.puppet.com.pem'#删除请求

[root@master ~]# puppet cert –list –all #再次查看认证情况

+ "agent_cert.puppet.com"  (3E:46:4E:75:34:9A:5A:62:A6:3C:AE:BD:49:EE:C0:F5)

+ "master.puppet.com"(C0:E3:6B:76:36:EC:92:93:4D:BF:F0:8F:77:00:91:C8) (alt names: "DNS:puppet", "DNS:puppet..com", "DNS:tmaster.puppet.com")

[root@master ~]# tree /var/lib/puppet/ssl/ #另外一种查看认证的方式

/var/lib/puppet/ssl/

├── ca

│   ├── ca_crl.pem

│   ├── ca_crt.pem

│   ├── ca_key.pem

│   ├── ca_pub.pem

│   ├── inventory.txt

│   ├── private

│   │   └── ca.pass

│   ├── requests

│   ├── serial

│   └── signed

│       ├── agent_cert.puppet.com.pem  #已经注册成功

│       └── master.puppet.com.pem

├── certificate_requests

├── certs

│   ├── ca.pem

│   └── master.kisspuppet.com.pem

├── crl.pem

├── private

├── private_keys

│   └── master.puppet.com.pem

└── public_keys

    └── master.puppet.com.pem

9directories, 14files
 
[root@agent ssl]# puppet agent –test   //agent测试是否授权成功

    Info: Caching certificate for agent.puppet.com

    Info: Caching certificate_revocation_list for ca

    Info: Caching certificate for agent.puppet.com

    Info: Retrieving pluginfacts

    Info: Retrieving plugin

    Info: Caching catalog for agent.puppet.com

    Info: Applying configuration version '1458054475'

    Notice: Finished catalog run in 0.01 seconds

    出现以上信息说明授权成功

重新授权:

            a、删除agent  rm -rf /var/puppet/ssl/*

            b、删除master rm -rf  /var/puppet/ssl/ca/signed/agent1_cert.kisspuppet.com.pem

            c、agent重新请求证书 puppet agent –test

            d、master授权证书    puppet cert –list  puppet cert –sign agenet.puppet.com

 

七、puppet操作file、cront、user、group

     

1、创建文件测试(先授权好agent证书)

                master端:

                vim /etc/puppet/manifests/site.pp

                node default {

                        file    { "/tmp/test.txt" :

                                   content=>"Is jude puppet test\n" ;

                        }

                }

                agent端:   注意:第一次编site.pp后需要重启master

                puppet agenet –test

            

2.基于用户创建日志清理脚步:

    vim /etc/puppet/manifests/site.pp

                clearlog.sh default {

                        file    { "/tmp/clearlog.sh" :

                                   content=>"find /log/ -type f -size 100KB |xargs rm -f\n" ,

                                   mode=>"0777",

                                   group=>"puppet",

                                   owner=>"puppet",

                        }

                }

                                    puppet agenet –test

 

3、puppet文件推送resolv.conf

            a、添加共享模块  vim /etc/puppet/fileserver.conf

                [system_conf]

                path /etc/puppet/system_conf/

                allow *

                cp /etc/resolv.conf   /etc/puppet/system_conf/

         b、添加文件资源

                vim /etc/puppet/manifests/site.pp

                file { "/etc/resolv.conf":

                mode=>644,

                source=>"puppet://master.puppet.com/system_conf/resolv.conf

                }

               可以配置: 系统文件  hosts resolv.conf  i18n  yum配置文件、脚本等

 

4、puppet管理cron

            vim /etc/puppet/manifests/site.pp

            cron { "ntp togbu –by jude 20160316":

                    command =>"/usr/sbin/ntpdate pool.ntp.ort >/dev/null 2>&1",

                    minute =>'*/10',

                    hour =>['2-4'],

                    monthday =>[2,4],

                     ensure=> present,

                     user =>puppet,

                     environment => "PATH=/bin:usr/bin:/usr/sbin"

                        }

                    ensure=> absent,第二次修改删除用

        

 

                                                                                                                          

 

   感谢马哥,每天进步一点点!  

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

(0)
n18-juden18-jude
上一篇 2016-04-05
下一篇 2016-04-05

相关推荐

  • N25-第15周博客作业

    1、总结sed和awk的详细用法; sed [OPTION]…  ‘script’  [input-file] … script: 地址定界编辑命令 常用选项: -n:不输出模式空间中的内容至屏幕; -e script, –expression=script:多点编辑;…

    Linux干货 2017-05-21
  • 脚本小练习

    1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。                            …

    Linux干货 2016-08-15
  • 第五周学习总结-rpm&yum

    我们都知道,计算机只能识别二进制程序,而程序员编写的源代码都是以纯文本形式存在,因此,要想让计算机识别并运行这些源代码程序,就必须通过中间的转换机制让源代码变为二进制程序文件,而这种转换过程就称为编译过程。Linux的各发行版本中由于各厂商的编译过程不尽相同,因此就诞生了各种不同的软件管理包组件。其中我们最熟知的就要数Redhat系列的rpm包了。 rpm包…

    2018-01-03
  • lvs

    Lvs 一、lvs集群的类型:4类工作模式 1.1、lvs-nat 特点:通过将请求报文中的目标地址和目标端口修改为挑选出的某RS的RIP和PORT实现转发。 客户端访问lvs集群服务,此时报文的源地址为cip,目标地址为vip,通过lvs进行dnat转发后端服务器主机,此时,报文的源地址为cip,目标地址为rip;后端主机响应时,报文源地址为rip,目标地…

    Linux干货 2016-10-30
  • 文件的权限详解(二)ACL篇

    文件的权限详解(二)ACL篇 ACL访问控制列表作用: 1、 ACL:Access Control List,实现灵活的权限管理2、 除了文件的所有者,所属组和其它人,可以对更多的用户设置权限3、 CentOS7.0默认创建的xfs和ext4文件系统有ACL功能。4、 CentOS7.X之前版本,默认手工创建的ext4文件系统无ACL功能。需手动增加: tu…

    Linux干货 2016-08-05
  • 第三周博客作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 ~]# who | cut -d' ' -f 1 |sort |uniq -c 2、取出最后登录到当前系统的用户的相关信息。 ~]# last | head -1 3、取出当前系统上被用户当作其默认shell的最多的那个shell。 ~]# cat…

    Linux干货 2016-12-14

评论列表(2条)

  • stanley
    stanley 2016-04-05 23:02

    赞,详细,堪称手册。这么好的文章不写标签没有收录率,不容易被收录。
    markdown 可以使文章上好几个档次

    • n18-jude
      n18-jude 2016-04-06 10:56

      @stanley谢谢,时间比较赶,写的还不够好。