如何在 Ubuntu 16.04 上安装 Puppet 4

介绍

Puppet 是一个配置管理工具,可帮助系统管理员自动配置、配置和管理服务器基础设施. 提前规划并使用像 Puppet 这样的配置管理工具可减少重复基本任务的时间,并有助于确保配置在整个基础设施中一致和准确。

Puppet 有两种类型, Puppet Enterprise 和开源 Puppet. 它们都运行在大多数 Linux 发行版、各种 UNIX 平台和 Windows 上。

在本教程中,我们将展示如何在Ubuntu 16.04上的主代理设置中安装开源Puppet 4。

前提条件

要遵循本教程,您将需要 三台 Ubuntu 16.04 服务器 ,每台都有一个具有sudo特权的非根用户,您可以在我们的 初始服务器设置与 Ubuntu 16.04指南中了解有关如何设置具有 sudo 特权的用户的更多信息。

一个娃娃大师

一个服务器将是 Puppet master . Puppet master 将运行 Puppet Server,这是一种资源密集的服务器,需要:

  • 至少 4GB 内存
  • 至少 2 CPU cores

要管理更大的基础设施,人偶大师将需要更多的资源。

两个娃娃特工

其他两个服务器将是 Puppet 代理节点 ,由 Puppet 主人管理,我们将称之为db1web1

当这三个服务器在位时,你已经准备好开始了。

步骤 1 — 配置 /etc/hosts

在大多数情况下,这将通过DNS实现,无论是在外部托管服务或作为基础设施的一部分维护的自托DNS服务器上配置的。

DNS是它自己的专业领域,但即使是在托管服务上,所以为了专注于Puppet本身的基本知识,并在我们学习时消除潜在的故障排除复杂性,在本教程中,我们将使用/etc/hosts文件。

在每台机器上

在每个机器上,编辑 /etc/hosts 文件. 在文件的末尾,指定 Puppet 主服务器如下,取代 IP 地址为 your Puppet master:

1sudo nano /etc/hosts
1[label /etc/hosts]
2 . . .
3puppet_ip_address puppet
4 . . .

当你完成时,保存和退出。

<$>[注] 注: 默认情况下,Puppet 代理将搜索Puppet masterpuppet上,以便更容易地设置Puppet。这意味着我们必须在/etc/hosts中使用puppet的名称。

步骤 2 – 安装 Puppet Server

Puppet Server 是将配置从 Puppet 主机推向其他服务器的软件,它只在 Puppet 主机上运行;其他主机将运行 Puppet Agent。

<$>[注] 注: Ubuntu 包管理器 does 包含 Puppet 的包,但许多管理员需要管理多个操作系统和版本。

我们将通过这些命令启用官方 Puppet Labs 收藏库:

1curl -O https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
2sudo dpkg -i puppetlabs-release-pc1-xenial.deb
3sudo apt-get update

apt-get 更新完成后,确保我们将从 Puppet Labs 存储库中提取,我们将安装puppetserver包:

1sudo apt-get install puppetserver

一旦安装完成,并且在我们启动服务器之前,我们将花一会儿来配置内存。

配置内存分配

默认情况下,Puppet Server 配置为使用 2 GB 的 RAM. 您可以根据主服务器有多少免费内存和管理多少代理节点来定制此设置。

要定制它,请打开 /etc/default/puppetserver:

1sudo nano /etc/default/puppetserver

然后找到JAVA_ARGS行,然后使用-Xms-Xmx参数来设置内存分配。

1[label /etc/default/puppetserver]
2JAVA_ARGS="-Xms3g -Xmx3g -XX:MaxPermSize=256m"

保存和退出,当你完成。

打开防火墙

当我们启动 Puppet Server 时,它将使用端口 8140 进行通信,因此我们将确保它是开放的:

1sudo ufw allow 8140

接下来,我们将启动 Puppet 服务器。

启动人偶服务器

我们将使用systemctl来启动 Puppet 服务器:

1sudo systemctl start puppetserver

这将需要一些时间来完成。

一旦我们返回命令提示,我们将验证我们成功了,因为systemctl不会显示所有服务管理命令的结果:

1sudo systemctl status puppetserver

我们应该看到一行说活跃(运行),最后一行应该看起来像:

1[secondary_label Output]
2Dec 07 16:27:33 puppet systemd[1]: Started puppetserver Service.

现在我们已经确保服务器正在运行,我们将配置为在启动时启动:

1sudo systemctl enable puppetserver

随着服务器运行,我们现在已经准备好在我们的两个代理机上设置Puppet Agent,即db1web1

步骤3 - 安装娃娃代理

Puppet 代理软件必须安装在任何 Puppet 主将管理的服务器上,在大多数情况下,这将包括您的基础设施中的每个服务器。

<$>[note] 注: Puppet 代理程序可以在所有主要的 Linux 发行版、一些 UNIX 平台和 Windows 上运行。安装说明在每个操作系统上有所不同.在 CentOS 上安装 Puppet 代理程序的指示可在这里(https://andsky.com/tech/tutorials/how-to-install-puppet-4-in-a-master-agent-setup-on-centos-7# install-puppet-agent),并且您可以在 Puppet Reference Manual中找到完整的安装目标指示。

启用 Puppet Labs 官方存储库

首先,我们将使用以下命令启用官方 Puppet Labs 收藏库:

1[environment second]
2wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
3sudo dpkg -i puppetlabs-release-pc1-xenial.deb
4sudo apt-get update

安装娃娃代理

接下来,我们将安装娃娃代理包:

1[environment second]
2sudo apt-get install puppet-agent

我们将启动代理,并允许它在启动中启动:

1[environment second]
2sudo systemctl start puppet
3sudo systemctl enable puppet

最后,我们将在web1中重复这些步骤:

1[environment third]
2wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
3sudo dpkg -i puppetlabs-release-pc1-xenial.deb
4sudo apt-get update
5sudo apt-get install puppet-agent
6sudo systemctl enable puppet
7sudo systemctl start puppet

现在,既然两个代理节点都运行了 Puppet 代理软件,我们将在 Puppet 主机上签署证书。

步骤4 - 签署娃娃大师证书

Puppet 首次在代理节点上运行时,它会向 Puppet 主人发送证书签名请求,然后 Puppet Server 才能与代理节点进行通信和控制,然后必须签署该特定的代理节点的证书。

现有证书申请列表

若要列出所有未签名的证书请求,请在 Puppet 主机上运行以下命令:

1sudo /opt/puppetlabs/bin/puppet cert list

您设置的每个主机都应该有一个请求,它看起来如下:

1[secondary_label Output:]
2  "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
3  "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 的证书,你会使用以下命令:

1sudo /opt/puppetlabs/bin/puppet cert sign db1.localdomain

与下面的示例类似的输出表示已签署证书请求:

1[secondary_label Output:]
2Notice: Signed certificate request for db.localdomain
3Notice: Removing file Puppet::SSL::CertificateRequest db1.localdomain at '/etc/puppetlabs/puppet/ssl/ca/requests/db1.localdomain.pem'

Puppet 主机现在可以通信和控制签署证书所属的节点,您也可以同时签署所有当前请求。

我们将使用--all选项来签署剩余的证书:

1sudo /opt/puppetlabs/bin/puppet cert sign --all

现在所有证书都签署了,Puppet 可以管理基础设施,您可以在 How to Manage Puppet 4 Certificates 骗局中了解有关管理证书的更多信息。

步骤5:检查安装

Puppet 使用特定域的语言来描述系统配置,这些描述被保存到名为manifests的文件中,这些文件具有.pp 文件扩展. 您可以在 Getting Started with Puppet Code: Manifests and Modules 指南中了解更多有关这些信息,但目前我们将创建一个简短的指令来验证 Puppet Server 可以按照预期管理代理人。

我们将通过在默认位置创建默认宣言,‘site.pp’开始:

1sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp

我们将使用 Puppet 的特定域语言在位于 tmp 目录中的代理节点上创建一个名为 it_works.txt 的文件,该文件包含代理服务器的公共 IP 地址,并将权限设置为-rw-r--r--`:

1[label site.pp example]
2file {'/tmp/it_works.txt':                        # resource type file and filename
3  ensure  => present,                             # make sure it exists
4  mode    => '0644',                              # file permissions
5  content => "It works on ${ipaddress_eth0}!\n",  # Print the eth0 IP fact
6}

默认情况下,Puppet Server 默认情况下每 30 分钟运行其宣言中的命令. 如果文件被删除,则确保指令会使其重新创建。

我们还可以使用玩偶代理 - 测试来测试单个节点上的宣言,请注意,测试不是干跑的旗帜;如果成功,它会改变代理的配置。

而不是等待娃娃大师应用更改,我们将应用现在的db1:

1[environment second]
2sudo /opt/puppetlabs/bin/puppet agent --test

输出应该看起来像:

 1[secondary_label Output]
 2[environment second]
 3Info: Using configured environment 'production'
 4Info: Retrieving pluginfacts
 5Info: Retrieving plugin
 6Info: Loading facts
 7Info: Caching catalog for db1.localdomain
 8Info: Applying configuration version '1481131595'
 9Notice: /Stage[main]/Main/File[/tmp/it_works.txt]/ensure: defined content as '{md5}acfb1c7d032ed53c7638e9ed5e8173b0'
10Notice: Applied catalog in 0.03 seconds

完成后,我们将检查文件内容:

1[environment second]
2cat /tmp/it_works.txt
1[secondary_label Output]
2[environment second] 
3It works on 203.0.113.0!

重复为web1或,如果您喜欢,在半个小时左右检查,以确认娃娃大师正在自动运行。

<$>[note] 注: 您可以检查Puppet master上的日志文件,以查看Puppet最后一次(https://docs.puppet.com/puppet/latest/subsystem_catalog_compilation.html)为代理编写目录,这表明任何所需的更改都应该被应用。

1tail /var/log/puppetlabs/puppetserver/puppetserver.log
1[secondary_label Output excerpt]
2 . . . 
32016-12-07 17:35:00,913 INFO  [qtp273795958-70] [puppetserver] Puppet Caching node for web1.localdomain
42016-12-07 17:35:02,804 INFO  [qtp273795958-68] [puppetserver] Puppet Caching node for web1.localdomain
52016-12-07 17:35:02,965 INFO  [qtp273795958-68] [puppetserver] Puppet Compiled catalog for web1.localdomain in environment production in 0.13 seconds
6 . . .

美元

恭喜您!您已成功安装了 Master/Agent 模式中的 Puppet。

结论

现在你有一个基本的代理 / 主人 Puppet 安装,你已经准备好了解更多关于如何使用 Puppet 来管理你的服务器基础设施. 查看以下教程: Getting Started With Puppet Code: Manifests and Modules

Published At
Categories with 技术
comments powered by Disqus