如何在Ubuntu16.04上安装Puppet4
介绍
Puppet 是一种配置管理工具,可帮助系统管理员自动执行服务器基础架构的配置、配置和管理。 提前计划并使用 Puppet 等配置管理工具可以减少重复基本任务所花费的时间,并有助于确保整个基础架构中的配置一致且准确。
Puppet 有两个品种,Puppet Enterprise 和开源 Puppet。 它们都在大多数 Linux 发行版、各种 UNIX 平台和 Windows 上运行。
在本教程中,我们将演示如何在 Ubuntu 16.04 的主代理设置中安装开源 Puppet 4。 在此设置中,运行 Puppet Server 软件的 Puppet master 服务器可用于控制您的所有其他服务器,称为 Puppet 代理 节点。
先决条件
要学习本教程,您将需要 三台 Ubuntu 16.04 服务器 ,每台服务器都有一个具有 sudo
权限的非 root 用户。 您可以在我们的 Initial Server Setup with Ubuntu 16.04 指南中了解有关如何设置具有 sudo 权限的用户的更多信息。
一位傀儡师
一台服务器将是 Puppet master。 Puppet master 将运行 Puppet Server,这是资源密集型的,需要:
- 至少 4GB 内存
- 至少 2 个 CPU 内核
为了管理更大的基础设施,Puppet Master 将需要更多资源。
两名傀儡特工
其他两台服务器将是 Puppet 代理节点 ,由 Puppet Master 管理。 我们称它们为 db1
和 web1
。
当这三台服务器就位后,您就可以开始了。
第 1 步 — 配置 /etc/hosts
Puppet 主服务器及其管理的节点需要能够相互通信。 在大多数情况下,这将使用 DNS 来完成,可以在外部托管服务上配置,也可以在作为基础架构一部分维护的自托管 DNS 服务器上完成。
然而,DNS 是它自己的专业领域,即使在托管服务上也是如此,因此为了专注于 Puppet 本身的基础知识并在我们学习时消除故障排除的潜在复杂性,在本教程中,我们将使用 [ X239X] 文件。
在每台机器上
在每台机器上,编辑 /etc/hosts
文件。 在文件末尾,指定 Puppet master 服务器,如下所示,将 IP 地址替换为 your Puppet master:
sudo nano /etc/hosts
/etc/hosts
. . . puppet_ip_address puppet . . .
完成后,保存并退出。
注意: 默认情况下,Puppet 代理将在 puppet
处寻找 Puppet Master,以便更轻松地设置 Puppet。 这意味着我们 必须 在 /etc/hosts
中使用名称 puppet
。 如果 puppet
无法解析为 Puppet Master,如果 在代理的 puppet.conf 中配置服务器值,代理将无法联系。
第 2 步 — 安装 Puppet 服务器
Puppet Server 是将配置从 Puppet Master 推送到其他服务器的软件。 它只在 Puppet master 上运行; 其他主机将运行 Puppet 代理。
注意: Ubuntu包管理器确实包含Puppet的包,但是很多管理员需要管理多个操作系统和版本。 在这种情况下,使用官方 Puppet Labs 存储库可以通过允许您在所有系统上维护相同的 Puppet 版本来简化管理。
我们将使用以下命令启用官方 Puppet Labs 集合存储库:
curl -O https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb sudo dpkg -i puppetlabs-release-pc1-xenial.deb sudo apt-get update
当 apt-get update
完成时,确保我们将从 Puppet Labs 存储库中提取,我们将安装 puppetserver
包:
sudo apt-get install puppetserver
按 Y
继续。 安装完成后,在启动服务器之前,我们将花点时间配置内存。
配置内存分配
默认情况下,Puppet Server 配置为使用 2 GB 的 RAM。 您可以根据主服务器拥有多少可用内存以及它将管理多少代理节点来自定义此设置。
要自定义它,请打开 /etc/default/puppetserver
:
sudo nano /etc/default/puppetserver
然后找到JAVA_ARGS
这一行,使用-Xms
和-Xmx
参数设置内存分配。 我们将增加到 3 GB:
/etc/default/puppetserver
JAVA_ARGS="-Xms3g -Xmx3g -XX:MaxPermSize=256m"
完成后保存并退出。
打开防火墙
当我们启动 Puppet Server 时,它会使用 8140 端口进行通信,所以我们要确保它是开放的:
sudo ufw allow 8140
接下来,我们将启动 Puppet 服务器。
启动 Puppet 服务器
我们将使用 systemctl
来启动 Puppet 服务器:
sudo systemctl start puppetserver
这需要一些时间才能完成。
一旦我们返回到命令提示符,我们将验证我们已经成功,因为 systemctl
不显示所有服务管理命令的结果:
sudo systemctl status puppetserver
我们应该看到一行写着“活动(运行)”,最后一行应该类似于:
OutputDec 07 16:27:33 puppet systemd[1]: Started puppetserver Service.
现在我们已经确保服务器正在运行,我们将其配置为在启动时启动:
sudo systemctl enable puppetserver
随着服务器的运行,现在我们准备在我们的两台代理机器上设置 Puppet 代理,db1
和 web1
。
第 3 步 — 安装 Puppet 代理
Puppet 代理软件必须安装在 Puppet Master 将管理的任何服务器上。 在大多数情况下,这将包括基础架构中的每台服务器。
注意: Puppet 代理可以在所有主要的 Linux 发行版、某些 UNIX 平台和 Windows 上运行。 安装说明因操作系统而异。 在 CentOS 上安装 Puppet 代理的说明可在 here 获得,您可以在 Puppet 参考手册 中找到完整安装目标集的说明。
启用官方 Puppet Labs 存储库
首先,我们将使用以下命令启用官方 Puppet Labs 集合存储库:
wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb sudo dpkg -i puppetlabs-release-pc1-xenial.deb sudo apt-get update
安装 Puppet 代理包
然后,我们将安装 puppet-agent
包:
sudo apt-get install puppet-agent
我们将启动代理并使其在启动时启动:
sudo systemctl start puppet sudo systemctl enable puppet
最后,我们将在 web1
上重复这些步骤:
wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb sudo dpkg -i puppetlabs-release-pc1-xenial.deb sudo apt-get update sudo apt-get install puppet-agent sudo systemctl enable puppet sudo systemctl start puppet
现在两个代理节点都在运行 Puppet 代理软件,我们将在 Puppet Master 上签署证书。
第 4 步 — 在 Puppet Master 上签署证书
Puppet 第一次在代理节点上运行时,它会向 Puppet Master 发送证书签名请求。 在 Puppet Server 能够与代理节点进行通信和控制之前,它必须签署该特定代理节点的证书。
列出当前的证书请求
要列出所有未签名的证书请求,请在 Puppet Master 上运行以下命令:
sudo /opt/puppetlabs/bin/puppet cert list
您设置的每个主机都应该有一个请求,如下所示:
Output: "db1.localdomain" (SHA256) 46:19:79:3F:70:19:0A:FB:DA:3D:C8:74:47:EF:C8:B0:05:8A:06:50:2B:40:B3:B9:26:35:F6:96:17:85:5E:7C "web1.localdomain" (SHA256) 9D:49:DE:46:1C:0F:40:19:9B:55:FC:97:69:E9:2B:C4:93:D8:A6:3C:B8:AB:CB:DD:E6:F5:A0:9C:37:C8:66:A0
证书前面的 +
表示它已被签名。 没有加号表示我们的新证书尚未签署。
签署请求
要签署单个证书请求,请使用 puppet cert sign
命令,并使用证书请求中显示的证书主机名。
例如,要签署 db1 的证书,您可以使用以下命令:
sudo /opt/puppetlabs/bin/puppet cert sign db1.localdomain
类似于以下示例的输出表明证书请求已被签名:
Output:Notice: Signed certificate request for db.localdomain Notice: Removing file Puppet::SSL::CertificateRequest db1.localdomain at '/etc/puppetlabs/puppet/ssl/ca/requests/db1.localdomain.pem'
Puppet master 现在可以通信和控制签名证书所属的节点。 您还可以一次签署所有当前请求。
我们将使用 --all
选项来签署剩余的证书:
sudo /opt/puppetlabs/bin/puppet cert sign --all
现在所有证书都已签名,Puppet 可以管理基础架构。 您可以在 如何管理 Puppet 4 证书 备忘单中了解有关管理证书的更多信息。
第 5 步 — 验证安装
Puppet 使用特定领域的语言来描述系统配置,这些描述被保存到名为“manifests”的文件中,文件扩展名为 .pp
。 您可以在 Puppet 代码入门:清单和模块 指南中了解有关这些内容的更多信息,但现在我们将创建一个简短的指令来验证 Puppet 服务器是否可以按预期管理代理。
我们将首先在默认位置创建默认清单 site.pp
:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp
我们将使用 Puppet 的域特定语言在位于 tmp
目录的代理节点上创建一个名为 it_works.txt
的文件,其中包含代理服务器的公共 IP 地址并将权限设置为 [X212X ]:
site.pp 示例
file {'/tmp/it_works.txt': # resource type file and filename ensure => present, # make sure it exists mode => '0644', # file permissions content => "It works on ${ipaddress_eth0}!\n", # Print the eth0 IP fact }
默认情况下,Puppet Server 默认每 30 分钟运行一次清单中的命令。 如果文件被删除,ensure
指令将导致它被重新创建。 mode
指令将设置文件权限,content
指令将内容添加到指令中。
我们还可以使用 puppet agent --test
在单个节点上测试清单。 请注意,--test
不是试运行的标志; 如果成功,它将更改代理的配置。
我们现在将在 db1
上应用清单,而不是等待 Puppet master 应用更改:
sudo /opt/puppetlabs/bin/puppet agent --test
输出应该类似于:
OutputInfo: Using configured environment 'production' Info: Retrieving pluginfacts Info: Retrieving plugin Info: Loading facts Info: Caching catalog for db1.localdomain Info: Applying configuration version '1481131595' Notice: /Stage[main]/Main/File[/tmp/it_works.txt]/ensure: defined content as '{md5}acfb1c7d032ed53c7638e9ed5e8173b0' Notice: Applied catalog in 0.03 seconds
完成后,我们将检查文件内容:
cat /tmp/it_works.txt
Output[environment second] It works on 203.0.113.0!
对 web1
重复此操作,或者,如果您愿意,请在半小时左右后再检查以验证 Puppet Master 是否自动运行。
注意: 您可以查看 Puppet Master 上的日志文件以查看 Puppet 上次 为代理编译目录 的时间,这表明应该已应用所需的任何更改。
tail /var/log/puppetlabs/puppetserver/puppetserver.log
Output excerpt . . . 2016-12-07 17:35:00,913 INFO [qtp273795958-70] [puppetserver] Puppet Caching node for web1.localdomain 2016-12-07 17:35:02,804 INFO [qtp273795958-68] [puppetserver] Puppet Caching node for web1.localdomain 2016-12-07 17:35:02,965 INFO [qtp273795958-68] [puppetserver] Puppet Compiled catalog for web1.localdomain in environment production in 0.13 seconds . . .
恭喜! 您已成功以 Master/Agent 模式安装 Puppet。
结论
现在您已经安装了基本的代理/主 Puppet,您可以了解有关如何使用 Puppet 管理服务器基础架构的更多信息。 查看以下教程:木偶代码入门:清单和模块。