Ubuntu 15.04上Puppet的安装教程
在本教程中,我们将介绍如何在运行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' } }
然后,我们要保存并退出它。
然后,我们要重新运行列表,以将配置部署到基础架构的代理。