阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

自动化运维工具Puppet

257次阅读
没有评论

共计 9386 个字符,预计需要花费 24 分钟才能阅读完成。

一、概述

1.1 puppet 的概念

Puppet 是一款使用 GPLV2X 协议授权的开源管理配置工具,用 Ruby 语言开发。其既可以通过客户端–服务器的方式运行,也可以独立运行。Puppet 可以为系统管理员提供方便、快捷的系统自动化管理。对于系统管理员来说通过 Puppet 配置管理系统,底层的操作系统的发行版本是透明的,Puppet 通过(Provider 又称提供者)属性来完成软件的配置与安装,管理员不必关心操作系统的种类与发行版本,
Puppet 还可以提供一个强大的框架来完成系统管理功能,在框架的基础上系统管理员可以通过 Puppet 语言来描述系统的一些事务,如安装软件、初始化系统、启动、删除服务、推送配置文件和差异化配置管理服务器等。同时系统管理员和系统管理员之间可以分享用 Puppet 语言描述好的事务,从而减少重复劳动,提高工作效率。

1.2 puppet 工作模型

自动化运维工具 Puppet

a. 部署调度

puppet master 在一台服务器以守护进程方式运行,同时也包含客户端各节点的配置信息,puppet agent 在与 master 的通信过程中,通过标准的 SSL 协议进行加密和验证,验证通过后,agent 从 masteer 上读取响应节点信息应用在本地。

b. 配置语言和资源抽象

puppet 使用描述性语言来定义配置项,在 puppet 中将配置项被称为 resource,当 Agent 连接 Master 时,Master 并不知道 Agent 的操作系统型号和版本。Agent 通过 Facter 工具收集系统相关信息,并通过 SSL 协议将 Agent 的信息传递给 Master。Master 根据 Agent 收集到的相关信息,通过资源的提供者来为 Agent 服务。比如 Package 资源收到 Agent 的信息后,会识别 Agent 的系统型号版本,并通过资源提供者(如 yum aptitude pkgadd apt-get 等)匹配,为 Agent 服务。

c. 事物层

Puppet 事务层其实就是它的解析引擎。Puppet 事务层配置每一台主机的过程包括:

  • 解析和配置编译。

  • 将编译好的配置同步到 Agent。

  • 在 Agent 上应用配置。

  • 向 Master 报告运行结果。

首先 Puppet 会创建一个图表来表示所有资源的关系和上下游执行顺序,以及和 Agent 的关系。然后
Puppet 将按照资源之间的关系和上下游顺序依次执行。
接着 Puppet 为每一个 Agent 获取相应的资源,并把它们编译成“目录”,然后将目录依次分发到各
主机,并通过 Agent 来应用它们,最后应用结果以报告形式反馈给 Master。

1.3 puppet 的细节和原理

自动化运维工具 Puppet

Puppet 采用了非常简单的 C / S 架构,所有数据的交互都通过 SSL 进行,以保证安全。

1. 客户端 Puppetd 向 Master 发起认证请求,或使用带签名的证书。

2.Master 告诉 Client 你是合法的。

3. 客户端 Puppetd 调用 Facter,Facter 探测出主机的一些变量,例如主机名、内存大小、IP 地址
等。Puppetd 将这些信息通过 SSL 连接发送到服务器端。
4. 服务器端的 Puppet Master 检测客户端的主机名,然后找到 manifest 对应的 node 配置,并对该
部分内容进行解析。Facter 送过来的信息可以作为变量处 理,node 牵涉到的代码才解析,其他
没牵涉的代码不解析。解析分为几个阶段,首先是语法检查,如果语法错误就报错;如果语法
没错,就继续解析,解析的结 果生成一个中间的“伪代码”(catelog),然后把伪代码发给客
户端。
5. 客户端接收到“伪代码”,并且执行。
6. 客户端在执行时判断有没有 File 文件,如果有,则向 fileserver 发起请求。
7. 客户端判断有没有配置 Report,如果已配置,则把执行结果发送给服务器。
8. 服务器端把客户端的执行结果写入日志,并发送给报告系统。

二、安装部署

主机清单

主机名IP 地址系统
puppet-master172.20.4.50CentOS release 6.9 (Final)
puppet-1172.20.4.51CentOS release 6.9 (Final)
puppet-2172.20.4.52CentOS release 6.9 (Final)

2.1 初始化环境:

yum install ntpdate -y && ntpdate time1.aliyun.com                    # 同步时间
service iptables stop                                                 # 关闭 iptables
sed -i "s/SELINUX=enforcing/SELINUX=disabled/"  /etc/selinux/config   # 关闭 selinux
setenforce 0
 
设置主机直接可以通过主机名相关访问,在三台主机修改 /etc/hosts 文件

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.20.4.50  puppet-server
172.20.4.51  puppet-1
172.20.4.52  puppet-2

2.2 master 端安装配置

rpm -ivh 
yum install -y puppet-server facter puppet

编辑 /etc/puppet/puppet.conf

[main]
logdir = /var/log/puppet
rundir = /var/run/puppet
ssldir = $vardir/ssl
[agent]
classfile = $vardir/classes.txt
localconfig = $vardir/localconfig
certname = puppet-server      # 设置本机的 certname 名称
server = puppet-server                # 设置指向 puppetmaster 进行身份验证
[master]
certname = puppet-server      ### 设置 puppetmaster 认证服务器名称
 
/etc/init.d/puppetmaster start
chkconfig puppetmaster on

查看端口和进程

自动化运维工具 Puppet

2.3 agent 端安装配置

rpm -ivh 
yum install -y puppet facter

编辑 /etc/puppet/puppet.conf

[agent]
    classfile = $vardir/classes.txt
    localconfig = $vardir/localconfig
    certname = puppet-2                  # 设置本机的 certname 名称
    server = puppet-server            # 指向 puppetmaster 进行身份验证

启动服务

/etc/init.d/puppet start

2.4 证书签发

在 master 端查看证书

自动化运维工具 Puppet

没有带“+”说明没有进行身份验证

puppet cert --sign puppet-1  签发证书
puppet cert --sign puppet-2
#puppet cert clean puppet-2   清理证书

自动化运维工具 Puppet

在 agent 端验证

自动化运维工具 Puppet

三、puppet 文件资源

3.1 /etc/puppet 配置目录:

[root@puppet-server ~]# tree /etc/puppet/
/etc/puppet/
├── auth.conf                        # 认证配置文件
├── environments                 
│   └── example_env
│       ├── manifests
│       ├── modules
│       └── README.environment
├── fileserver.conf
├── manifests                  # 文件存储目录(puppet 会先读取该目录的.PP 文件 <site.pp>)
├── modules                    # 定义模块
└── puppet.conf                ## 主配置配置文件, 详细内容可执行 puppet --genconfig

3.2 模块目录结构

模块:目录结构
    module_name/
        manifests/
            init.pp: 包含一个与模块名称同名的类
            *.pp: 一个清单文件通常只包含一个类,而且建议清单文件名与类名相同 nginx::web 文件名为 web.pp
            web/
                *.pp
            访问路径:module_name::mainfest_file_name,module_name::subdir_name::manifest_file_name
        files/
            访问路径:puppet:///modules/module_nname/file_name
            nginx_web/
                puppet:///modules/module_name/subdir/file_name
        templates/
            *.erb: 使用模块函数 template()装载并运行其中模块语言,运行后会生成静态文件
            访问路径 templates(‘moduleName/templates’)
        lib/
            用户自定义的插件目录
        tests/
            当前模块的使用说明和样例
        spec/
            为 lib 目录中的插件提供使用说明和样例
        在模块根目录下,通常还应该具有几个文档
            LICENSE
            Modulefile
            README

3.3 puppet 命令

puppet 命令总结
    apply,agent,master,cert,describe
 
    apply:应用本地清单文件
    agent:客户端进程
    master:服务端进程
    cert:证书管理
    describe:资源帮助信息
    module:模块管理
    kick:master 触发模式
 
    帮助类命令
        describe
        doc:生成 puppet 文档
        help:查看帮助
        resource:查看资源帮助
        status:查看 puppe 状态
 
    master 命令的选项
        --no-daemonize:非守护进程
        --daemonize:-D
        --debug -d
        --verbase -v
        --genconfig
 
    agent 命令的常用选项
        --daemonize,-D
        --no-daemonize
        --debug -d
        --verbose -v
        --noop:no operation 模式,不真正应用 catalog
        --test:测试
        --waitforcert:等待证书签署成功
 
    apply 命令的常用选项
        --debug -d
        --verbose -v
        --execute -e
        --modulepath
 
    cert 命令的常用操作
        list
        sign:签署
        clean:清除证书
        revoke:吊销证书
        verify:验证本地指定的证书
        generate:为客户端生成证书

3.4 puppet 资源清

puppet 资源
    type {'title':
        attibute => value,
    }
     
而资源定义的核心也可以抽象为type、title、attribute 和 value 四个部分。
 
type分类:
package:
    puppet 支持使用的软件包管理器
        yum,rpm,apt,ports,gem,msi,dpkg,pkg
    常用的参数
        ensure:程序包的目标状态
        name:资源的名称,即软件包的名字
        provider:软件包管理器
        source:指定程序包文件路径
        install_options:安装选项,最常用的是通过 INSTALLDIR 来制定安装目录
 
        window 下安装 mysql
        package{‘mysql:
            ensure => install,
            provider =>'msi',
            source => 'D:\software\mysql-5.5.36.msi',
            install_options => {'INSTALLDIR' => 'c:\mysql' },
        }
 
service:
    常用参数:
        ensure:服务的目标状态,ture(启动)和false(关闭)
        enable:是否开机自动启动,ture(启动)和false(关闭)
        name:服务名称
        path:服务脚本路径;默认为/etc/init.d 下查找
        start:定制启动命令
        stop:关闭
        restart:重启
        status:状态
 
资源名称仅是一个字符串,在同一个类型中必须唯一
在定义时,资源类型必须是小写字母
 
file
    管理文件、目录、软链接;
    生成文件内容
    管理文件权限、属性
    也可以通过 source 属性到指定位置下载文件
    通过 recurse 属性来获取目录
 
    常用参数:
        ensuce:absent(不存在)present(存在)file(文件)directory(目录)
        backup:通过 filebucket 资源来备份文件,值通常为 filebucket 资源的名称
        content:文件内容,生成方式有三种(content,source,target),彼此互斥
        source:通过制定的 url 下载文件至本地,获取文件方式为 puppet url 格式:puppet:///modules/MODULE_NAME/file_names;
        target: 为符号链接指定目标
        links:文件为符号链接,值为“follow”,“manage”
        path: 文件路径,必须使用双引号
        mode:定义权限
        owner:定义属主
        group:定义属组
        force: 强制执行删除文件、连接或目录,仅用于 ensure 为 absent 时。
        purge:清空指定目录中存在的,但未在资源中定义的文件;
        recurse:目录递归,值truefalse,inf,remote
        replace:替换,本地存在的文件与资源中指定的文件内容不同时是否执行替换,默认为否;
 
exec
    执行命令,通常在不得不用时才使用,慎用,通常用于完成 puppet 自身无法完成的功能
    常用的参数:
        command:要执行的命令,通常为命令文件的完整路径
        path:命令搜索路径 
        group:执行命令的组
        user:执行命令的用户
        onlyif:0,表示仅在命令的状态返回值为 0 时才执行此命令
        refresh:定义接受到其他资源的通知时,则要重新执行此命令
        refreshonly:仅当被依赖的资源发生改变时才被触发 
        tries:尝试次数,默认为1
        try_sleep:多次尝试之间的时间间隔
group:管理系统上的用户组
        常用参数
            ensure:目标状态,present,absent
            name: 组名
            gid:GID
            system:系统组
 
user:管理用户
        常用属性:
            ensure:目标值状态
            name:
            uid:
            system:
            home:
            shell:
            gid:
            password:加密后的密码
            managehome:truefalse(默认)
 
cron:定义周期性任务
        常用属性
            ensure:目标状态
            command:命令或脚本
            environment:运行时的环境变量
            hour:
            minute:
            mouth:
            monthday
            weekday
            name
            user:默认为 root
 
        cron {'ntpdate'
         ensure => present,
         command => '/usr/sbin/ntpdate 172.16.0.1' &> /dev/null
         minute => '*/3'
        }

 

3.5 puppet 资源引用

元参数:用于定义资源间的依赖关系,及应用次序,通知机制等等
    require:表示需要依赖
        package {'nginx'
            ensure => present,
        }
        service{'nginx'
            ensure =>ture,
            enable =>ture
            require =>Package['nginx']
        }
    before: 先应用本资源
        package {'nginx'
            ensure => present,
            before =>Service ['nginx']
        }
        service{'nginx'
            ensure =>ture,
            enable =>ture
        }
    notify: 将当前资源的变动信息通知给别的资源,通知发出者
    subscribe:定义在后一个资源中,通知接收者,订阅
 
资源引用:
    使用 Type['title'],首字母必须大写
 
 
依赖关系
        package {'nginx'
            ensure => present,
        } ->
        service{'nginx'
            ensure =>ture,
            enable =>ture
            restart => '/etc/rc.d/init.d/nginx reload'
        }
 
-> 表示依赖
~> 表示通知

3.6 puppet 表达式:

puppet 的条件表达式
    if
    单分支
    双分支
    多分支
        if 条件 {
        动作
        } elsif 条件 {
        动作
        else 条件 {
        动作
        }
 
    case:指定代码块
 
    selectors:返回结果

四、验证

编辑资源清单,在 puppet- 1 安装 nginx,puppet- 2 安装 mysql 并设置开机自启动

自动化运维工具 Puppet

在 agent 端测试手动执行,(默认三十分钟 agent 自动去 master 拉取)

自动化运维工具 Puppet

wKioL1nm59uzG2Z5AADD7lFFiAA185.png

五、puppet dashboard 安装配置

5.1 安装并配置 mysql 数据库

yum install -y ruby-mysql mysql-server 
service mysqld start
mysqladmin -uroot password "mysqladmin"

创建数据库并授权

create database dashboard character set utf8;
create user 'puppet'@'localhost' identified by 'puppetadmin';
grant all on dashboard.* to puppet@'localhost';
flush privileges;

自动化运维工具 Puppet

5.2 安装并配置 puppet-dashboard

yum -y install puppet-dashboard
vim /usr/share/puppet-dashboard/config/database.yml

自动化运维工具 Puppet

vim /usr/share/puppet-dashboard/config/environment.rb

自动化运维工具 Puppet

导入数据库文件

cd /usr/share/puppet-dashboard/
rake gems:refresh_specs
rake RAILS_ENV=production db:migrate

自动化运维工具 Puppet

5.3 启动服务,并测试访

/etc/rc.d/init.d/puppetmaster start  启动服务
http://IP:3000  浏览器进行访问

 

自动化运维工具 Puppet

手工导入报告

cd /usr/share/puppet-dashboard/
rake RAILS_ENV=production reports:import

自动化运维工具 Puppet

启动报告

env RAILS_ENV=production /usr/share/puppet-dashboard/script/delayed_job -p dashboard -n 4 -m start

查看进程 job

自动化运维工具 Puppet

查看 dashboard

自动化运维工具 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 快速入门  http://www.linuxidc.com/Linux/2016-12/137893.htm

CentOS 7 下安装配置 Puppet http://www.linuxidc.com/Linux/2017-02/140932.htm

Puppet 的详细介绍:请点这里
Puppet 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149672.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计9386字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中