Ubuntu 15.04上Puppet的安装教程

时间:2020-03-05 15:28:08  来源:igfitidea点击:

在本教程中,我们将介绍如何在运行ubuntu 15.04 linux发行版的代理程序和主设置中安装开源Puppet。
在此,Puppet主服务器是一台服务器,在该服务器中将控制和管理所有配置,而我们所有剩余的服务器将是puppet代理节点,该节点根据puppet主服务器的配置进行配置。
这是一些简单的步骤,用于安装和配置puppet来管理运行Ubuntu 15.04的服务器基础结构。

1.设置主机

在本教程中,我们将使用两台计算机,其中一台用作Puppet主服务器,另一台用作Puppet节点代理,它们均在两台计算机上运行ubuntu 15.04“ Vivid Vervet”。
这是我们将在本教程中使用的服务器的基础结构。

IP 44.55.88.6和主机名的puppet master服务器:puppetmaster
IP 45.55.86.39和主机名的puppet节点代理:puppetnode

现在,我们将机器的条目添加到机器节点代理和主服务器上的/etc/hosts中。

# nano /etc/hosts
45.55.88.6 puppetmaster.example.com puppetmaster
45.55.86.39 puppetnode.example.com puppetnode

请注意,Puppet Master服务器必须在端口8140上可访问。
因此,我们需要其中打开端口8140。

2.使用NTP更新时间

由于p节点需要维护准确的系统时间,以避免在颁发代理证书时出现问题。
如果存在时间差,证书可能似乎已过期,因此主代理和节点代理的时间必须彼此同步。
要同步时间,我们将使用NTP更新时间。
为此,下面是我们需要在主代理和节点代理上运行的以下命令。

# ntpdate pool.ntp.org

17 Jun 00:17:08 ntpdate[882]: adjust time server 66.175.209.17 offset -0.001938 sec

Now, we'll update our local repository index and install ntp as follows.

# apt-get update && sudo apt-get -y install ntp ; service ntp restart

3. Puppet主软件包安装

有多种安装开源Puppet的方法。
在本教程中,我们将下载并安装一个由Puppet Labs打包的名为puppetlabs-release的debian二进制软件包,它将添加puppetmaster-passenger软件包的源代码。
puppetmaster-passenger包括带有apache Web服务器的puppet master。
因此,我们现在将下载Puppet Labs软件包。

# cd /tmp/
# wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
--2014-06-17 00:19:26-- https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
Resolving apt.puppetlabs.com (apt.puppetlabs.com)... 192.155.89.90, 2600:3c03::f03c:91ff:fedb:6b1d
Connecting to apt.puppetlabs.com (apt.puppetlabs.com)|192.155.89.90|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7384 (7.2K) [application/x-debian-package]
Saving to: ‘puppetlabs-release-trusty.deb’
puppetlabs-release-tr 100%[===========================>] 7.21K --.-KB/s in 0.06s
2014-06-17 00:19:26 (130 KB/s) - ‘puppetlabs-release-trusty.deb’ saved [7384/7384]

下载完成后,我们将要安装该软件包。

# dpkg -i puppetlabs-release-trusty.deb
Selecting previously unselected package puppetlabs-release.
(Reading database ... 85899 files and directories currently installed.)
Preparing to unpack puppetlabs-release-trusty.deb ...
Unpacking puppetlabs-release (1.0-11) ...
Setting up puppetlabs-release (1.0-11) ...

然后,我们将使用apt软件包管理器与服务器一起更新本地存储库索引。

# apt-get update

然后,我们将通过运行以下命令来安装puppetmaster-passenger软件包。

# apt-get install puppetmaster-passenger

注意:在安装过程中,我们可能会出现错误警告:不建议使用设置templatedir。
参见http://links.puppetlabs.com/env-settings-deprecations(位于“ issue_deprecation_warning”中的/usr/lib/ruby/vendor_ruby/puppet/settings.rb:1139 :),但我们无需担心,我们会只是简单地忽略它,因为它说templatedir已被弃用,因此,我们将简单地拒绝配置中的该设置。
:)

要检查puppetmaster是否已成功安装到我们的主服务器中,我们将尝试检查其版本。

# puppet --version
3.8.1

我们已在Puppet主包装盒中成功安装了Puppet主包装。
当我们将乘客与apache一起使用时,Puppet主进程由apache服务器控制,这意味着它在apache运行时运行。

在继续之前,我们需要通过停止apache2服务来停止Puppet主服务器。

# systemctl stop apache2

4.使用Apt的主版本锁定

由于我们的Puppet版本为3.8.1,因此我们需要锁定Puppet版本更新,因为这会在更新Puppet时弄乱配置。
因此,我们将为此使用apt的锁定功能。
为此,我们需要使用我们喜欢的文本编辑器创建一个新文件/etc/apt/preferences.d/00-puppet.pref。

纳米/etc/apt/preferences.d/00-puppet.pref

然后,我们将在新创建的文件中将条目添加为:

# /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common puppetmaster-passenger
Pin: version 3.8*
Pin-Priority: 501

现在,它不会在系统中运行更新时更新Puppet。

5.配置Puppet配置

Puppet主控方充当证书颁发机构,并且必须生成自己的证书,该证书用于签署代理证书请求。
首先,我们需要删除在安装软件包期间创建的所有现有SSL证书。
puppet的SSL证书的默认位置是/var/lib/puppet/ssl。
因此,我们将使用rm命令删除整个ssl目录。

# rm -rf /var/lib/puppet/ssl

然后,我们将配置证书。
创建Puppet主证书时,我们需要包括代理节点可以通过其与主节点联系的每个DNS名称。
因此,我们将使用我们最喜欢的文本编辑器来编辑母版的puppet.conf。

# nano /etc/puppet/puppet.conf

输出类似如下所示。

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates
[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY

其中我们需要注释templatedir行以禁用设置,因为它已经被折旧了。
之后,我们将在文件末尾的[main]下添加以下行。

server = puppetmaster environment = production runinterval = 1h strict_variables = true certname = puppetmaster dns_alt_names = puppetmaster, puppetmaster.example.com

该配置文件具有许多选项,这些选项对于设置自己的配置可能有用。
Puppet Labs主配置文件(puppet.conf)中提供了该文件的完整说明。

编辑文件后,我们要保存该文件并退出。

现在,我们将通过运行以下命令来生成新的CA证书。

# puppet master --verbose --no-daemonize

Info: Creating a new SSL key for ca Info: Creating a new SSL certificate request for ca Info: Certificate Request fingerprint (SHA256): F6:2F:69:89:BA:A5:5E:FF:7F:94:15:6B:A7:C4:20:CE:23:C7:E3:C9:63:53:E0:F2:76:D7:2E:E0:BF:BD:A6:78 ... Notice: puppetmaster has a waiting certificate request Notice: Signed certificate request for puppetmaster Notice: Removing file Puppet::SSL::CertificateRequest puppetmaster at '/var/lib/puppet/ssl/ca/requests/puppetmaster.pem' Notice: Removing file Puppet::SSL::CertificateRequest puppetmaster at '/var/lib/puppet/ssl/certificate_requests/puppetmaster.pem' Notice: Starting Puppet master version 3.8.1 ^CNotice: Caught INT; storing stop Notice: Processing stop

现在,正在生成证书。
一旦看到“注意:启动Puppet主版本3.8.1”,证书设置就完成了。
然后,我们按CTRL-C返回到shell。

如果要查看刚刚创建的证书的证书信息,可以通过运行以下命令来获取列表。

# puppet cert list -all

+ "puppetmaster" (SHA256) 33:28:97:86:A1:C3:2F:73:10:D1:FB:42:DA:D5:42:69:71:84:F0:E2:8A:01:B9:58:38:90:E4:7D:B7:25:23:EC (alt names: "DNS:puppetmaster", "DNS:puppetmaster.example.com")

6.创建Puppet列表

主列表的默认位置是/etc/puppet/manifests/site.pp。
主列表文件包含用于在Puppet节点代理中执行的配置的定义。
现在,我们将通过运行以下命令来创建列表文件。

# nano /etc/puppet/manifests/site.pp

然后,我们将在刚打开的文件中添加以下配置行。

# execute 'apt-get update'
exec { 'apt-update': # exec resource named 'apt-update'
command => '/usr/bin/apt-get update' # command this resource will run
}
# install apache2 package
package { 'apache2':
require => Exec['apt-update'], # require 'apt-update' before installing
ensure => installed,
}
# ensure apache2 service is running
service { 'apache2':
ensure => running,
}

上面的配置行负责跨节点代理部署apache Web服务器的安装。

7.启动主服务

我们现在准备启动Puppet Master 。
我们可以通过运行apache2服务来启动它。

# systemctl start apache2

其中我们的Puppet主服务器正在运行,但尚未管理任何代理节点。
现在,我们将把Puppet节点代理添加到主节点。

注意:如果收到错误消息,则apache2.service的作业失败。
有关详细信息,请参见“ systemctl status apache2.service”和“ journalctl -xe”。
那么肯定是apache服务器有问题。
因此,我们可以通过在root或者sudo模式下运行apachectl start来查看日志到底发生了什么。
其中在执行本教程时,我们在/etc/apache2/sites-enabled/puppetmaster.conf文件下对证书进行了错误配置。
我们将SSLCertificateFile /var/lib/puppet/ssl/certs/server.pem替换为SSLCertificateFile /var/lib/puppet/ssl/certs/puppetmaster.pem,并注释了SSLCertificateKeyFile行。
然后,我们需要重新运行以上命令来运行apache服务器。

8. Puppet代理程序包安装

现在,由于我们已经准备好Puppet主控器,并且需要一个代理进行管理,因此我们需要将Puppet代理安装到节点中。
我们需要在我们希望由puppet master管理的基础结构中的每个节点中安装puppet agent。
我们需要确保已在DNS中添加了节点代理。
现在,我们将在我们的代理节点即安装最新的Puppet代理。
puppetnode.example.com。

我们将运行以下命令以在我们的puppet代理节点中下载Puppet Labs软件包。

# cd /tmp/
# wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb\
--2014-06-17 00:54:42-- https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
Resolving apt.puppetlabs.com (apt.puppetlabs.com)... 192.155.89.90, 2600:3c03::f03c:91ff:fedb:6b1d
Connecting to apt.puppetlabs.com (apt.puppetlabs.com)|192.155.89.90|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7384 (7.2K) [application/x-debian-package]
Saving to: ‘puppetlabs-release-trusty.deb’
puppetlabs-release-tr 100%[===========================>] 7.21K --.-KB/s in 0.04s
2014-06-17 00:54:42 (162 KB/s) - ‘puppetlabs-release-trusty.deb’ saved [7384/7384]

然后,当我们运行ubuntu 15.04时,我们将使用debian软件包管理器进行安装。

dpkg -i puppetlabs-release-trusty.deb

现在,我们将使用apt-get更新存储库索引。

# apt-get update

最后,我们将直接从远程存储库安装Puppet代理。

# apt-get install puppet

默认情况下,Puppet代理始终处于禁用状态,因此我们需要启用它。
为此,我们需要使用文本编辑器编辑/etc/default/puppet文件。

# nano /etc/default/puppet

然后,我们需要将START的值更改为“ yes”,如下所示。

START=yes

然后,我们需要保存并退出文件。

9.带有Apt的Agent版本锁定

由于我们的Puppet版本为3.8.1,因此我们需要锁定Puppet版本更新,因为这会在更新Puppet时弄乱配置。
因此,我们将为此使用apt的锁定功能。
为此,我们需要使用我们喜欢的文本编辑器创建文件/etc/apt/preferences.d/00-puppet.pref。

# nano /etc/apt/preferences.d/00-puppet.pref

然后,我们将在新创建的文件中将条目添加为:

# /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common
Pin: version 3.8*
Pin-Priority: 501

现在,它不会在系统中运行更新时更新Puppet。

10.配置Puppet节点代理

接下来,我们必须在运行代理之前进行一些配置更改。
为此,我们需要编辑代理的puppet.conf

# nano /etc/puppet/puppet.conf

它看起来与Puppet主文件的初始配置文件完全一样。

这次我们还将注释templatedir行。
然后,我们将删除[master]部分及其下面的所有行。

假设在“ puppet-master”上可以访问Puppet主服务器,则代理应该能够连接到该人主机。
如果没有,我们将需要使用其完全限定的域名,即。
puppetmaster.example.com。

[agent] server = puppetmaster.example.com certname = puppetnode.example.com

添加之后,它看起来会像这样。

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
#templatedir=$confdir/templates
[agent]
server = puppetmaster.example.com
certname = puppetnode.example.com

完成之后,我们将保存并退出它。

接下来,我们要在Ubuntu 15.04节点中启动我们最新的Puppet代理。
要启动我们的Puppet代理,我们需要运行以下命令。

# systemctl start puppet

如果一切都按预期进行并正确配置,则运行上述命令不会显示任何输出。
当我们第一次运行代理程序时,它会生成一个SSL证书并向Puppet主服务器发送一个请求,然后,如果主服务器签署了该代理程序的证书,它将能够与该代理程序节点进行通信。

注意:如果要添加第一个节点,建议我们在添加其他代理之前先尝试在Puppet主机上签名证书。
确认一切正常后,我们可以返回并进一步添加其余的代理节点。

11.在主服务器上签署证书申请

当up代理程序首次运行时,它会生成一个SSL证书,并向主服务器发送一个签名请求。
在主机能够通信和控制代理节点之前,它必须签署该特定代理节点的证书。

要获取证书请求列表,我们将在Puppet主服务器中运行以下命令。

# puppet cert list
"puppetnode.example.com" (SHA256) 31:A1:7E:23:6B:CD:7B:7D:83:98:33:8B:21:01:A6:C4:01:D5:53:3D:A0:0E:77:9A:77:AE:8F:05:4A:9A:50:B2

当我们刚刚设置我们的第一个代理节点时,我们将看到一个请求。
它将类似于以下内容,其中代理节点的域名为主机名。

请注意,它前面没有'+'表示尚未签名。

现在,我们将签署认证请求。
为了签署认证请求,我们应该简单地使用主机名运行puppet cert sign,如下所示。

# puppet cert sign puppetnode.example.com

注意:已签名的puppetnode.example.com证书请求注意:删除文件Puppet :: SSL :: CertificateRequest puppetnode.example.com,位于“ /var/lib/puppet/ssl/ca/requests/puppetnode.example.com.pem”

Puppet主服务器现在可以通信和控制签名证书所属的节点。

如果要签署所有当前请求,可以使用-all选项,如下所示。

# puppet cert sign --all

删除Puppet证书

如果我们要从中删除主机或者要重建主机,则将其添加回它。
在这种情况下,我们将要从the主机撤消主机的证书。
为此,我们将要使用清理操作,如下所示。

# puppet cert clean hostname
Notice: Revoked certificate with serial 5
Notice: Removing file Puppet::SSL::Certificate puppetnode.example.com at '/var/lib/puppet/ssl/ca/signed/puppetnode.example.com.pem'
Notice: Removing file Puppet::SSL::Certificate puppetnode.example.com at '/var/lib/puppet/ssl/certs/puppetnode.example.com.pem'

如果我们要查看所有已签名和未签名的请求,请运行以下命令:

# puppet cert list --all
+ "puppetmaster" (SHA256) 33:28:97:86:A1:C3:2F:73:10:D1:FB:42:DA:D5:42:69:71:84:F0:E2:8A:01:B9:58:38:90:E4:7D:B7:25:23:EC (alt names: "DNS:puppetmaster", "DNS:puppetmaster.example.com")

12.部署Puppet列表

配置并完成Puppet列表后,我们要将列表部署到代理节点服务器。
要应用和加载主列表,我们可以简单地在代理节点中运行以下命令。

# puppet agent --test
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppetnode.example.com
Info: Applying configuration version '1434563858'
Notice: /Stage[main]/Main/Exec[apt-update]/returns: executed successfully
Notice: Finished catalog run in 10.53 seconds

这将向我们显示所有过程,主要列表将如何立即影响单个服务器。

如果我们要运行与主列表不相关的p列表,我们可以简单地使用puppet apply后跟列表文件路径。
它仅将列表应用于我们从其运行apply的节点。

# puppet apply /etc/puppet/manifest/test.pp

13.配置特定节点的列表

如果我们只想将列表部署到特定节点,则需要按以下方式配置列表。

我们需要使用文本编辑器在主服务器上编辑列表。

# nano /etc/puppet/manifest/site.pp

现在,我们将其中添加以下几行。

node 'puppetnode', 'puppetnode1' {
# execute 'apt-get update'
exec { 'apt-update': # exec resource named 'apt-update'
command => '/usr/bin/apt-get update' # command this resource will run
}
# install apache2 package
package { 'apache2':
require => Exec['apt-update'], # require 'apt-update' before installing
ensure => installed,
}
# ensure apache2 service is running
service { 'apache2':
ensure => running,
}
}

其中以上配置将仅将apache Web服务器安装和部署到具有短名称puppetnode和puppetnode1的两个指定节点。
我们可以添加更多需要与列表一起部署的节点。

14.使用模块配置列表

模块对于将任务分组在一起很有用,在Puppet社区中有许多模块可用,任何人都可以进一步做出贡献。

在puppet master上,我们将使用puppet module命令安装puppetlabs-apache模块。

# puppet module install puppetlabs-apache

警告:请不要在现有的apache设置上使用此模块,否则它将清除非puppet管理的apache配置。

现在,我们将使用文本编辑器编辑主列表即site.pp。

# nano /etc/puppet/manifest/site.pp

现在添加以下行以将apache安装在puppetnode下。

node 'puppet-node' {
class { 'apache': } # use apache module
apache::vhost { 'example.com': # define vhost resource
port => '80',
docroot => '/var/www/html'
}
}

然后,我们要保存并退出它。
然后,我们要重新运行列表,以将配置部署到基础架构的代理。