自动化运维工具Puppet

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云解析 DNS,旗舰版 1个月
简介:

一、概述

1.1 puppet的概念

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

1.2 puppet工作模型

wKiom1nms4LxCDbDAACIPWq0UQA631.png

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的细节和原理

wKiom1nmuADTVFYZAAQlAlbERaQ464.png

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-master
172.20.4.50 CentOS release 6.9 (Final)
puppet-1 172.20.4.51 CentOS release 6.9 (Final)
puppet-2 172.20.4.52 CentOS release 6.9 (Final)

2.1 初始化环境:

1
2
3
4
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
1
2
3
4
5
6
设置主机直接可以通过主机名相关访问,在三台主机修改 /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端安装配置

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

编辑/etc/puppet/puppet.conf

1
2
3
4
5
6
7
8
9
10
11
[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认证服务器名称
1
2
/etc/init .d /puppetmaster  start
chkconfig puppetmaster on

查看端口和进程

wKiom1nmwdySW4vPAABtOB2nm3o648.png

2.3 agent端安装配置

1
2
rpm -ivh 
yum  install  -y puppet facter

编辑/etc/puppet/puppet.conf

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

启动服务

1
/etc/init .d /puppet  start

2.4 证书签发

在master端查看证书

wKiom1nmxl_x1doWAABDpFaWnVA023.png

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

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

wKioL1nmxBLg67R7AACML3_bSYQ972.png

在agent端验证

wKiom1nmx37RQVYZAAApYx2A4Kc840.png

三、puppet文件资源

3.1 /etc/puppet配置目录:

1
2
3
4
5
6
7
8
9
10
11
12
[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 模块目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
模块:目录结构
     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命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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资源清单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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:目录递归,值 true false ,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:  true false (默认)
 
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资源引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
元参数:用于定义资源间的依赖关系,及应用次序,通知机制等等
     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表达式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
puppet的条件表达式
     if
     单分支
     双分支
     多分支
         if  条件 {
         动作
         } elsif 条件 {
         动作
         else  条件 {
         动作
         }
 
     case :指定代码块
 
     selectors:返回结果

四、验证

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

wKioL1nm52KzaqrHAABeMtqJfB4870.png

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

wKiom1nm6nfBUjr7AADBHgs4AG0236.png

wKioL1nm59uzG2Z5AADD7lFFiAA185.png

五、puppet dashboard安装配置

5.1 安装并配置mysql数据库

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

创建数据库并授权

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

wKioL1nm6VuA5elaAABeMtqJfB4602.png

5.2 安装并配置puppet-dashboard

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

wKioL1nm6k7SaQOYAABmfNfqgqM332.png

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

wKioL1nm6t2DiwNeAAAIwmFuKGk031.png

导入数据库文件

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

wKiom1nm7g2QF6kvAAEa61tQvT4990.png

5.3 启动服务,并测试访问

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

wKiom1nm71iTSAiKAAAieSk1wns380.png

手工导入报告

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

wKiom1nm77_CQOT9AAFuJTqU9nQ205.png

启动报告

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

查看进程job

wKioL1nm8AvCQJ1oAABZSm7_gv8508.png

查看dashboard

wKiom1nm8v3Tn3BfAAH0fKAlWUo226.png










本文转自 KaliArch 51CTO博客,原文链接:http://blog.51cto.com/kaliarch/1973736,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
10天前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
3天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
58 16
Selenium:强大的 Web 自动化测试工具
|
9天前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
13天前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####
|
13天前
|
机器学习/深度学习 数据采集 人工智能
智能化运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的崛起背景,深入分析了其核心概念、关键技术、应用场景及面临的挑战,并对比了传统IT运维模式,揭示了AIOps如何引领运维管理向更高效、智能的方向迈进。通过实际案例分析,展示了AIOps在不同行业中的应用成效,为读者提供了对未来智能运维趋势的洞察与思考。 ####
34 1
|
18天前
|
机器学习/深度学习 人工智能 运维
自动化运维之路:从脚本到工具的演进
在IT运维领域,效率和准确性是衡量工作成效的关键指标。随着技术的发展,自动化运维逐渐成为提升这两个指标的重要手段。本文将带领读者了解自动化运维的演变历程,从最初的简单脚本编写到现今复杂的自动化工具应用,展示如何通过技术提升运维效率。文章不仅介绍理论和实践案例,还提供了代码示例,帮助读者理解自动化运维的实际应用场景。
|
21天前
|
JavaScript 前端开发 开发者
探索 DrissionPage: 强大的Python网页自动化工具
DrissionPage 是一个基于 Python 的网页自动化工具,结合了浏览器自动化的便利性和 requests 库的高效率。它提供三种页面对象:ChromiumPage、WebPage 和 SessionPage,分别适用于不同的使用场景,帮助开发者高效完成网页自动化任务。
97 4
|
27天前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
28天前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
52 4
|
25天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####

推荐镜像

更多