如何在 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 还有许多其他功能,我们将在以后的文章中介绍它们。

更新时间: 2019年10月18日

244 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始
广告