本页内容
- 准备工作
- 配置 /etc/hosts 文件
- 安装 Puppet 添加 Puppet 仓库 安装并配置 Puppet Server 安装 Puppet Agent
- 配置 Puppet Server
- 在 Puppet Server 上配置 Firewalld
- 将 Puppet Agent 注册到 Puppet Server
- 创建首个 Puppet Manifest
- 在 Agent 上应用 Puppet Manifest
- 总结
- 添加 Puppet 仓库
- 安装并配置 Puppet Server
- 安装 Puppet Agent
Puppet 是一款集中式的配置管理和自动化工具。DevOps 通过创建配置管理来部署服务器和应用程序,所有自动化配置都存储在中控的 "Puppet Server" 上。之后,"Agent" 节点会从 "Puppet Server" 拉取新的配置,并应用所定义的状态。
"Puppet Server" 与 "Agent" 节点之间的所有连接默认均使用 SSL/TLS 证书进行加密。Puppet 使用领域特定语言(Domain Specific Language,DSL)来描述系统配置,其语法与 Ruby 类似。
本指南将介绍如何在 AlmaLinux 服务器上安装 Puppet Server 和 Agent。我们还将通过创建第一个用于 LAMP Stack 的 Puppet 部署,带你入门 Puppet 配置管理工具。
准备工作
在开始之前,请确保你已具备以下条件:
- 2 台 AlmaLinux 服务器 - 本示例使用 AlmaLinux 8 服务器:主机名:pp-serve r - IP 地址:192.168.10.20 - 用途:Puppet Server 主机名:agent1 - IP 地址:192.168.10.21 - 用途:Puppet Agent
- 一个可以执行 sudo 获取 root 权限的非 root 用户。
- 主机名:pp-serve r - IP 地址:192.168.10.20 - 用途:Puppet Server
- 主机名:agent1 - IP 地址:192.168.10.21 - 用途:Puppet Agent
配置 /etc/hosts 文件
在开始 Puppet 安装之前,建议在 Puppet 环境中使用本地域名或 FQDN(Fully Qualified Domain Name,完全限定域名),而不是 IP 地址。
在本示例中,你将同时为 Puppet Server 和 Agent 使用系统的 fqdn。每台服务器都可以通过 fqdn 和系统主机名访问。
首先,运行以下命令在每台服务器上设置 fqdn。
在 Puppet Server 上运行此命令。
sudo hostnamectl set-hostname pp-server.hwdomain.lan
而在 Agent 机器上运行这条。
sudo hostnamectl set-hostname agent1.hwdomain.lan
使用下面的 nano 编辑器命令打开 /etc/hosts 文件。
sudo nano /etc/hosts
插入以下配置,并确保修改具体的 IP 地址和 fqdn。
192.168.10.20 pp-server.hwdomain.lan pp-server 192.168.10.21 agent1.hwdomain.lan agent1
保存并关闭文件。
接下来,运行以下命令验证 Puppet Server 和 Agent 上的 fqdn。
sudo hostname -f
你应该能看到 Puppet Server 的 fqdn 为 pp-server.hwdomain.lan,Agent 机器的 fqdn 为 agent1.hwdomain.lan。
最后,运行下面的 ping 命令,确保各主机名和 fqdn 都指向服务器正确的内网 IP 地址。
ping -c3 pp-server.hwdomain.lan
ping -c3 pp-server
ping -c3 agent1.hwdomain.lan
ping -c3 agent1
在 Puppet Server 上设置主机名和 fqdn。

在 Puppet Agent 上设置主机名和 fqdn。

安装 Puppet
本节将开始安装 Puppet Server 和 Agent。你需要在 Puppet Server 和 Agent 两台机器上都配置 Puppet 仓库,然后为每台机器安装对应的 Puppet 软件包。
添加 Puppet 仓库
请确保在 Puppet Server 和 Agent 上都运行此命令。
使用以下命令将 Puppet 仓库添加到 Puppet Server 和 Agent。
sudo rpm -Uvh https://yum.puppet.com/puppet7-release-el-8.noarch.rpm
添加仓库后,运行下面的 dnf 命令验证两台服务器上可用的仓库列表。
sudo dnf repolist
你应该能在仓库列表中看到 Puppet 仓库。

安装并配置 Puppet Server
添加仓库后,就可以开始安装 Puppet Server 了。
首先,运行下面的 dnf 命令在 pp-server 上安装 puppetserver 软件包。
sudo dnf install puppetserver
当提示时输入 y,然后按 ENTER 继续。

同样,在需要添加 Puppet 仓库的 GPG 密钥时输入 y。

安装完成后,运行以下命令将 Puppet 系统 profile 加载到系统中。然后,验证 PATH 环境变量,确保 Puppet Server 的 bin 目录已添加。
source /etc/profile.d/puppet-agent.sh
echo $PATH
如果成功,你应该能看到 /opt/puppetlabs/bin 目录已存在于系统 PATH 中。
接下来,运行以下命令定位 puppetserver 二进制文件并验证 puppetserver 版本。
which puppetserver
puppetserver -v
在输出中,你应该能看到 puppetserver 二进制文件位于 /opt/puppetlabs/bin/puppetserver。并且当前安装的 puppetserver 版本为 v7.11。

安装 Puppet Agent
现在可以在 agent1.hwdomain.lan 机器上安装 Puppet Agent 了。
在 Agent 机器上,运行以下命令安装 puppet-agent 软件包。当提示时输入 y 并按 ENTER。
sudo dnf install puppet-agent

同样,再次输入 y 以添加 Puppet 仓库的 GPG 密钥。

puppet-agent 安装完成后,运行以下命令将 Puppet 系统 profile 加载到当前会话。然后,检查系统 PATH 环境变量。
source /etc/profile.d/puppet-agent.sh
echo $PATH
如果 Puppet 系统 profile 已加载,你应该能看到 /opt/puppetlabs/bin 目录已存在于系统 PATH 中。
运行以下命令定位 puppet 二进制文件并验证 puppet-agent 版本。
which puppet
puppet -v
你应该能看到 puppet 二进制文件位于 /opt/puppetlabs/bin/puppet,puppet-agent 版本为 v7.11。

最后,运行下面的 systemctl 命令在 Agent 机器上启动并启用 puppet 服务。
sudo systemctl start puppet
sudo systemctl enable puppet
然后,运行以下命令确认 puppet 服务正在运行。
sudo systemctl status puppet
如果一切正常,你应该会看到如下输出:

配置 Puppet Server
在 Puppet Server 和 Agent 都安装完成后,下一步将配置 Puppet Server 的安装。你需要设置 Puppet Server 的默认 server 名称,设置 agent 的 runinterval,然后启动并启用 Puppe Server 服务。
首先,使用 vim 编辑器打开 /etc/sysconfig/puppetserver 文件。
sudo nano /etc/sysconfig/puppetserver
在 JAVA_ARGS 参数中,增大 Puppet Server 的最大内存分配。该配置取决于你当前的系统内存。本示例中,Puppet Server 拥有 4GB 内存,将为 Puppet Server 分配 2GB。
# Modify this if you'd like to change the memory allocation, enable JMX, etc JAVA_ARGS="-Xms2g -Xmx2g"
完成后保存文件并退出编辑器。
现在,运行下面的 puppet 命令,将默认 server 名称改为 pp-server.hwdomain.lan,将 runinterval 改为 1 小时。runinterval 参数表示 Agent 多久应用一次 Puppet catalogs。
puppet config set server pp-server.hwdomain.lan --section main
puppet config set runinterval 1h --section main
接下来,运行以下命令将默认 environment 设置为 production,并为 Puppet Server 设置备用名称为 pp-server 和 pp-server.hwdomain.lan。
puppet config set environment production --section server
puppet config set dns_alt_names pp-server,pp-server.hwdomain.lan --section server

这些 puppet 命令执行后,设置将保存到默认的 Puppet 配置文件 /etc/puppetlabs/puppet/puppet.conf 中。运行以下命令查看 /etc/puppetlabs/puppet/puppet.conf 文件内容。
cat /etc/puppetlabs/puppet/puppet.conf
你应该会看到类似如下的配置:

现在运行以下命令重新加载 systemd 管理器。
sudo systemctl daemon-reload
然后使用以下 systemctl 命令启动并启用 puppetserver 服务。
sudo systemctl start puppetserver
sudo systemctl enable puppetserver
puppetserver 启动后,请运行以下命令进行验证。
sudo systemctl status puppetserver
如果 puppetserver 正在运行,你应该会看到类似如下的输出:

在 Puppet Server 上配置 Firewalld
配置完 Puppet Server 后,你必须在 Puppet Server 上开放 8140 端口,并允许你的网络访问它。我们现在来配置 firewalld,并在 pp-server.hwdomain.lan 上开放 8140 端口。
运行以下命令将你的本地网络添加到 firewalld,并开放 Puppet Server 将要使用的 TCP 8140 端口。
sudo firewall-cmd --add-source=192.168.10.0/24 --permanent
sudo firewall-cmd --add-port=8140/tcp --permanent
然后,使用以下命令重新加载 firewalld 并验证已启用的规则列表。
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
你应该能看到网络 192.168.10.0/24 已添加到 firewalld,且 8140 端口已在 firewalld 上开放。
将 Puppet Agent 注册到 Puppet Server
本节介绍如何将 Puppet Agent 添加并注册到 Puppet Server。你将把 agent.hwdomain.lan 注册到 Puppet Server pp-server.hwdomain.lan。
为此,请按照以下步骤操作:
- 在 Agent 端定义默认的 Puppet Server,并重启 Puppet Agent。
- 在 Puppet Agent 端初始化证书签名请求。
- 在 Puppet Server 上签署证书请求。
- 验证已签名的证书列表。
定义 Agent 可以连接的默认 Puppet Server,以及用于 Agent 验证的 ca_server。本示例中,Puppet Server 运行在 fqdn pp-server.hwdomain.lan 上。
puppet config set server pp-server.hwdomain.lan --section agent
puppet config set ca_server pp-server.hwdomain.lan --section agent
运行以下命令验证 Puppet Agent 配置 /etc/puppetlabs/puppet/puppet.conf。确保你拥有正确的 server 和 ca_server 配置。
cat /etc/puppetlabs/puppet/puppet.conf
你应该会收到类似如下的输出:

现在运行以下命令在 Agent 机器上重启 puppet 服务并验证其状态。
sudo systemctl restart puppet
sudo systemctl status puppet
如果你配置了正确的 Puppet Agent,你应该能看到 Puppet server 状态为 running。

接下来,运行以下命令初始化 Puppet Agent 机器。
puppet ssl bootstrap
这将在 Agent 机器上生成新的证书,并向 Puppet Server 进行身份验证。

切换到 Puppet Server,运行以下命令查看证书列表(包括待处理的和已接受的)。然后,接受并签署来自 Agent 机器 agent1.hwdomain.lan 的证书请求。
puppetserver ca list --all
puppetserver ca sign --certname agent1.hwdomain.lan
Puppet Server 签署证书后,你应该会看到消息 " Successfully signed certificate request for agent1.hwdomain.lan "。

然后在 Puppet Agent 机器上,你应该会看到消息 " Notice: Completed SSL initialization "。
最后,使用以下命令在 Puppet Server 上重新查看已签名证书列表。
puppetserver ca list --all
如果一切成功,你应该能在 Signed Certificates 部分看到 agent1.hwdomain.lan 机器的证书。

现在,你已成功在两台不同的 AlmaLinux 服务器上安装并配置了 Puppet Server 和 Agent。下一步,你将创建第一个用于自动部署应用程序的 Puppet manifest。
创建首个 Puppet Manifest
本节作为使用 Puppet 配置管理自动部署应用程序的入门。你将创建第一个 Puppet manifest,用于在 Puppet Agent agent1.hwdomain.lan 上安装 LAMP Stack。
请确保在 Puppet Server 上运行以下命令并创建 Puppet manifests。
进入 /etc/puppetlabs/code/environments/production/ 目录,并为你的项目创建新的 modules 目录 modules/lamp/。
cd /etc/puppetlabs/code/environments/production/
mkdir -p modules/lamp/{manifests,files}
进入 modules/lamp/ 目录,并使用 nano 编辑器创建新文件 manifests/init.pp。
cd modules/lamp/
nano manifests/init.pp
将以下 Puppet 脚本插入文件。这将在 Agent 机器上安装 LAMP Stack 软件包,确保 LAMP Stack 服务处于运行并启用状态,创建自定义文件 index.html 到 /var/www/html/index.html 目录,并新建一个 PHPINFO 文件 /var/www/html/info.php。
class lamp {
Package { ensure => 'installed' }
$lamppackages = [ 'httpd', 'mariadb-server', 'php' ]
package { $lamppackages: }
Service { ensure => 'running', enable => 'true'}
$lampsvc = [ 'httpd', 'mariadb' ]
service { $lampsvc: }
file { '/var/www/html/index.html':
ensure => file,
content => "<h1><center>Welcome to httpd - Managed by Puppet</center></h1>",
mode => '0644',
}
file { '/var/www/html/info.php':
ensure => file,
content => "<?php phpinfo(); ?>",
mode => '0644',
}
}
完成后保存并关闭文件。
接下来,再次进入 /etc/puppetlabs/code/environments/production/ 目录,并使用 nano 编辑器创建另一个文件 manifests/sites.pp。
cd /etc/puppetlabs/code/environments/production/
nano manifests/sites.pp
定义你想要使用的 Puppet Agent 和 module。本示例中,你将把 lamp 模块部署到 Agent 机器 agent1.hwdomain.lan。
node 'agent1.hwdomain.lan' {
include lamp
}
保存文件并退出编辑器。
在 Agent 上应用 Puppet Manifest
在 Agent 机器上,运行以下命令拉取并应用部署。
puppet agent -t
Puppet Agent 现在应该从 Puppet Server 获取 catalog 部署,将其缓存到 Agent 机器上,然后应用该部署。

一切完成后,运行下面的 systemctl 命令验证 httpd 和 MariaDB 两个服务。
检查 httpd 服务,确保其处于运行并启用状态。
sudo systemctl is-enabled httpd
sudo systemctl status httpd

检查 MariaDB 服务,确保其处于运行并启用状态。
sudo systemctl is-enabled mariadb
sudo systemctl status mariadb

打开你的 Web 浏览器,访问 Puppet Agent 的 IP 地址(例如:http://192.168.10.21/)。如果部署成功,你应该会看到如下自定义的 index.html 页面:

现在访问 URL 路径 /info.php(例如:http://192.168.10.21/info.php)。如果已安装 PHP,你应该会看到如下详细的 PHPINFO 页面:

总结
恭喜你,已成功在 AlmaLinux 服务器上完成 Puppet Server 和 Agent 的安装。你还创建了第一个用于部署 LAMP stack 的 Puppet manifest,这已经是一个不错的起点。现在你可以创建自己的 Puppet manifest 来部署你的应用程序。