自动化运维——puppet管理工具

puppet管理工具

该工具基于ruby语言开发,相比较于Ansble和SaltStack它的安全性会高一些,它通过加密认证进行通信

工作流程:

1.客户端puppet调用facter搜集变量,通过SSL发送给服务器

2.服务器端的puppetmaster通过facter工具分析检测客户端的信息,配置生成伪代码,返给客户端

3.客户端接受伪代码并执行,反馈给服务器结果

4.服务器将执行结果写入日志

puppet管理工具需要通过puppetmasterpuppetagent这两个程序来进行通信管理,管理端和客户端需要通过安装不同的软件来进行管理和应用

puppet编写文件常用的模块

1.查看资源

puppet describe [-h|--help] [-s|--short] [-p|--providers] [-l|--list] [-m|--meta] [type]

-l:列出所有资源类型

-s:显示指定类型的简要帮助信息

-m:显示指定类型的元参数,一般与-s一同使用

2.group(用户组管理)

name:组名
gid:定义GID值
system:是否为系统组,true OR false
ensure:状态,present/absent
members:成员用户

3.user(用户管理)

name:用户名
uid: 定义UID值
gid:基本组ID
groups:附加组
comment:注释
expiry:过期时间 
home:用户的家目录
shell:默认shell类型
system:是否为系统用户 
ensure:状态,present/absent
password:加密后的密码

4.package(软件包管理)

ensure:installed/present/latest/absent
name:包名
source:程序包来源
provider: 指明安装方式

5.service(管理服务的状态)

ensure:服务状态,值有true(running)和false(stopped) 
enable:是否开机自动启动,值有true和false
name:服务名称
path:服务脚本路径,默认为/etc/init.d/下
start:定制启动命令
stop:定制关闭命令
restart:定制重启命令
status:定制状态

6.file(文件管理)

ensure:目标状态,absent/present/file/directory/link
file:类型为普通文件,其内容由content属性生成或复制由source属性指向的文件路径来创建
link:类型为符号链接文件,必须由target属性指明其链接的目标文件
directory:类型为目录,可通过source指向的路径复制生成,recurse属性指明是否递归复制
path:文件路径
source:源文件
content:文件内容
target:符号链接的目标文件
owner:定义文件的属主
group:定义文件的属组
mode:定义文件的权限
atime/ctime/mtime:时间戳

7.exec(执行shell环境命令,通常为外部命令)

command:要运行的命令
cwd:指定运行该命令的目录
creates:文件路径,仅此路径表示的文件不存在时,command方才执行
user/group:运行命令的用户身份
path:指定命令执行的搜索路径
onlyif:此属性指定一个命令,此命令正常(退出码为0)运行时,当前command才会运行
unless:此属性指定一个命令,此命令非正常(退出码为非0)运行时,当前command才会运行
refresh:重新执行当前command的替代命令
refreshonly:仅接收到订阅的资源的通知时方才运行

8.cron(定义周期性任务)

command:要执行的任务
ensure:目标状态,present/absent
hour:时
minute:分
monthday:日
month:月
weekday:周
user:以哪个用户的身份运行命令(默认为root)
target:添加为哪个用户的任务
name:cron job的名称

9.notify(调试输出)

message:记录的信息
name:信息名称

安装配置puppet工具

环境:

192.168.11.25

192.168.11.26、192.168.11.27

准备配置工作

1.修改hostname

192.168.11.25:hostnamectl set-hostname master

192.168.11.26:hostnamectl set-hostname client1

192.168.11.27:hostnamectl set-hostname client2

2.修改hosts文件把三台机器的地址解析添加进去

vim /etc/hosts

192.168.11.25 master
192.168.11.26 client1
192.168.11.27 client2

3.配置ntp服务器,使三台服务器时间同步

master:

yum -y install ntp

vim /etc/ntp.conf

自动化运维——puppet管理工具_第1张图片

systemctl start ntpd

ntpdate time1.aliyun.com

client:

yum -y install ntpdate

ntpdate master

安装puppet工具

1.在master上安装puppet-server启动服务

yum -y install puppet-server

systemctl start puppetmaster

2.在两台client上安装puppet

yum -y install puppet

3.在两台client上进行认证

puppet agent --server=master --no-daemonize --verbose

这个时候在master上执行puppet cert --list可以进行查看认证请求

4.在master上同意请求

puppet cert sign --all

可以在master上执行ll /var/lib/puppet/ssl/ca/signed/查看生成的认证文件,路径注意看上个命令生成的路径

5.在两台client上修改配置文件

vim /etc/puppet/auth.conf

allow * #表示同意所有地址访问

vim /etc/puppet/puppet.conf

[main]
server = master #在[main]下添加master的名字
[agent]
listen = true  #这个添加在最后一行,监听8139端口

6.在两台client上启动puppetagent服务

systemctl start puppetagent

使用puppet安装nginx服务

1.创建模块目录

mkdir -pv /etc/puppet/modules/nginx/{manifests,files,templates}

mkdir /etc/puppet/manifests/nodes

chown -R puppet /etc/puppet/modules/

2.到/etc/puppet/manifests/目录下创建pp文件去调用nginx模块

vim nodes/test.pp

node 'client1'{
    include nginx
}
node 'client2'{
    include nginx
}

这里说明两个node分别后面就是两台client服务器的名字,都调用nginx模块,这里的模块可以理解为在/etc/puppet/modules/下创建的文件目录,下面可以放很多目录去写不同的模块,使不同的管理服务器可以调用不同的模块去完成不同群体部署,方便管理一个群集中不同的服务器

3.到/etc/puppet/manifests/目录下创建一个site.pp文件去把上面创建的node文件加载进去

vim site.pp

import "nodes/test.pp"

4.编写init.pp文件去配置自动安装nginx步骤

vim /etc/puppet/modules/nginx/manifests/init.pp

class nginx {
    yumrepo { "nginx":
        descr    => "nginx repo",
        baseurl  => "http://nginx.org/packages/centos/\$releasever/\$basearch/",
        gpgcheck => "0",
        enabled  => "1",
    }
    package{'nginx':
        ensure => installed,
        allow_virtual => false;
    }
    service{'nginx':
        ensure     => running,
        hasrestart => true,
        hasstatus  => true,
        enable     => true,
    }
    #file{'index.html':
    #    ensure => file,
    #    path   => '/var/www/html/index.html',
    #    source => 'puppet://modules/nginx/index.html',
    #}
    #exec { 'restart-nginx':
    #    command     => "/usr/bin/systemctl restart nginx",
    #    refreshonly => true,
    #}
}

注意:执行的步骤都是从init.pp文件为最初执行的入口,当然你也可以创建几个.pp文件把这里的步骤分为几步,然后在init.pp文件中用clude方法把这几个方法加载进去依次执行

5.在需要安装的服务器上执行拉取命令

puppet agent -t

比如我在client1上执行命令,全部为绿色没有报错则为成功(如下图)

你可能感兴趣的:(曾经发布的文章)