如何将Puppet服务器及客户端安装到CentOS和RHEL上?

由于系统管理员需要管理的系统越来越多,日常任务自动化显得相当重要。于是,许多管理员采用了编写自定义脚本这种方法,这些脚本其实模拟复杂的调配软件。可遗憾的是,脚本会变得过时,开发脚本的人可能离开了公司,要是没有投入大量的精力来维护,一段时间后这些脚本最终就会无法使用。一种更可取的方法无疑是共享一种人人都能使用的系统,开发不管某人的雇主是谁,都可以使用的工具。这方面有几个系统可供我们使用,本文介绍如何使用其中一个系统:Puppet

何谓Puppet

Puppet是一款面向IT系统管理员和咨询人士的自动化软件。它让用户可以自动处理重复性任务,比如安装应用程序和服务、补丁管理及部署。所有资源的配置都存储在一个所谓的清单文件(manifest)里面,可以适用于多台机器,或适用于仅仅一台服务器。如果你想知道更多信息,The Puppet Labs网站更全面地描述了Puppet的性质及其工作方式:https://puppetlabs.com/puppet/what-is-puppet/

我们准备在本教程中实现什么任务?

我们将安装和配置一台Puppet服务器,并为我们的客户端服务器完成一些基本的配置。我们会介绍如何编写及管理Puppet清单文件以及如何将它发送到你的服务器上。

前提条件

由于Puppet不在基本的CentOSRHEL发行版软件库中,我们只好添加由Puppet Labs提供的自定义软件库。在你想要使用Puppet的所有服务器上,安装该软件库,为此执行下面这个命令(RPM文件名随新版本而变化):

CentOS/RHEL 6.5上:

# rpm -ivh https://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabs-release-6-10.noarch.rpm  

CentOS/RHEL 7上:

# rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-10.noarch.rpm  

服务器的安装

将软件包“puppet-server”安装到你想用作主服务器的服务器上。

# yum install puppet-server  

安装完毕后,设置Puppet服务器,以便在系统启动时自动开启、并打开它。

# chkconfig puppetmaster on  


# service puppetmaster start  

现在我们让服务器运行起来后,就要确保它能够从我们的网络加以访问。

iptables用作防火墙的CentOS/RHEL 6上,将下面这一行添加到/etc/sysconfig/iptables的“:OUTPUT ACCEPT”这部分。

1 -A INPUT -m state --state NEW -m tcp -p tcp --dport 8140 -j ACCEPT  

为了让这个变更生效,有必要重启iptables

# service iptables restart  

在使用firewalldCentOS/RHEL 7上,可以用下列命令实现同一操作:

# firewall-cmd --permanent --zone=public --add-port=8140/tcp  


# firewall-cmd --reload  

客户端的安装

Puppet客户端软件包安装到客户端节点上,为此执行下面这个命令:

# yum install puppet  

安装完毕后,确保Puppet在系统启动后开启。

# chkconfig puppet on  

你的Puppet客户端节点必须知道Puppet主服务器位于何处。为此,最佳办法就是使用DNS服务器,你可以在该服务器上配置Puppet域名。要是你没有一台正常运行的DNS服务器,可以使用/etc/hosts文件,为此只要添加下面这一行:

1.2.3.4 server.your.domain  


2.3.4.5 client-node.your.domain 

1.2.3.4对应于Puppet主服务器的IP地址,“server.your.domain”是主服务器的域名(默认值通常是服务器的主机名称),“client-node.your.domain”则是客户端节点。应该在所有相关的服务器(Puppet主服务器和客户端服务器)上都要相应配置该主机文件。

完成这些设置后,我们就要向Puppet客户端表明谁是主服务器。默认情况下,Puppet寻找一台名为“puppet”的服务器,但该设置通常不适合你的网络配置,因此我们将它换成Puppet主服务器的完全符合标准的域名(FQDN)。打开文件/etc/sysconfig/puppet,把“PUPPET_SERVER”值换成/etc/hosts中指定的Puppet主服务器域名:

PUPPET_SERVER=server.your.domain 

主服务器名称也必须在/etc/puppet/puppet.conf的“[agent]”部分中加以定义:

serverserver=server.your.domain 

现在,你可以启动Puppet客户端了:

# service puppet start  

我们需要使用下面这个命令,迫使客户端联系上Puppet主服务器:

# puppet agent --test  

你应该会看到类似下列输出内容的结果。别慌张,这很正常,因为该服务器仍没有在Puppet主服务器上得到验证。

Exiting; no certificate found and waitforcert is disabled 

回到你的puppet主服务器,核实证书验证请求:

# puppet cert list  

你应该会看到一份列表,列出了从puppet主服务器请求证书签名的所有服务器。找到客户 服务器的主机名称,使用下面这个命令来签名(client-node是客户端节点的域名):

# puppet cert sign client-node  

至此,你已有了一台正常工作的Puppet客户端和服务器。祝贺你!不过,眼下Puppet主服务器无法指令客户端进行什么操作。所以,不妨创建某个基本的清单文件,并设置客户端节点来安装基本的实用工具。

连接回到Puppet服务器,确保目录/etc/puppet/manifests已存在。

# mkdir -p /etc/puppet/manifests  

现在,创建具有下列内容的清单文件/etc/puppet/manifests/site.pp

 node 'client-node' {  


 


   include custom_utils  


 }  


 class custom_utils {  


 


    package { ["nmap","telnet","vim-enhanced","traceroute"]:   



           ensure => latest,  




           allow_virtual => false,  



    }   


}  

然后重启puppetmaster服务。

# service puppetmaster restart  

客户端配置的默认刷新间隔时间是30分钟;如果你想手动强行让变更生效,就要在客户端节点上执行下面这个命令:

# puppet agent -t  

如果你想更改默认的客户端刷新间隔时间,将下面这一行:

runinterval = <yourtime> 

添加到客户端节点上的/etc/puppet/puppet.conf的“[agent]”部分。该设置是个时间间隔,单位可能是秒钟(3030s)、分钟(30m)、小时(6h)、天(2d)或年(5y)。注意:运行间隔为0意味着“连续运行”,而不是“从不运行”。

技巧和方法

1. 调试

有时候可能出现这种情况:你要提交错误的配置,不得不调试Puppet在哪里出现了故障。为此,你总是可以从检查/var/log/puppet/中的日志,或者手动运行代理软件、查看输出结果开始入手:

# puppet agent -t  

默认情况下,“-t”激活详细模式,所以它让你可以查看Puppet的输出结果。该命令还有几个参数,可以帮助更细致一点地识别问题。第一个实用的选项是:

# puppet agent -t --debug  

debug表明Puppet在运行期间经历的所有步骤。它在调试非常复杂的规则的过程中大有用处。可能很有用的另一个参数是:

# puppet agent -t --noop  

该选项将puppet设置在所谓的空运行(dry-run)模式,并不执行任何变更。Puppet只是在屏幕上输出所要呈现的内容,并不将任何内容写入到磁盘上。

2. 模块

一段时间后,你会发现处于这种情形:你想要有更复杂的清单文件。但在你坐下来开始编写清单文件之前,应该花点时间,浏览https://forge.puppetlabs.comForge是个庞大的软件库,里面含有诸多Puppet社区模块;你很有可能在这里找到问题的解决方法。要是没找到,就编写自己的模块,然后提交,那样别人就能得益于Puppet模块文化。

现在,假设你已经找到了可以解决你问题的一个模块。那么,如何把它安装到系统上?安装其实相当容易,因为Puppet已经含有直接下载模块的接口。只要键入下面这个命令:

# puppet module install <module_name> --version 0.0.0  

<module_name>是你所选择模块的名称,version是可选的(要是没有指定,那么下载最新版本。)如果你不记得想要安装的那个模块的名称,可以试着使用module search(模块搜索)来找到它:

# puppet module search <search_string>  

因而,你会获得一份列表,列出了含有搜索字符串的所有模块。

# puppet module search apache 

Notice: Searching https://forgeapi.puppetlabs.com ...  


 


NAME         DESCRIPTION          AUTHOR          KEYWORDS                                          


 


example42-apache    Puppet module for apache      @example42        example42, apache                                 


 


puppetlabs-apache    Puppet module for Apache      @puppetlabs        apache web httpd centos rhel ssl wsgi proxy       


 


theforeman-apache   Apache HTTP server configuration @theforeman       foreman apache httpd DEPRECATED             

如果你想看看已经安装了哪些模块,只要键入下面这个命令:

# puppet module list 

结束语

至此,你应该有了一个完全实用的Puppet主服务器,可以为一个或多个客户端服务器提供基本的配置。现在可以随意为你的配置添加更多的设置,让它适应你的基础设施。用不着为捣鼓Puppet而担心,你会发现它确实大有帮助。

相关推荐