[关闭]
@sasaki 2016-04-22T16:40:36.000000Z 字数 5032 阅读 2729

Puppet集中式配置管理系统学习使用

Pricatice


版本控制

  1. @Title Puppet集中式配置管理系统学习使用
  2. @Version v1.0
  3. @Timestamp 2015-12-15 17:49
  4. @Author Nicholas
  5. @Mail redskirt@outlook.com

本文大部分参考自:http://dreamfire.blog.51cto.com/418026/1370853/
在制作Demo过程中也遇到一些小的bug,参考这个页面得以解决:http://www.oschina.net/question/54100_31764
关于Puppet架构及基本原理的学习,可参考:http://dongxicheng.org/cluster-managemant/puppet/

前言

最近小组需要每人准备一份有关开源工具的分享Topic,轮到我准备的是Puppet,阅读了一些资料,部署演示了一个Demo。

注意:本实验完全采用自定义的certname名,如果不设置默认会使用系统变量hostname的值。

一、Puppet简介

  1. Puppet架构
    infrastructure.jpg-30.6kB

    puppet2是一个为实现数据库中心自动化管理而设计的配置管理软件。基于c/s架构。puppet的服务器端保存着所有的对客户端服务器的配置代码,在puppet里面叫做manifest。客户端下载manifest之后,可以根据manifest对服务器进行配置,例如软件包管理,用户管理和文件管理等等。
    总之,Puppet把日常的系统管理任务代码化,代码化的好处是可以分享,保存,避免重复劳动,也可以快速恢复以及快速的大规模部署服务器。同时,manifest可以的根据客户端服务器的配置情况(硬件和软件)来动态生成。
    在Unix/Linux系统管理的内容上面,通常就是管理软件包,用户,文件内容以及crontab等。在puppet的世界里面,这些内容都被看作是“资源”,每种资源都有对应的属性,例如软件包有安装和不安装的属性,文件有权限属性。puppet的代码主要就是由这些资源和资源的属性构成。

    Puppet是一种集中式配置管理系统。

    Puppet,您可以集中管理每一个重要方面,您的系统使用的是跨平台的规范语言,管理所有的单独的元素通常聚集在不同的文件,如用户,CRON作业,和主机一起显然离散元素,如包装,服务和文件。
    Puppet的简单陈述规范语言的能力提供了强大的classing制定了主机之间的相似之处,同时使他们能够提供尽可能具体的必要的,它依赖的先决条件和对象之间的关系清楚和明确。

  2. 文档库
    puppet官网:
    https://docs.puppetlabs.com/
    提供两种类型文档:

    • Puppet Enterprise
    • Open Source Puppet

    QQ截图20151217101231.png-60kB

    当前最新版本Puppet 4.3,本文使用的Puppet 2.7。

  3. Puppet有两种执行模式

    • 直接读取puppet file.manifest配置
    • 通过puppetd --server puppetmaster.server.com,从服务端下载manifest配置
  4. Puppet语法
    因为puppet是用ruby编写的,因此puppet的语法也和Ruby类似,都是很简单的面对对象的高级语言。
    puppet把需要管理的内容抽象成为资源,每种资源有不同的属性,因此puppet语言就是描述这些资源的属性以及资源之间关系的语言。
    有关语法具体可参考官方文档:
    http://docs.puppetlabs.com/puppet/2.7/reference/index.html

二、安装Puppetmaster

Puppet的安装非常简便,用Yum安装即可,但是我CentOS系统默认的yum源没有Puppet相关包,使用阿里云的源(mirrors.aliyun.com)得以安装。

  1. 安装Puppet-server、puppet和facter(Master节点)

    1. [root@master ~]# yum install puppet puppet-server facter
  2. 配置puppet.conf
    注意:这个里面配置了两个certname名称,其中[master]中配置的certname是为所有节点认证用的master名称,[agent]中配置的certname是他本身agent的名称,当然不配置默认是和master的名称是一样的。

    1. [root@master puppet]# vim /etc/puppet/puppet.conf #注释已删除
    2. [main]
    3. logdir = /var/log/puppet #默认日志路径
    4. rundir = /var/run/puppet #PID存放路径
    5. ssldir = $vardir/ssl #证书存放目录,默认为/var/lib/puppet
    6. [agent]
    7. cername=slave01
    8. runinterval=3600
    9. listen=true
    10. [master]
    11. certname=master
  3. 创建site.pp文件
    site.pp文件是puppet读取所有模块pp文件的开始,在3.0版本以前必须设置,否则服务无法启动。

    1. [root@master ~]# touch /etc/puppet/manifests/site.pp
  4. 启动Puppetmaster服务

    1. [root@master puppet]# /etc/init.d/puppetmaster restart
    2. Stopping puppetmaster: [ OK ]
    3. Starting puppetmaster: [ OK ]
  5. 查看本地证书情况

    1. [root@master puppet]# tree /var/lib/puppet/ssl/
    2. /var/lib/puppet/ssl/
    3. ├── ca
    4.    ├── ca_crl.pem
    5.    ├── ca_crt.pem
    6.    ├── ca_key.pem
    7.    ├── ca_pub.pem
    8.    ├── inventory.txt
    9.    ├── private
    10.       └── ca.pass
    11.    ├── requests
    12.    ├── serial
    13.    └── signed
    14.    ├── master master.pem
    15.    ├── master.pem
    16.    └── slave01.pem
    17. ├── certificate_requests
    18. ├── certs
    19.    ├── ca.pem
    20.    ├── master master.pem
    21.    └── master.pem
    22. ├── crl.pem
    23. ├── private
    24. ├── private_keys
    25.    ├── master master.pem
    26.    └── master.pem
    27. └── public_keys
    28. ├── master master.pem
    29. └── master.pem
    30. 9 directories, 18 files
    31. [root@master puppet]# puppet cert --list --all #带+标示已经认证成功
    32. + "master" (33:57:A7:AC:DC:B7:1F:92:44:F4:0F:46:38:B4:A6:58)
  6. 查看监听状态

    1. [root@master puppet]# netstat -nlatp | grep 8140
    2. tcp 0 0 0.0.0.0:8140 0.0.0.0:* LISTEN 6173/ruby
    3. [root@master puppet]# lsof -i:8140
    4. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    5. puppetmas 6173 puppet 5u IPv4 20819460 0t0 TCP *:8140 (LISTEN)

三、安装Agent

以slave01为例:

  1. 安装puppet和facter

    1. [root@slave01 ~]# yum install puppet facter
  2. 配置puppet.conf

    1. [main]
    2. logdir = /var/log/puppet
    3. rundir = /var/run/puppet
    4. ssldir = $vardir/ssl
    5. [agent]
    6. classfile = $vardir/classes.txt
    7. localconfig = $vardir/localconfig
    8. server=master #指向puppetmaster端
    9. certname=slave01 #设置自己的certname名
  3. 通过调试模式启动节点向Puppetmaster端发起认证

    1. [root@slave01 ~]# puppet agent --test
    2. info: Creating a new SSL key for slave01
    3. info: Caching certificate for ca
    4. info: Creating a new SSL certificate request for slave01
    5. info: Certificate Request fingerprint (md5): 4F:84:95:69:0F:FD:33:BC:90:FC:9E:A0:F4:BB:CE:8E
    6. Exiting; no certificate found and waitforcert is disabled
  4. 服务器端确定认证

    1. [root@master puppet]# puppet cert --list --all
    2. "slave01" (4F:84:95:69:0F:FD:33:BC:90:FC:9E:A0:F4:BB:CE:8E)
    3. + "master" (C1:E5:A2:9E:07:CA:6E:CE:20:B2:A7:C3:15:51:A1:2A)
    4. [root@master puppet]# puppet cert --sign slave01
    5. notice: Signed certificate request for slave01
    6. notice: Removing file Puppet::SSL::CertificateRequest slave01 at '/var/lib/puppet/ssl/ca/requests/slave01.pem'
    7. [root@master puppet]# puppet cert --list --all #带+标示已经注册成功
    8. + "master" (33:57:A7:AC:DC:B7:1F:92:44:F4:0F:46:38:B4:A6:58)
    9. + "slave01" (B9:91:B0:C6:75:CE:DA:F5:97:51:55:3C:1F:31:D5:8C)
  5. 如果一次性认证所有节点可使用

    1. [root@master puppet]# puppet cert --sign --all
    2. No waiting certificate requests to sign
  6. 也可通过tree工具来查看认证的节点

    1. [root@master puppet]# tree /var/lib/puppet/ssl/
    2. /var/lib/puppet/ssl/
    3. ├── ca
    4.    ├── ca_crl.pem
    5.    ├── ca_crt.pem
    6.    ├── ca_key.pem
    7.    ├── ca_pub.pem
    8.    ├── inventory.txt
    9.    ├── private
    10.       └── ca.pass
    11.    ├── requests
    12.    ├── serial
    13.    └── signed
    14.    ├── master.pem #已经注册成功
    15.    └── slave01.pem
    16. ├── certificate_requests
    17. ├── certs
    18.    ├── ca.pem
    19.    └── master.pem
    20. ├── crl.pem
    21. ├── private
    22. ├── private_keys
    23.    └── master.pem
    24. └── public_keys
    25. └── master.pem
    26. 9 directories, 14 files

四、Hello World

  1. 在master节点新建site.pp文件

    1. [root@master ~]# vim /etc/puppet/manifests/site.pp
    2. node slave01 {
    3. file {
    4. "/tmp/testpuppet": #在slave节点上创建该文件
    5. content=>"good morning!\n"; #文件中打印如下内容
    6. }
    7. }
  2. 在slave节点中请求新配置

    1. [root@slave01 ~]# puppetd --test --server master
    2. info: Caching catalog for slave01
    3. info: Applying configuration version '1450250442'
    4. notice: Finished catalog run in 0.03 seconds
    5. [root@slave01 ~]# cat /tmp/testpuppet #可以看到已生成该文件
    6. good morning!
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注