如何在 CentOS 7 上安装和配置 Puppet 主从架构
本文将学习如何在 CentOS 7 上安装和配置开源 Puppet 代理/主服务器,该软件来自 Puppet Labs。Puppet 是一种配置管理工具,可帮助系统管理员自动化服务器基础设施的配置、供应和管理。Puppet 代理称为节点,我们将使用 Puppet Server 软件包而不是 Passenger 或任何其他环境。
我们需要对要安装 Puppet 主服务器的服务器具有 root 或超级用户访问权限。
先决条件
我们需要在 Puppet 服务器上配置正确的 DNS,以便客户端能够与您的基础设施通信。防火墙端口 8140 从服务器到客户端以及客户端到服务器之间开放,以向节点/客户端发送指令。
准备 Puppet 主服务器
我们需要安装 CentOS 7 x64 位版本以用于 Puppet 主服务器,主机名应为 Puppet,硬件需求取决于我们要管理多少个代理或节点,通常我们需要 2 核 CPU 和至少 1GB 的 RAM,并使用服务器的 DNS 记录设置主机文件。
192.168.1.87 puppet.demo.com puppet
安装 NTP
由于我们使用证书颁发机构来管理代理节点,因此 Puppet 主服务器必须保持准确的时间,以避免在它颁发代理证书时出现潜在问题,如果存在一些时间差异,证书可能会过期,为了避免这些问题,我们将安装 NTP(网络时间协议)。
使用 YUM 安装 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 主服务器上的时间。
# ntpdate pool.ntp.org
重启 NTP 服务并在启动时启用该服务。
# systemctl restart ntpd # systemctl enable ntpd
安装 Puppet Server
现在环境已准备就绪,我们将安装 Puppet 主服务器,我们将从官方存储库安装 Puppet Server,要启用存储库,我们需要运行以下命令。
# rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
更新存储库后,我们使用此命令安装 Puppet Server。
# yum install puppetserver
使用以下命令启动 Puppet Server 并启用服务器在启动时启动。
# systmectl start puppetserver # systemctl enable puppetserver
安装 Puppet Agent
我们还需要在所有要管理的 Puppet 服务器上安装代理软件。我们需要在所有节点或客户端机器上安装此代理,以便它们可用于 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 主服务器发送签名请求。
Puppet 入门
现在我们将学习 Puppet 主服务器的基本任务。
收集节点的事实
“factor”收集有关连接的节点的信息,例如客户端的操作系统名称、主机名、SSH 密钥、IP 地址等。我们还可以添加不属于默认事实的自定义事实。
要列出正在自动收集的事实,请运行以下命令。
# /opt/puppetlabs/bin/factor
主清单文件
Puppet 使用特定的语言来告诉系统配置,这些配置使用扩展名为 .pp 的清单作为默认配置文件。清单位于以下位置:/etc/puppetlabs/code/environments/production/manifests/site.pp
它们使用 Puppet 代理定期执行,默认情况下每 30 分钟执行一次,当它检查发送到主服务器的事实时,这些事实会被拉取到当前目录中,并且主清单决定与代理相关的所需状态。
在特定代理节点上执行
我们还可以手动启动特定代理的检查并运行以下命令以手动执行。
# /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}.
", # 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.
", } } node default {} # applies to nodes that aren't explicitly defined
以上示例将确保节点 1 和节点 2 在 /tmp/dns 中具有文件。
从 Puppet 主服务器执行模块
模块对于将要一起运行的任务进行分组非常有用。Puppet 社区中提供了许多模块,或者我们可以编写自己的模块。
如果我们需要安装 puppetlabs-apache 模块。
# /opt/puppetlabs/bin/puppet module install puppetlabs-apache
现在编辑 site.pp 并添加以下内容以在节点 2 上安装 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 配置。
在完成配置和设置后,我们已经介绍了基本的主/代理安装以及一些清单和模块,我们可以使用 Puppet 管理客户端和基础设施,因为 Puppet 还有许多其他功能,我们将在以后的文章中介绍它们。