本页内容

  • 准备工作
  • 配置 /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。

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

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

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

安装 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 仓库。

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

安装并配置 Puppet Server

添加仓库后,就可以开始安装 Puppet Server 了。

首先,运行下面的 dnf 命令在 pp-server 上安装 puppetserver 软件包。

sudo dnf install puppetserver

当提示时输入 y,然后按 ENTER 继续。

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

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

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

安装完成后,运行以下命令将 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。

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

安装 Puppet Agent

现在可以在 agent1.hwdomain.lan 机器上安装 Puppet Agent 了。

在 Agent 机器上,运行以下命令安装 puppet-agent 软件包。当提示时输入 y 并按 ENTER。

sudo dnf install puppet-agent

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

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

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

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。

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

最后,运行下面的 systemctl 命令在 Agent 机器上启动并启用 puppet 服务。

sudo systemctl start puppet
sudo systemctl enable puppet

然后,运行以下命令确认 puppet 服务正在运行。

sudo systemctl status puppet

如果一切正常,你应该会看到如下输出:

在 AlmaLinux 9 上安装 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

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

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

cat /etc/puppetlabs/puppet/puppet.conf

你应该会看到类似如下的配置:

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

现在运行以下命令重新加载 systemd 管理器。

sudo systemctl daemon-reload

然后使用以下 systemctl 命令启动并启用 puppetserver 服务。

sudo systemctl start puppetserver
sudo systemctl enable puppetserver

puppetserver 启动后,请运行以下命令进行验证。

sudo systemctl status puppetserver

如果 puppetserver 正在运行,你应该会看到类似如下的输出:

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

在 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

你应该会收到类似如下的输出:

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

现在运行以下命令在 Agent 机器上重启 puppet 服务并验证其状态。

sudo systemctl restart puppet
sudo systemctl status puppet

如果你配置了正确的 Puppet Agent,你应该能看到 Puppet server 状态为 running。

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

接下来,运行以下命令初始化 Puppet Agent 机器。

puppet ssl bootstrap

这将在 Agent 机器上生成新的证书,并向 Puppet Server 进行身份验证。

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

切换到 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 "。

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

然后在 Puppet Agent 机器上,你应该会看到消息 " Notice: Completed SSL initialization "。

最后,使用以下命令在 Puppet Server 上重新查看已签名证书列表。

puppetserver ca list --all

如果一切成功,你应该能在 Signed Certificates 部分看到 agent1.hwdomain.lan 机器的证书。

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

现在,你已成功在两台不同的 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 机器上,然后应用该部署。

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

一切完成后,运行下面的 systemctl 命令验证 httpd 和 MariaDB 两个服务。

检查 httpd 服务,确保其处于运行并启用状态。

sudo systemctl is-enabled httpd
sudo systemctl status httpd

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

检查 MariaDB 服务,确保其处于运行并启用状态。

sudo systemctl is-enabled mariadb
sudo systemctl status mariadb

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

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

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

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

在 AlmaLinux 9 上安装 Puppet 服务端并部署其客户端

总结

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