在本文中,我们将从Puppet Labs了解如何在CentOS 7上安装和配置开源Puppet代理/主机。Puppet是一种配置管理工具,可以帮助系统管理员自动化服务器基础结构的配置,设置和管理。Puppet代理称为节点,我们将使用Puppet Server软件包而不是乘客或任何其他环境。
我们需要root或超级用户访问要在其中安装Puppet主服务器的服务器。
我们需要在p服务器上配置的正确DNS,以便客户端客户端可以与您的基础结构进行通信。防火墙端口在8140从服务器到客户端以及从客户端到服务器打开,以将指令发送到节点/客户端。
我们需要安装CentOS 7 x64位以与Puppet Master一起使用,并且主机名应为Puppet,并且硬件要求取决于我们要管理的代理或节点的数量,通常我们需要2个核心CPU和至少1GB的RAM,以及使用服务器的DNS记录设置主机文件
192.168.1.87 puppet.demo.com puppet
当我们将证书颁发机构用于代理节点时,Puppet主服务器必须保持准确的时间,以避免在颁发代理证书时可能出现的问题(如果存在一些时间差异,证书可能会过期),为避免这些问题,我们将安装NTP(网络时间协议) )。
下面是命令–
# yum install ntp -y
我们需要更新配置文件中的池区域,以便它将更新池中的正确时间。
# vi /etc/ntp.conf server 0.us.pool.ntp.org server 1.us.pool.ntp.org server 2.us.pool.ntp.org server 3.us.pool.ntp.org
运行以下命令以更新Puppet Master上的时间
# ntpdate pool.ntp.org
重新启动NTP服务并启用该服务以在启动时启动
# systemctl restart ntpd # systemctl enable ntpd
现在环境已经准备就绪,我们将安装puppet主服务器,然后从官方存储库安装Puppet服务器,以启用运行以下命令所需的存储库。
# rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
更新存储库后,使用此命令安装Puppet服务器
# yum install puppetserver
启动Puppet服务器,并使用以下命令\使服务器在引导时启动。
# systmectl start puppetserver # systemctl enable puppetserver
我们还需要在所有Puppet服务器上安装ager软件进行管理。我们需要在所有节点或客户端计算机上安装此代理,以便它们可用于puppet服务器。
使用以下命令启用官方的Puppet Labs官方存储库
# rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
使用以下命令安装puppet-agent软件包
# yum -y install puppet-agent
现在,我们需要启动通过以下命令安装的Puppet代理:
# /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
首次运行Puppet代理时,它将生成SSL证书,并将签名请求发送到Puppet Master。
现在我们将学习Puppet Master的基本任务
'factor'收集有关连接的节点的信息,例如操作系统名称,客户端的主机名,SSH密钥,IP地址等),我们还可以添加不属于默认事实的自定义事实
要列出自动收集的事实,请运行以下命令。
# /opt/puppetlabs/bin/factor
Puppet使用一种特定的语言来告诉系统配置,该配置以扩展名.pp表示为默认配置文件。列表位于以下位置-/etc/puppetlabs/code/environments/production/manifests/site.pp
它们使用默认在30分钟内定期执行的Puppet代理执行,当它检查将自身发送到主目录的事实发送到主目录,并且与该代理相关的所需状态由主列表确定时。
我们还可以手动启动对特定代理的检查,然后运行以下命令以手动执行。
# /opt/puppetlabs/bin/puppet agent –test
# vi /etc/puppetlabs/code/environments/production/manifests/site.pp file {'/tmp/example-ip': # resource type file and filename ensure => present, # make sure it exists mode => '0644', # file permissions content => "192.168.1.100: ${ipaddress_eth0}.\n", # note the ipaddress_eth0 fact }
这将显示/ tmp文件夹中的IP地址,列表将确保所有节点在/ tmp文件夹中都有example-ip文件。
我们还可以为列表中的特定节点定义资源,这可以使用列表中的节点来完成。
# vi /etc/puppetlabs/code/environments/production/manifests/site.pp node 'node1', 'node2' { # applies to node1 and node2 nodes file {'/tmp/dns': # resource type file and filename ensure => present, # make sure it exists mode => '0644', content => "Only DNS servers get this file.\n", } } node default {} # applies to nodes that aren't explicitly defined
上面的示例将确保node1和node2的文件位于/ tmp / dns。
模块对于将分组任务一起运行很有用。Puppet社区中有许多可用模块,或者我们可以编写自己的模块。
如果需要安装puppetlabs-apache模块。
# /opt/puppetlabs/bin/puppet module install puppetlabs-apache
现在编辑site.pp并添加以下内容以在node2上安装apache
node 'host2' { class { 'apache': } # use apache module apache::vhost { 'demo.com': # define vhost resource port => '80', docroot => '/var/www/html' } }
这将安装apache软件包并配置一个名为demo.com的虚拟主机以侦听端口80,文档根目录为/ var / www / html
注意:在运行此示例之前,请注意,如果节点中存在任何现有配置,它将删除所有现有的Apache配置。
在配置和设置之后,我们用一些列表介绍了基本的Master / agent安装,我们可以管理客户端的模块是使用Puppet的基础结构,因为Puppet具有更多功能,我们将在后续文章中介绍它们。