介绍
Puppet是一种配置管理工具,可帮助系统管理员自动执行服务器基础架构的配置,配置和管理。提前规划和使用Puppet等配置管理工具可以减少重复基本任务的时间,并帮助确保配置在基础架构中一致和准确。 Puppet有两个品种,Puppet Enterprise和开源Puppet。它们都运行在大多数Linux发行版,各种UNIX平台和Windows上。 在本教程中,我们将演示如何在Ubuntu 16.04上的主代理设置中安装开源Puppet 4。在这种设置中, Puppet主服务器,用于运行服务器Puppet软件可用于控制所有其他服务器,称为 Puppet代理节点。先决条件
要学习本教程,您将需要 三个Ubuntu 16.04服务器 ,每一个非root用户sudo
权限。 您可以了解更多关于如何设置使用sudo权限的用户在我们
与Ubuntu 16.04的初始服务器安装指南。
第一个 Puppet master
一台服务器将成为 Puppet master 。 Puppet master将运行Puppet Server,这是资源密集型的,需要:- 至少4GB的内存
- 至少2个CPU内核
第二个Puppet代理
另外两个服务器将 Puppet代理节点 ,由Puppet master管理。 我们会打电话给他们db1
和
web1
。 当这三个服务器到位时,您就可以开始。
第1步 - 配置 /etc/hosts
Puppet主服务器和它们管理的节点需要能够彼此通信。在大多数情况下,这将使用DNS(在外部托管服务上配置)或作为基础结构的一部分维护的自托管DNS服务器上实现。 DNS是自己的专业技术领域,但是,即使是在托管服务,因此为了专注于Puppet本身的基本面和消除潜在的故障排除复杂性,同时我们了解到,在本教程中,我们将使用/etc/hosts
文件。
在每台机器
在每台计算机上,编辑/etc/hosts
的文件。 在文件的结尾,指定Puppet主服务器如下,供
您Puppet master取代IP地址:
sudo nano /etc/hosts
/ etc / hosts
. . .
puppet_ip_address puppet
. . .
完成后,保存并退出。
注:默认情况下,Puppet代理会寻找Puppet master的puppet
,使其更容易获得日伪成立。
这意味着我们必须使用名称puppet
在/etc/hosts
。
如果puppet
不能解决的Puppet master,代理商将不能够进行接触,而不配置server
在代理 puppet.conf 值 。
第2步 - 安装Puppet服务器
Puppet服务器是将配置从Puppet主机推送到其他服务器的软件。它只运行在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实验室库拉动,我们将安装
puppetserver
包:
sudo apt-get install puppetserver
按
Y
继续。安装完成后,在启动服务器之前,我们需要花一点时间配置内存。
配置内存分配
默认情况下,Puppet服务器配置为使用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服务器时,它将使用端口8140进行通信,所以我们将确保它是开放的:ufw allow 8140
接下来,我们将启动Puppet服务器。
启动Puppet服务器
我们将使用systemctl
启动Puppet服务器:
sudo systemctl start puppetserver
这将需要一些时间来完成。 一旦我们回到命令提示符下,我们将验证我们已经成功了,因为
systemctl
不显示所有服务管理命令的结果:
sudo systemctl status puppetserver
我们应该看到一行“active(running)”,最后一行应该是这样:
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上运行。每个操作系统的安装说明都有所不同。方向安装在CentOSPuppet剂可在这里 ,你可以找到中全套的安装目标方向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主机上签名证书。
第4步 - 在Puppet Master上签名证书
第一次Puppet在代理节点上运行时,它向Puppet主机发送证书签名请求。在Puppet服务器将能够与代理节点通信和控制代理节点之前,它必须签署该特定代理节点的证书。列出当前证书请求
要列出所有未签名的证书请求,请在Puppet主服务器上运行以下命令: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主服务器现在可以通信和控制签名证书所属的节点。您也可以一次签署所有当前请求。 我们将使用
--all
选项签署其余证书:
sudo /opt/puppetlabs/bin/puppet cert sign --all
现在所有的证书都已签名,Puppet可以管理基础设施。
第5步 - 验证安装
Puppet使用特定域的语言来描述的系统配置,并且这些描述被保存的文件名为“清单”,其中有一个.pp
文件扩展名。 您可以了解更多关于这些在
入门Puppet代码:清单及模块的指南,但现在我们要创建一个简单的指令,以验证Puppet服务器可以管理代理预期。 我们将首先创建一个缺省清单,
site.pp
,在默认位置:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp
我们将使用Puppet的领域特定语言来创建一个名为
it_works.txt
上位于代理节点
tmp
其中包含代理服务器的公网IP地址目录权限设置为
-rw-r--r--
:
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服务器在其清单中运行默认情况下每隔30分钟的命令。如果文件被删除,
ensure
指令将导致它被重新创建。 该
mode
指令将设置文件权限,以及
content
指令内容添加到该指令。 我们还可以使用测试单个节点上的清单
puppet agent --test
。 需要注意的是
--test
不是空运行的标志;如果它成功,它将更改代理的配置。 而不是等待的Puppet master以应用更改,我们将立即申请清单上
db1
:
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 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
. . .
恭喜!您已成功地在主/代理模式下安装Puppet。