如何在 Debian 11 上安装 Puppet Server 和 Agent
在此页
- 先决条件
- 设置 FQDN
- 添加 Puppet 存储库
- 安装 Puppet 服务器
- 配置 Puppet 服务器
- 安装和配置 Puppet 代理
- 将 Puppet 代理注册到 Puppet 服务器
- 创建第一个 Puppet 清单
- 验证和应用 Puppet 清单
- 结论
Puppet 是一个集中的配置管理和自动化工具。 DevOps 创建配置管理来部署服务器和应用程序,所有用于自动化的配置都存储在中央“Puppet Server”上。之后,\Agent\ 节点将从 \Puppet Server\ 中提取新配置并应用定义的状态。
\Puppet Server\ 和 \Agent\ 节点之间的所有连接默认使用 SSL/TLS 证书加密。 Puppet 使用领域特定语言 (DSL) 来描述系统配置,其语法类似于 Ruby。
在本指南中,您将在 Debian 11 Bullseye 上安装和配置 Puppet 服务器和代理。您将在主机名为 puppet-server 的服务器上安装 Puppet 服务器,并在主机名为 agent 的服务器上安装 Puppet agent。最后,您将创建第一个 puppet 清单,用于在代理节点上安装基本 LEMP 堆栈。
先决条件
- 您将需要两台不同的 Debian 11 服务器。
- IP 地址为 192.168.5.100 的 puppet-server 和 fqdn puppet-server.localdomainl.lan。
- 具有 IP 地址 192.168.5.150 和 fqdn agent.localdomain.lan 的代理节点。
设置 FQDN
首先,您将在 puppet-server 和代理上设置完全限定域名 (FQDN) 和 /etc/hosts 文件。这将确保两台服务器都可以与本地域名进行通信。
要设置 FQDN,请运行下面的 hostnamectl 命令。
运行以下命令在 puppet-server 上设置 fqdn puppet-server.localdomain.lan。
hostnamectl set-hostname puppet-server.localdomain.lan
运行以下命令在代理节点上设置 fqdn agent.localdomain.lan。
hostnamectl set-hostname agent.localdomain.lan
接下来,使用 vim 编辑器编辑 /etc/hosts 文件,如下所示。
sudo vim /etc/hosts
复制并粘贴以下配置。
192.168.5.100 puppet-server.localdomain.lan
192.168.5.150 agent.localdomain.lan保存文件并退出。
最后,运行下面的 ping 命令来验证人偶服务器和代理之间的连接。
ping puppet-server.localdomain.lan -c3
ping agent.localdomain.lan -c3如果您的配置正确,您将看到以下输出。 puppet-server.localdomain.lan解析到服务器192.168.5.100,agent.localdomain.lan解析到代理节点192.168.5.150。
添加 Puppet 存储库
默认情况下,Puppelabs 为不同的 Linux 发行版提供存储库包,包括最新的 Debian 11 Bullseye。在此步骤中,您将向 puppet-server 和代理添加并安装 Puppet 存储库。在撰写本文时,Puppet 的最新版本是 v7.x。
使用下面的 wget 命令下载存储库包。
wget https://apt.puppet.com/puppet7-release-bullseye.deb
接下来,使用下面的 dpkg 命令安装 deb 文件 puppet7-release-bullseye.deb。
sudo dpkg -i puppet7-release-bullseye.deb
安装完成后,运行下面的 apt 命令来更新和刷新 Debian 软件包索引。
sudo apt update
现在您已准备好安装 Puppet 包。
安装傀儡服务器
在此步骤中,您将在 puppet-server 上安装 Puppet 服务器包。在撰写本文时,Puppet 的最新版本是 v7。
要安装 Puppet Server,请运行下面的 apt 命令。此命令还会自动安装其他包,例如 Java OpenJDK。
sudo apt install puppetserver
输入 Y 确认安装。
安装完成后,您需要加载 Puppet Server 的 bash 环境。
默认情况下,Puppet 将其二进制文件存储在 /opt/puppetlabs/bin 目录中。运行以下命令为 Puppet Server 应用新的 PATH 环境变量。
source /etc/profile.d/puppet-agent.sh
echo $PATH或者,您也可以通过运行以下命令来应用 PATH 环境变量。
echo "export PATH=$PATH:/opt/puppetlabs/bin/" | tee -a ~/.bashrc
source ~/.bashrc现在使用以下命令验证 PATH 环境变量。确保目录 /opt/puppetlabs/bin 在 PATH 环境变量的列表中。
echo $PATH
之后就可以正常运行puppetserver命令了。您可以在下方查看 Puppet 版本。
puppetserver -v
您应该得到类似于下面屏幕截图的输出。
接下来,使用 vim 编辑器编辑 Puppet 服务器配置 /etc/default/puppetserver。
sudo vim /etc/default/puppetserver
更改 Puppet 服务器的最大内存分配。这取决于您的系统内存。在本指南中,我们有 2GB 内存并将分配给 Puppet 服务器 1GB。我们将使用以下配置。
JAVA_ARGS="-Xms1g -Xmx1g"
保存配置文件并退出。
接下来,重新加载 systemd 管理器以应用新的 Puppet 服务文件。
sudo systemctl daemon-reload
然后使用以下命令启动并启用 puppetserver 服务。
sudo systemctl start enable --now puppetserver
服务 puppetserver 应该已启动并正在运行。运行以下命令来验证 puppetserver。
sudo systemctl status puppetserver
您应该会看到类似于下面屏幕截图的输出。
此外,如果您在系统上使用 UFW 防火墙,请务必打开 Puppet 服务器将使用的端口 8140。
运行以下命令,将来自本地子网 192.168.5.0/24 的所有传入连接联合到端口 8140 上的 Puppet 服务器。
sudo ufw allow from 192.168.5.0/24 to any proto tcp port 8140
sudo ufw status以下是您应该看到的当前 UFW 防火墙规则。
配置傀儡服务器
在此步骤中,您将编辑 Puppet 服务器配置。这可以通过直接编辑 Puppet 配置或使用 puppet 命令行生成配置来完成。
运行下面的 puppet 命令来设置 Puppet 服务器。这将设置主要部分中的默认Puppet Server 域名 和运行间隔,以及环境 和dns_alt_names 在服务器部分。
puppet config set server puppet-server.localdomain.lan --section main
puppet config set runinterval 1h --section main
puppet config set environment production --section server
puppet config set dns_alt_names puppet-server,puppet-server.localdomain.lan --section server现在使用下面的 cat 命令检查 Puppet 服务器配置 /etc/puppetlabs/puppet/puppet.conf。
cat /etc/puppetlabs/puppet/puppet.conf
您应该会看到如下所示的 Puppet 服务器配置。
最后,通过运行下面的 systemctl 命令重新启动服务 puppetserver 以应用新配置。
sudo systemctl restart puppetserver
至此,您已经完成了 Puppet Server 的安装和配置。
安装和配置 Puppet 代理
在此步骤中,您将在客户端机器代理上安装和配置 Puppet 代理。
在安装 Puppet 代理之前,请确保您已完成 FQDN 配置并添加了 Puppet 存储库。
现在让我们安装和配置 Puppet 代理。
使用下面的 apt 命令安装包 puppet-agent。
sudo apt install puppet-agent
安装完成后,运行以下命令启动并启用Puppet服务。
sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
您应该会看到类似于下面屏幕截图的输出。
接下来,您将设置 PATH 环境变量以添加 Puppet 二进制路径 /opt/puppetlabs/bin/。这样做,允许您直接运行 puppet 命令,而无需二进制文件的完整路径。
source /etc/profile.d/puppet-agent.sh
echo $PATH另一种方法是使用以下命令将新的 PATH 环境变量添加到 ~/.bashrc 配置中。
echo "export PATH=$PATH:/opt/puppetlabs/bin/" | tee -a ~/.bashrc
source ~/.bashrc现在使用以下命令验证 PATH 环境变量配置。
echo $PATH
您应该会看到 Puppet 二进制路径 /opt/puppetlabs/bin 已添加到 PATH 环境变量中。
将 Puppet 代理注册到 Puppet 服务器
安装 Puppet 代理后,您现在将设置 Puppet 代理以将其注册到主 Puppet 服务器。
首先,确保可以从代理计算机访问 Puppet Server fqdn。使用下面的 ping 命令对其进行测试。
ping puppet-server.localdomain.lan -c3
接下来,运行以下命令来配置 Puppet 代理。这将在代理部分定义 Puppet Server 域名 和 ca_server。
puppet config set server puppet-server.localdomain.lan --section agent
puppet config set ca_server puppet-server.localdomain.lan --section agent在文件 /etc/puppetlabs/puppet/puppet.conf 中验证生成的 Puppet 配置。
cat /etc/puppetlabs/puppet/puppet.conf
您应该会看到类似于下面屏幕截图的输出。
现在,运行以下命令重新启动 Puppet 服务并应用新更改。然后验证 Puppet 服务并确保其处于活动状态并正在运行。
sudo systemctl restart puppet
sudo systemctl status puppet下面是 Puppet 服务状态的输出。
接下来,运行以下命令将 Puppet 代理注册到 Puppet 服务器。此命令将生成新的 TLS 证书并向 Puppet 服务器创建新的证书签名请求。
puppet ssl bootstrap
现在转到 Puppet Server 终端并运行以下命令来检查证书签名请求,然后验证 Puppet Agent agent.localdomain.lan 的证书签名。
puppetserver ca list --all
puppetserver ca sign --certname agent.localdomain.lan您应该会看到诸如 Successfully signed certificate request 之类的消息.....
接下来,运行以下命令来验证 Puppet 服务器上的证书列表。
puppetserver ca list-all
您应该看到两个不同的证书,Puppet Server 和 Puppet Agent 的证书。
现在再次转到 Puppet Agent 终端,您应该会看到诸如 Notice: Completed SSL initialization 之类的消息,这意味着证书签名请求已成功完成。
此时,您已准备好创建一个新的第一个 Puppet 清单。
创建第一个 Puppet 清单
在此步骤中,您将为安装 LEMP 堆栈(Nginx、MariaDB 和 PHP-FPM)创建一个新的第一个 puppet 清单。生产环境的所有清单必须存储在 Puppet 服务器目录 /etc/puppetlabs/code/environments/production/ 中。
将当前工作目录更改为 /etc/puppetlabs/code/environments/production/。
cd /etc/puppetlabs/code/environments/production/
接下来,在 modules 目录下为 LEMP 堆栈创建一个新的清单布局目录。
mkdir -p modules/lemp/{manifests,files}
移动到 modules/lemp 目录并使用 vim/nano 编辑器创建一个新的 Puppet 清单文件 manifests/init.pp。
cd modules/lemp/
nano manifests/init.pp复制并粘贴以下用于安装 LEMP Stack 的 puppet 语法语言,确保每个 LEMP Stack 服务已启动并运行,并创建一个新的自定义 index.html 文件。
class lemp {
Package { ensure => 'installed' }
$lemppackages = [ 'nginx', 'mariadb-server', 'php-fpm' ]
package { $lemppackages: }
Service { ensure => 'running', enable => 'true'}
$lempsvc = [ 'nginx', 'mariadb', 'php7.4-fpm' ]
service { $lempsvc: }
file { '/var/www/html/index.html':
ensure => file,
content => "<h1><center>Welcome to Nginx - Managed by Puppet</center></h1>",
mode => '0644',
}
}保存文件并退出。
接下来,运行以下命令来验证 Puppet 清单文件 init.pp。
puppet parser validate init.pp
如果您没有看到任何输出消息,则配置正确。
现在使用 vim/nano 编辑器创建另一个配置 manifests/site.pp。
cd /etc/puppetlabs/code/environments/production/
vim manifests/sites.pp将目标主机定义为 agent.localdomain.lan 并应用新的 Puppet 清单 lemp。
node 'agent.localdomain.lan' {
include lemp
}保存文件并退出。
使用以下命令再次验证 Puppet 清单配置。
puppet parser validate site.pp
验证和应用 Puppet 清单
您现在已经为部署 LEMP Stack 创建了一个新的第一个 Puppet 清单。此时,Puppet Agent 节点会自动将所有清单同步到 Puppet Server 并应用新的清单配置。
而且,您可以从 Puppet 代理机器手动应用 Puppet 清单。
返回终端服务器代理并运行以下命令以手动应用 Puppet 清单。
puppet agent -t
这将在 Puppet 代理机器上运行 Puppet 清单,并通过 Puppet 清单 lemp 安装 LEMP Stack。
以下是您将获得的输出。
现在运行以下命令来验证每个服务 Nginx、MariaDB 和 PHP-FPM。
sudo systemctl status nginx
sudo systemctl status mariadb
sudo systemctl status php7.4-fpm您应该看到每个服务都处于活动状态并正在运行。
现在打开您的 Web 浏览器并在地址栏中键入您的代理节点的 IP 地址。您应该会在下面看到自定义的 index.html 文件。
您现在已经使用 Puppet 清单成功地将 LEMP 堆栈部署应用到代理机器。
结论
恭喜!您现在已经在 Debian 11 Bullseye 上成功安装了 Puppet Server 和 Agent。此外,您还学习了如何创建用于安装 LEMP Stack 的第一个 Puppet 清单。
O在下一步中,您可能有兴趣设置另一个节点并为您的部署创建一个更复杂的 Puppet 清单。