Create Installation Guide for Puppet on Ubuntu 15.04

This commit is contained in:
ivo wang 2015-12-04 10:53:37 +08:00
parent f3573b6179
commit 2aaec293dd

View File

@ -0,0 +1,411 @@
如何在Ubuntu 15.04中安装puppet
================================================================================
大家好本教程将教大家如何在ubuntu 15.04上面安装puppet用它来管理你的服务器基础环境。puppet是由puppet实验室开发并维护的一款开源软件它帮我们自动的管理配置服务器的基础环境。不管我们管理的是几个服务器还是数以千计的机器设备组成的业务流程及报表puppet都能够使管理员从繁琐的手动调整中解放出来腾出时间和精力去提升整体效率。它能够确保自动化流程作业的一致性可靠性以及稳定性。它让管理员和开发者走得更近叫付出更加简洁清晰设计良好的代码。puppet提供了管理配置和自动化数据中心的2个解决方案。分别是**puppet开源项目 and puppet商业版**.puppet开源项目在apache2.0上是灵活可定制的的解决方案设置初衷是帮助他们完成那些经常操作的重复性工作。pupprt商业版是一个全平台复杂IT环境下的成熟解决方案它除了拥有开源版本所有优势以外还有移动端apps只有商业版才有的加强支持以及模块化和集成管理等。Puppet使用SSL证书来认证主机与代理节点之间的通信。
本教程将要介绍如何在ubuntu15.04的主机和代理节点上面安装开源版的puppet。在这我们用一台服务器做主机管理和控制剩余的当作puppet的代理节点的服务器这些代理节点将依据服务器来进行配置。在ubuntu 15.04只需要简单的几步就能安装配置好puppet用它来管理我们的服务器基础环境非常的方便。译者注puppet采用的C/S架构所以必须有至少有一台作为服务端其他作为客户端处理
### 1.设置主机###
Here is the infrastructure of the server that we're gonna use for this tutorial.
在本教程里我们将使用用2台运行ubuntu 15.04 "Vivid Vervet"的主机一台作为服务端另一台作为puppet的代理节点。这就是我们将用到的服务器基础环境。
puupet服务器IP44.55.88.6,主机名: puppetmaster
puppet 代理节点 IP 45.55.86.39 ,主机名: puppetnode
Now we'll add the entry of the machines to /etc/hosts on both machines node agent and master server.
我们要在代理节点和服务器这两天机器的hosts里面都添加上相应的条目使用root或是sudo访问权限来编辑/etc/hosts文件命令如下
# nano /etc/hosts
45.55.88.6 puppetmaster.example.com puppetmaster
45.55.86.39 puppetnode.example.com puppetnode
注意puppet服务端必使用8140端口来运行所以请务必保证开启8140端口。
### 2. 用NTP更新时间 ###
To do so, here's the command below that we need to run on both master and node agent.
puppet的代理节点所使用系统时间必须要准确这样可以避免代理证书出现问题。如果有时间差异那么证书将过期失效所以服务器与代理节点的系统时间必须双方互相同步。我们使用NTPNetwork Time Protocol网络时间协议来更新同步时间。在服务器与代理节点上面分别运行以下命令来同步时间
# ntpdate pool.ntp.org
17 Jun 00:17:08 ntpdate[882]: adjust time server 66.175.209.17 offset -0.001938 sec (译者注:显示类似的输出结果表示运行正常)
使用下面的命令更新你的软件仓库安装并运行ntp服务
# apt-get update && sudo apt-get -y install ntp ; service ntp restart
### 3. 安装服务器软件 ###
There are many ways to install open source puppet. In this tutorial, we'll download and install a debian binary package named as **puppetlabs-release** packaged by the Puppet Labs which will add the source of the **puppetmaster-passenger** package. The puppetmaster-passenger includes the puppet master with apache web server. So, we'll now download the Puppet Labs package.
有很多的方法可以用来安装开源版本的puppet。在本教程中我们在puppet实验室官网下载一个名为puppetlabs-release的软件包安装后它为我们在软件源里面添加puppetmaster-passenger。puppetmaster-passenger是基于apache的puppet服务端。我们开始下载这个软件包
# cd /tmp/
# wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
--2015-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
2015-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
**提示**: 在安装的时候可能会报错**Warning: Setting templatedir is deprecated.请查看 http://links.puppetlabs.com/env-settings-deprecations (at /usr/lib/ruby/vendor_ruby/puppet/settings.rb:1139:in `issue_deprecation_warning')** 不过不用担心忽略掉它就好报错的意思是templatedir过时了我们只需要在设置配置文件的时候把这一项disable就行了。
如何来查看puppet master是否已经安装成功了呢非常简单只需要使用下面的命令查看它的版本就可以了。
# puppet --version
3.8.1
现在我们已经安装好了puppet master。要想使用puppet master apache服务就必须运行起来因为puppet master进程的运行是基于apache的。
在开始之前我们将apache服务停止这样puppet muster也会停止运行。
# systemctl stop apache2
### 4. 使用Apt工具锁定Master服务端版本 ###
现在已经安装了 3.8.1版的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 puppetmaster-passenger
Pin: version 3.8*
Pin-Priority: 501
这样在以后的系统软件升级中puppet将被锁住不会跟随系统软件一起升级。
### 5. 配置 Puppet###
Puppet master作为一个证书发行机构所有代理证书的请求都将由它来处理。首先我们要删除所有在软件包安装过程中创建出来已经存在的ssl证书。本地默认的puppet证书在/var/lib/puppet/ssl。因此我们只需要使用rm命令来移除这些证书就可以了。
# rm -rf /var/lib/puppet/ssl
现在来配置这些证书在创建puppet master'证书的时候需要用到能与服务器通信的代理节点的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 这行使它失效。在文件的结尾添加下面的信息。
server = puppetmaster
environment = production
runinterval = 1h
strict_variables = true
certname = puppetmaster
dns_alt_names = puppetmaster, puppetmaster.example.com
这里有很多有用的建立适合你的配置项。 如果你有需要在Puppet实验室有一份详细的描述文件供你阅读。 [Main Config File (puppet.conf)][1].
编辑完成后保存退出。
使用下面的命令来生成一个新的证书。
# 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
至此,证书已经生成. 一旦我们看到 **Notice: Starting Puppet master version 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. 这个主要清单文件定义着控制哪些代理节点。我们现在使用下面的命令来创建一个清单文件
# 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. 运行Master服务###
已经准备好运行puppet master了那么开启apache服务来让它运行
# systemctl start apache2
我们puppet master已经跑起来了, 但是现在他还不能管理任何代理节点。现在我们给master添加代理节点.
**Note**: If you get an error **Job for apache2.service failed. See "systemctl status apache2.service" and "journalctl -xe" for details.** then it must be that there is some problem with the apache server. So, we can see the log what exactly has happened by running **apachectl start** under root or sudo mode. Here, while performing this tutorial, we got a misconfiguration of the certificates under **/etc/apache2/sites-enabled/puppetmaster.conf** file. We replaced **SSLCertificateFile /var/lib/puppet/ssl/certs/server.pem with SSLCertificateFile /var/lib/puppet/ssl/certs/puppetmaster.pem** and commented **SSLCertificateKeyFile** line. Then we'll need to rerun the above command to run apache server.
**提示**: 如果报错 **Job for apache2.service failed. 查看"systemctl status apache2.service" and "journalctl -xe" 所给出的信息.** 肯定是apache server有一些问题. 我们可以使用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的服务端现在来安装代理节点安装客户端。这里我们要给每一个需要管理的节点安装客户端并且确保这些节点能够通过DNS查找的服务器主机。下面将 puppetnode.example.com作为代理节点安装客户端
在代理节点上使用下面的命令下载puppet实验室提供的软件包。
# cd /tmp/
# wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb\
--2015-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
2015-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包管理命令更新一下本地的软件源
# apt-get update
通过远程仓库安装
# apt-get install puppet
Puppet客户端默认是不启动的。这里我们需要使用文本编辑器修改/etc/default/puppet文件使它正常工作。
# nano /etc/default/puppet
更改 **START** 的值改成 "yes" 。
START=yes
最后保存并退出。
### 9. 使用APT工具锁定Agent客户端版本###
和上面的步骤一样为防止随意升级造成的配置文件混乱我们要将该版本使用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
它看起来和服务端的配置文件完全一样。
同样注释掉**templatedir**这行. 在这里我们需要删除掉所有关于[master]的部分。
假定服务端可用我们的客户端应该是可以和它相互连接通信的。如果不行我们需要使用完整的域名puppetmaster.example.com
[agent]
server = puppetmaster.example.com
certname = puppetnode.example.com
在文件的结尾增加上面3行增加之后文件内容像下面这样。
[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
最后保存并退出。
使用下面的命令来启动客户端软件
# systemctl start puppet
如果一切顺利的话,我们不会看到命令行有任何输出。 第一次运行的时候,代理节点会生成一个ssl证书并且发送一个请求给服务端通过确认后两台机器就可以互相通信了。
**Note**: If you are adding your first node, it is recommended that you attempt to sign the certificate on the puppet master before adding your other agents. Once you have verified that everything works properly, then you can go back and add the remaining agent nodes further.
**提示**: 如果这是你添加的第一个代理节点,建议你在添加其他节点前先给这个证书签名。一旦能够通过并正常运行,回过头来再添加其他代理节点。
### 11. 主服务器上的签名证书请求 ###
第一次运行的时候,代理节点会生成一个ssl证书并且发送一个请求给服务端.在主服务器给代理节点服务器的证书签名之后,主服务器才能和代理服务器通信并且控制代理服务器。
在主服务器上使用下面的命令来列出现有的证书请求
# 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**到**hostname**这个命令来签署这个签名请求。
# puppet cert sign puppetnode.example.com
Notice: Signed certificate request for puppetnode.example.com
Notice: Removing file Puppet::SSL::CertificateRequest puppetnode.example.com at '/var/lib/puppet/ssl/ca/requests/puppetnode.example.com.pem'
服务端只能和它所签名的代理节点通信并控制代理节点。
如想我们想签署所有的请求, 我们需要使用-all选项如下所示。
# puppet cert sign --all
### 删除一个Puppet证书 ###
如果我们想移除一个主机,或者想重建一个主机然后再添加它. 下面的例子我们将展示如何删除puppet master上面的一个证书. 使用的命令如下:
# 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清单 ###
After we configure and complete the puppet manifest, we'll wanna deploy the manifest to the agent nodes server. To apply and load the main manifest we can simply run the following command in the agent node.
当我们配置并完成主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
这里像我们展示了主清单如何去管理一个单一的服务器。
If we wanna run a puppet manifest that is not related to the main manifest, we can simply use puppet apply followed by the manifest file path. It only applies the manifest to the node that we run the apply from.
如果我们打算运行的puppet清单与主清单没有什么关联那么需要使用puppet apply 到相应的路径。它仅适用于该代理节点。
# puppet apply /etc/puppet/manifest/test.pp
### 13. 配置一个特殊节点清单 ###
如果我们想部署一个清单到某个特定的节点,我们需要配置清单如下。
在主服务器上面使用文本编辑器编辑/etc/puppet/manifest/site.pp
# 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,
}
}
这里的配置显示我们将在名为puppetnode and puppetnode1的2个特殊节点上面安装apache服务. 这里可以添加更多我们需要安装部署的具体节点进去。
### 14. 配置清单模块 ###
模块化组件组是非常实用的在Puppet社区有很多人提交自己的模块。
在主puppet服务器上, 我们将使用uppet module命令来安装**puppetlabs-apache** 模块。
# puppet module install puppetlabs-apache
**警告**: 千万不要在一个已经部署apache环境的机器上面使用这个模块否则它将清空你的apache配置。
现在用文本编辑器来修改 **site.pp**
# nano /etc/puppet/manifest/site.pp
添加下面的内容进去,意思是在 puppetnode上面安装apache服务。
node 'puppet-node' {
class { 'apache': } # use apache module
apache::vhost { 'example.com': # define vhost resource
port => '80',
docroot => '/var/www/html'
}
}
保存退出。这样为我们的代理服务器重新配置部署基础环境。
### 总结 ###
现在我们已经成功的在ubuntu 15.04上面部署并运行puppet来管理代理节点服务器的基础运行环境.我们学习了puppet是如何工作的配置清单文件节点与主机间的ssl证书认证。使用puppet控制管理并且配置众多的代理节点服务器是非常容易的。如果你有任何的问题建议反馈请务必与我们取得联系我们将及时的改善更新谢谢。
--------------------------------------------------------------------------------
via: http://linoxide.com/linux-how-to/install-puppet-ubuntu-15-04/
作者:[Arun Pyasi][a]
译者:[译者ID](https://github.com/ivo-wang)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://linoxide.com/author/arunp/
[1]:https://docs.puppetlabs.com/puppet/latest/reference/config_file_main.html