在 Ubuntu 18.04 上安装 Puppet

什么是木偶?

在本教程中,我们将在 Ubuntu 18.04 服务器上安装 Puppet。 Puppet 是一种开放核心、基于服务器的任务管理类型的自动化软件,主要用于限制您与过去需要个人干预的许多日常服务器任务的交互。

该软件允许您作为服务器所有者将特定功能委派给该软件,从而让您腾出时间进行更关键的业务工作。 Puppet 是一个基于主/客户端的系统,可以与 Windows 和 Linux 服务器交互。 Puppet 主服务器从 Linux 服务器运行(考虑到从长远来看将节省时间和精力,这是一个小缺点),但也可以控制其他服务器类型的工作。

需要在远程服务器上完成的工作由称为清单文件的配置文件定义。 此文件包含受控服务器组或类型的说明。 可以实现的一些任务类型是:

  • 快速修改动作或进程到单个服务器或一组服务器
  • 在多个服务器之间分散或共享脚本,然后运行该脚本
  • 在特定事件发生之前或之后停止/重新启动服务器服务
  • 以特定顺序将更改实施到唯一流程
  • 在您选择的时间对多组服务器执行特定时间的操作

此外,您可以控制哪些用户可以访问和执行一组任务,并将更改记录在审计跟踪日志中以供以后查看和评估。 如果您在选择需要执行的工作时遇到困难,您可以搜索 PuppetForge 站点以查看清单文件是否已经存在,这样您就不会浪费时间重新发明轮子了!

系统先决条件和要求

Puppet 的主服务器需要更多的资源来满足来自客户端的许多远程请求,因此如果许多客户端请求更新,则需要具有更多 RAM 的更大服务器。 主服务器上所需的资源数量取决于以下信息:

  • 主服务器控制的远程客户端数量
  • 远程客户端请求更新的频率
  • 每个远程客户端上管理的资源数量
  • 主服务器使用的清单文件和模块的复杂性

笔记 傀儡主服务器 将不会 在 Windows 上运行。 它 必须 在 Linux 服务器上运行。

硬件要求

客户端服务器:

运行 puppet 客户端软件不需要特定的最低资源。

主服务器:

puppet master 服务器的资源将基于客户端服务器的数量、正在执行的任务、每个请求的时间范围以及客户端服务器上托管资源的数量。 根据 puppet labs 的说法,下图可用于估算主服务器上的必要资源。

节点体积核心ReservedCodeCache
许多21 GB不适用
1,0002-44GB512M

命名解析和计时

命名解析

在设置客户端进行安装时,需要首先解决一些注意事项。 最初的担忧是在主服务器和客户端之间使用一致的命名方案。 这将允许一种简单的方法来允许在路上添加更多的客户。 使用服务器名称,例如 puppetclient01.domain.com 或者 pc01.domain.com 在客户端上表示这将是 第一的 傀儡客户端服务器。 使用 PM01.domain.com 因为 puppet master 服务器将允许客户端轻松定位并与 master 连接。 可以在 puppet 配置文件中进行此更改。

计时

为了让主服务器和客户端在任务运行期间正确同步,我们需要确保网络时间协议 (NTP) 服务已安装并在正在使用的服务器上运行。 这允许主服务器充当链接到它的客户端的证书颁发机构。 如果此服务关闭,这将减少可能遇到的证书错误的数量。 要验证 NTP 设置是否正确,请使用 时间日期ctl 命令:

root@host [~] timedatectl
Local time: Wed 2019-05-29 17:18:51 EDT
Universal time: Wed 2019-05-29 21:18:51 UTC
RTC time: Wed 2019-05-29 21:18:52
Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no

配置防火墙

使用主/客户端类型的环境时,主服务器应始终打开特定端口以允许来自远程客户端的传入服务器连接。 您可以使用以下任一命令来确保端口已打开并正在侦听:

root@host [~] netstat -tulpn | grep LISTEN |grep 8140
root@host [~] lsof -i -P -n | grep LISTEN |grep 8140

如果没有返回答案 网络统计 或者 lsof 命令,然后您需要在两个防火墙中打开一个端口以使主/客户端能够有效通信(默认端口为 8140)。 要在 Ubuntu 的 UFW 防火墙中打开端口,请尝试以下命令:

root@host [~] ufw allow 8140/tcp
Rules updated
Rules updated (v6)
root@host [~]

安装

Puppet Master 服务器安装

有多个可用于 Ubuntu 的 puppet 版本,但在本文中,我们将使用 Ubuntu 18.04 (Bionic) 的版本。 在 Ubuntu 18.04 上,您需要启用 Universe 存储库,其中包含安装 Puppet “主”服务器所需的所有软件包。 要从命令行启用此 repo,只需运行:

root@host[~] add-apt-repository "deb https://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe" && apt-get update
root@host[~] add-apt-repository "deb https://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe"
Hit:1 https://us.archive.ubuntu.com/ubuntu bionic InRelease
Get:2 https://us.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]                               
Get:3 https://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]                                            
Get:4 https://us.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]                                              
Get:5 https://us.archive.ubuntu.com/ubuntu bionic-updates/main i386 Packages [517 kB]                                        
Get:6 https://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]                                                   
Get:7 https://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [618 kB]                     
Get:8 https://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [8570 kB]                                    
Get:9 https://archive.ubuntu.com/ubuntu bionic/universe i386 Packages [8531 kB]
Get:10 https://archive.ubuntu.com/ubuntu bionic/universe Translation-en [4941 kB]
Fetched 23.7 MB in 4s (5666 kB/s)                            
Reading package lists... Done
root@host[~] 

现在,让我们运行一个快速更新以确保我们可以访问该 repo 中的所有软件:

root@host [~] apt-get update
Hit:1 https://us.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 https://us.archive.ubuntu.com/ubuntu bionic-updates InRelease                            
Get:3 https://us.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]                
Get:4 https://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]                               
Hit:5 https://archive.ubuntu.com/ubuntu bionic InRelease                                                              
Fetched 163 kB in 1s (315 kB/s)                                                                                      
Reading package lists... Done

启用并更新此存储库后,让我们运行安装命令:

root@host [~] apt install puppetmaster
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  augeas-lenses debconf-utils facter fonts-lato hiera javascript-common libaugeas0 libboost-filesystem1.65.1
  libboost-locale1.65.1 libboost-log1.65.1 libboost-program-options1.65.1 libboost-regex1.65.1 libboost-system1.65.1
  libboost-thread1.65.1 libcpp-hocon0.1.6 libfacter3.10.0 libjs-jquery libleatherman-data libleatherman1.4.0 libruby2.5
  libyaml-cpp0.5v5 puppet puppet-master rake ruby ruby-augeas ruby-deep-merge ruby-did-you-mean ruby-json ruby-minitest
  ruby-net-telnet ruby-power-assert ruby-selinux ruby-shadow ruby-test-unit ruby2.5 rubygems-integration unzip zip
Suggested packages:
  augeas-doc mcollective-common puppet-common apache2 | lighttpd | httpd augeas-tools ruby-rrd ruby-hocon ri ruby-dev
  bundler
The following NEW packages will be installed:
  augeas-lenses debconf-utils facter fonts-lato hiera javascript-common libaugeas0 libboost-filesystem1.65.1
  libboost-locale1.65.1 libboost-log1.65.1 libboost-program-options1.65.1 libboost-regex1.65.1 libboost-system1.65.1
  libboost-thread1.65.1 libcpp-hocon0.1.6 libfacter3.10.0 libjs-jquery libleatherman-data libleatherman1.4.0 libruby2.5
  libyaml-cpp0.5v5 puppet puppet-master puppetmaster rake ruby ruby-augeas ruby-deep-merge ruby-did-you-mean ruby-json
  ruby-minitest ruby-net-telnet ruby-power-assert ruby-selinux ruby-shadow ruby-test-unit ruby2.5 rubygems-integration
  unzip zip
0 upgraded, 40 newly installed, 0 to remove and 0 not upgraded.
Need to get 10.9 MB of archives.
After this operation, 50.0 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...
(lots of output)
...
Setting up puppet (5.4.0-2ubuntu3) ...
Setting up puppet-master (5.4.0-2ubuntu3) ...
Created symlink /etc/systemd/system/puppetmaster.service → /lib/systemd/system/puppet-master.service.
Created symlink /etc/systemd/system/multi-user.target.wants/puppet-master.service → /lib/systemd/system/puppet-master.service.
Setting up puppetmaster (5.4.0-2ubuntu3) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Processing triggers for ureadahead (0.100.0-21) ...
Processing triggers for systemd (237-3ubuntu10.21) ...
root@host [~] 

注意记住,主傀儡服务器 将要 需要充足的 RAM 才能顺利运行,因此在创建服务器时务必考虑到这一点。

木偶客户端安装

Puppet 客户端依赖项

如果您使用发行版存储库中的官方包之一安装 Puppet 客户端,则系统的包管理器应确保满足并安装了正确的依赖项。

在客户端服务器(或服务器)上,输入以下命令:

root@host [~] apt install puppet
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  augeas-lenses debconf-utils facter fonts-lato hiera javascript-common libaugeas0 libboost-filesystem1.65.1
  libboost-locale1.65.1 libboost-log1.65.1 libboost-program-options1.65.1 libboost-regex1.65.1 libboost-system1.65.1
  libboost-thread1.65.1 libcpp-hocon0.1.6 libfacter3.10.0 libjs-jquery libleatherman-data libleatherman1.4.0 libruby2.5
  libyaml-cpp0.5v5 rake ruby ruby-augeas ruby-deep-merge ruby-did-you-mean ruby-json ruby-minitest ruby-net-telnet
  ruby-power-assert ruby-selinux ruby-shadow ruby-test-unit ruby2.5 rubygems-integration unzip zip
Suggested packages:
  augeas-doc mcollective-common puppet-common apache2 | lighttpd | httpd augeas-tools ruby-rrd ruby-hocon ri ruby-dev bundler
The following NEW packages will be installed:
  augeas-lenses debconf-utils facter fonts-lato hiera javascript-common libaugeas0 libboost-filesystem1.65.1
  libboost-locale1.65.1 libboost-log1.65.1 libboost-program-options1.65.1 libboost-regex1.65.1 libboost-system1.65.1
  libboost-thread1.65.1 libcpp-hocon0.1.6 libfacter3.10.0 libjs-jquery libleatherman-data libleatherman1.4.0 libruby2.5
  libyaml-cpp0.5v5 puppet rake ruby ruby-augeas ruby-deep-merge ruby-did-you-mean ruby-json ruby-minitest ruby-net-telnet
  ruby-power-assert ruby-selinux ruby-shadow ruby-test-unit ruby2.5 rubygems-integration unzip zip
0 upgraded, 38 newly installed, 0 to remove and 13 not upgraded.
Need to get 10.9 MB of archives.
After this operation, 49.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] y

Type in "y" to continue

Get:1 https://us.archive.ubuntu.com/ubuntu bionic/main amd64 fonts-lato all 2.0-2 [2698 kB]
Get:2 https://us.archive.ubuntu.com/ubuntu bionic/main amd64 augeas-lenses all 1.10.1-2 [300 kB]
Get:3 https://us.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 debconf-utils all 1.5.66ubuntu1 [56.6 kB]
...
Lots of Scrolling 
checks and installs
...
Setting up ruby-selinux (2.7-2build2) ...
Setting up ruby-deep-merge (1.1.1-1) ...
Setting up hiera (3.2.0-2) ...
Setting up puppet (5.4.0-2ubuntu3) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Processing triggers for ureadahead (0.100.0-21) ...
Processing triggers for systemd (237-3ubuntu10.21) ...
root@host [~] 

人偶配置

由于 Puppet 包含 200 多个配置设置,您可能需要查看位于以下位置的特定配置参考 木偶网 以确保您使用的是服务器/客户端设置独有的设置。 这些设置提供了一系列更全面的可用选项来修改您的服务器以满足您的特定需求。 这些设置位于 puppet.conf 文件中。 对于大多数服务器,您只需要在文件中调整大约 20 项左右的设置,具体取决于您要如何配置服务器。

要在 puppet.conf 文件中设置所需的值,您可以使用以下 CLI 中的命令来修改这些设置:

root@host [~] puppet config set <SETTING NAME> <VALUE> --section <CONFIG SECTION>

配置部分

“–section”首选项指定要更改 puppet.conf 的哪个部分。 这是可选的,默认为 主要的 部分。 官方部分是:

  • 主要的 (默认) — 由所有命令和/或服务使用
  • 掌握 — 由 Puppet Master 服务本身使用,并且 傀儡证书 命令
  • 代理人 — 被 Puppet 的代理服务使用
  • 用户 — 由 木偶“申请” 命令和大多数其他命令

此命令的工作示例如下所示:

root@host [~] puppet config set reports puppetdb --section master
root@host [~] puppet config set ordering manifest

以下是一些最常用的设置 puppet.conf 配置 文件:

  • dns_alt_names – 这是服务器可以用作 Puppet 主服务器的主机名列表。
  • 环境超时 – 此设置确定 puppet 主服务器应缓存从客户端环境中提取的信息的时间长度。 此处的默认设置通常为 0,除非有特定原因更改,否则不应修改。 如果识别出需要,则应将其设置为无限制。 如果启用此设置,它将覆盖 puppet.conf 中的 environment_timeout 设置
  • 环境路径 – 这是一个全局设置,用于定义 Puppet 定位特定目录的环境路径。
  • 基本模块路径 – basemodulepath 列出了包含默认可以访问的全局 Puppet 模块的目录。
  • 报告 – 报告设置定义将使用哪些处理程序报告:
    • HTTPS – 该处理器将通过 HTTP 或 HTTPS 将报告作为“POST”请求发送到 ‘报告网址’ 选项。
    • 日志 – 该处理器将向服务器本地默认日志目的地发送报告,该目的地通常是 /var/log/syslog.
    • 店铺 – 该处理器会将 YAML 文件的转储发送到本地目录(通常在 ‘报告目录’ 在 puppet.conf 中设置)

综上所述

总体而言,Puppet 是一款出色的配置工具,可用于以稳定、安全和可靠的方式自动维护基础架构。 这是一个经过验证的、可复制的系统,可确保您的服务器保持最新状态,同时使用更少的团队宝贵资源。

如果您已经安装了 Puppet 并想了解更多信息,以下链接将让您练习您的技能!

学习木偶
Puppet Learning VM 互动教程
学习 Puppet 的工具:命令行、Vim 和 Git

如果您对此工具以及 Puppet 如何在您当前的环境中发挥作用有进一步的想法或疑问,只需联系我们的一位解决方案专家或我们的一位支持技术人员并打开一个 聊天 与我们联系,请致电 800.580.4985 或通过 [email protected] 与我们联系,我们将尽力为您的所有想法和问题提供答案,以确保为您指明正确的方向!

感谢您在 Liquidweb 托管!