Puppet 部署应用
技能目标
- 熟悉 Puppet 工作原理
- 掌握 Puppet 部署应用配置方法
案例一分析
案例概述
作为一名系统管理员,维护服务器正常运行是最基本的职责。在管理几台到几十台服务器时,大部分管理员喜欢写自己的小工具来维护。但是随着服务器数量的增多, 任务量也逐渐增加,这时就需要简洁的、强大的框架来完成系统管理任务。
为实现这一目的, 引入一批工具。这批工具是“可编程”的,系统管理员只需要为这批工具写上几行“代码”,它便会自动完成所有的工作,Puppet 就是这批运维自动化工具中的其中一种。在一些大型互联网企业中, Puppet 运维自动化工具管理着几百甚至上千台服务器,它可以针对多台服务器进行统一操作,如部署统一软件、进行统 一上线维护等,而且能够快速完成上线部署,减少人力并降低人力误操作风险。
案例前置知识点
1. Puppet 工作原理
Puppet 的目的是让管理员只集中于要管理的目标,而忽略实现的细节。Puppet 既可以在单机上使用,也可以以 C/S 结构使用。在大规模使用 Puppet 的情况下,通常使用 C/S 结构。在这种结构中 Puppet 客户端只运行 Puppet Client, Puppet 服务器端只运行 Puppet Master。
Puppet 管理工具的工作流程如下图所示。
(1)客户端 Puppet 调用 Facter 工具(Facter 是通过 SSL 加密收集及检测分析客户端配置信息的一个工具),Facter 探测出主机的一些变量,如主机名、内存大小、IP 地址等。Puppet 把这些信息通过 SSL 连接发送到服务器端。
(2)服务器端的 Puppet Master 通过 Facter 工具分析检测客户端的主机名,然后找到项目主配置文件 manifest 里面对应的 node 配置, 并对该部分内容进行解析。Facter 发送过来的信息可以作为变量处理,node 牵涉到的代码才解析,其他没牵涉的代码不解析。解析分为几个阶段,首先进行语法检查。如果语法没错,就继续解析。解析的结果生成一个中间的“伪代码”,然后把伪代码发给客户端。
(3)客户端接收到“伪代码”并且执行,客户端把执行结果发送给服务器。
(4)服务器端把客户端的执行结果写入日志
2. Puppet 工作中的注意事项
Puppet 工作过程中,有以下两点值得注意。
(1)为了保证安全,Client 和 Master 之间是基于 SSL 和证书的,只有经 Master证书认证的 Client 才能与 Master 通信。
( 2) Puppet 会让系统保持在人们所期望的某种状态并一直维持下去。例如检测某个文件并保证其一直存在,保证 SSH 服务始终开启,如果文件被删除了或者 SSH 服务被关闭了,Puppet 下次执行时(默认 30 分钟),会重新创建该文件或者启动 SSH 服务。
案例环境
1. 本案例实验环境
主机名 | IP地址 | 配置 | 主要软件 |
---|---|---|---|
master | 192.168.10.101 | 2C/2G | Puppet-server |
client1 | 192.168.10.102 | 2C/2G | Puppet |
client2 | 192.168.10.103 | 2C/2G | Puppet |
2. 案例需求
使用 Puppet 批量修改客户端 SSH 服务端口
3. 案例实现思路
(1) 环境准备工作;
(2) 安装 Puppet Master 和 Puppet Client;
(3) 配置测试节点;
(4) 客户端主动拉取和服务端主动推送。
案例一实施
Puppet 安装与部署
1. 修改服务器主机名
在小规模 Puppet 环境下,一般是修改/etc/hosts 文件实现服务通过主机名进行通信,然而上千台服务器, 需要搭建自己的 DNS 服务器来实现服务通过主机名进行通信。此实验我们通过修改/etc/hosts 文件来实现。
192.168.10.101主机操作
hostnamectl set-hostname master
su
192.168.10.102主机操作
hostnamectl set-hostname client1
su
192.168.10.103主机操作
hostnamectl set-hostname client2
su
2. 关闭防火墙内核安全机制,所有主机操作
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
3. 安装启动时间同步服务器,所有主机操作
yum -y install chrony
systemctl start chronyd
systemctl enable chronyd
chronyc sources -v
4. 添加hosts解析,所有主机操作
cat >> /etc/hosts << EOF
192.168.10.101 master
192.168.10.102 client1
192.168.10.103 client2
EOF
Puppet 安装与部署
1. 安装 Puppet-server , master主机操作
从 官 网 https://yum.puppetlabs.com/el/7/products/x86_64/ 下 载 Puppet 源puppetlabs-release-7-12.noarch.rpm 软件包,上传到 master服务器上。
#解压源码包
rpm -ivh puppetlabs-release-7-12.noarch.rpm
#安装启动puppet-server
yum install -y puppet-server
systemctl start puppetmaster
systemctl enable puppetmaster
2. 安装Puppet,两台client主机操作
#上传puppetlabs源到client主机中,安装 puppetlabs 源
rpm -ivh puppetlabs-release-7-12.noarch.rpm
#安装puppet
yum install -y puppet
3. 修改两台客户端的配置文件
vim /etc/puppet/puppet.conf
#在文 件 中 的 [main] 标 题 下 添 加 “server = master”配置字段用于设置 Puppet-server 的域名
server = master #master主机名,如果有DNS服务器的话可以写域名
4. 在两台客户端申请注册
#client1主机注册
puppet agent --server=master --no-daemonize --verbose
#client2主机注册
puppet agent --server=master --no-daemonize --verbose
#等待一会儿,然后可以按 Ctrl+C 结束
5. 在 master 端查看申请注册的客户端
puppet cert --list
"client1"