如何在 CentOS 7 上以独立模式安装 Puppet

介绍

本教程的目标是尽快在CentOS 7上独立运行 Puppet。

如果你想了解一些关于娃娃的信息,以及它如何对你有用,请继续阅读. 如果你已经确信,并且想开始安装娃娃,请跳到下面的部分(https://andsky.com/tech/tutorials/how-to-install-puppet-in-standalone-mode-on-centos-7#conventions-used-in-this-tutorial)。

为什么要用娃娃?

什么是娃娃?

Puppet 是一个开源配置管理软件工具,允许组织从单个中央服务器控制数万个节点的精确配置 Puppet 是成熟和受欢迎的,并被世界各地的大型组织使用。

Puppet 作为大众云配置工具具有如此强大的形象,以至于您可能会惊讶地知道 Puppet 也可以在独立模式中运行,以便手动配置单个节点。

如果您已经手动配置了DigitalOcean Droplets(即通过SSHing进入云服务器并在Linux命令壳中输入一系列命令),那么Puppet可以帮助您将该配置过程的所有知识嵌入到单个Puppet配置文件(或目录树)中,可以调用来从头开始重建节点,或者如果节点被破坏,重新配置节点。

Puppet 不仅仅是一个荣耀的安装脚本管理器。当 Puppet 运行时,它会检查节点的配置,识别节点的配置和 Puppet 配置文件中指定的配置之间的任何差异,然后进行必要的更改,以使节点进入指定的状态。

为什么要使用配置管理工具?

我们可以识别软件安装的三级复杂性:手动、脚本和基于配置的管理。

  • 在手动安装中,您将 SSH 放入节点并发出一系列命令

到命令壳来安装软件。

  • 在 _scripted 安装中,您创建一个脚本(例如 Ruby 脚本或 BASH 脚本)

安装软件并执行它。

  • 在基于 _configuration management 的安装中,您创建了 配置。

管理工具指定节点的所需状态,配置工具将节点的状态与所需状态进行比较,并将节点驱动到所需状态。

应该避免手动安装,因为它是一种预自动化解决方案,将所有安装知识嵌入到一个或多个工程师的头脑中,而不是文件中(除非工程师已经写下安装程序)。

脚本安装比手动安装要好得多,但它患有这样一个问题:如果您执行一个安装,然后损坏一些小部分,您无法使用脚本来修复损坏;您必须从头开始并重新安装一切。

基于配置管理的安装是最好的解决方案. 配置管理工具将自动安装(就像安装脚本一样),但它也可以用来修复软件如果它受损。

为什么要特别使用娃娃?

截至2014年8月,市场上似乎有两个主要的配置工具:Puppet 和 Chef. 一次快速搜索显示,这两个似乎都是成熟的工具,具有忠实的追踪。 一个关键的区别是Puppet 更具声明性,而 Chef 更具程序性,这使得Puppet 更有吸引力地进行损坏修理。

本教程不寻求做一个全面的比较。

雪花,宠物和牲畜

在软件配置世界中出现了一个比喻来描述服务器配置管理的三级 复杂性. 你可以处于雪花 级别、宠物级别或牲畜级别。

你的节点是雪花,如果你不知道它是如何进入状态的 它是在,或者你过于紧张地做出任何改变,甚至触摸它如果它破裂,如果它破裂,你真的有麻烦。你的节点是 像一个微妙的雪花,你把它带到兽医治愈它。 你的节点是 pet 如果你相信你可以修复它如果它破裂, 但从头开始配置的想法使你感到恐惧。

这个比喻的目的是传达节点管理的牲畜观点,大多数系统管理员都习惯于将节点当作雪花或宠物来处理,以至于当节点受损时仅仅杀死节点的想法似乎很陌生。

  • 文件系统已经损坏了吗?没有问题,只需杀死节点并使用Puppet从零重建它。
  • 一个模糊的软件突然停止工作? 没有问题,只需杀死节点并使用Puppet从零重建它。
  • 黑客已经渗透到您的系统并安装了 root kit? 没有问题,只需杀死节点并使用Puppet从零重建它。

最终,最好找到损坏节点的来源,并修复真正的问题,但与此同时,仅仅是自动重建是非常有效的。

在三个安装级别中,脚本和配置管理安装都支持牛型号,但是,配置管理模型也支持宠物型号。在脚本模型下,如果你想安装额外的软件,你必须从零开始。

Puppet 允许您从雪花模型移动到牲畜模型,在方便时可以将牲畜当作宠物对待。

(注:作者不喜欢像牛一样对待任何动物,但牛的比喻确实像一个配置比喻一样有效。

娃娃之路

Puppet 如何配置节点是从 Puppet 内部配置一切,这有时可能有点困难,但几乎总是可以从 Puppet 中配置您想要的任何东西。

如果你承诺从Puppet内部配置一切,那么你可以用一个Puppet命令配置云中的任何节点,如果你可以这样做,你可以开始像牛一样对待云中的节点。

一旦你将所有的配置信息体现在Puppet中,唯一阻止你像牛头一样对待节点的事情是,如果它包含数据库,你必须在拆除节点之前保存数据库,并在重建节点后恢复它,但这是唯一的原因。

Puppet 不仅仅是一个配置工具,它是一种 devops 纪律,可简化节点安装、管理和维修,并消除管理节点云的压力。

在本教程中使用的规则

对于本教程的目的,一个名为Droplet:

1mynode.example.com

每当你看到这个教程中的mynode例子一词时,你可以确定它们不是命令关键字,你必须取代自己的名字。

除非另有说明,如果本教程说要发出命令,则意味着在您的 Droplet 命令壳(例如 bash)内发出命令。

本教程假定您已登录为 root,因此您不必以sudo为前缀每个命令. 如果您未登录为 root,您可以尝试以sudo为前缀下列所有命令(但这尚未被测试)。

在本教程中,我们使用cat命令来创建和修改文件. 您可以使用nano或其他文本编辑器。

创建一个滴滴

如果您尚未创建您想要应用 Puppet 的 Droplet,请立即创建任何类型的 Droplet,只要它是 CentOS 7 Droplet。

当您在 DigitalOcean Droplet 创建表单中指定新 Droplet 的主机名称时,请确保在 Hostname 表单字段中指定完全合格的域名(FQDN)。

1Hostname = mynode.example.com

不要只指定mynode

(您不需要为新的节点mynode配置example.com的DNS才能运行Puppet,但如果您打算保留Dropplet,那么这是一个好主意!)

SSH Into Your Droplet 作为根

SSH 进入新的 Droplet 作为您使用以下命令工作的计算机的命令行的根。

如果您尚未配置 DNS 以将域名指向节点,则需要使用节点的 IP 地址。

安裝娃娃

下一步是安装Puppet。Puppet Labs在免费的开源版本和单独的企业版本中安装Puppet。在本教程中,我们将安装开源版本,这对于任何数量的节点都是完全免费的。

唯一的困难是,Puppet 默认情况下不在 CentOS yum 存储库列表中,所以我们必须先安装它,才能调用yum(如果您有 CentOS 5 或 CentOS 6,则更改 7 到 5 或 6)。

1rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm

您可以通过以下命令确认 Puppet 存储器已安装:

1yum repolist | grep puppet

应该产生输出看起来像这样的东西:

1puppetlabs-deps/x86_64 Puppet Labs Dependencies El 7 - x86_64 10
2puppetlabs-products/x86_64 Puppet Labs Products El 7 - x86_64 70

现在使用 yum 安装 Puppet. 命令 (通过 gc 导入命令yum)消除了您需要回答 yum 的一系列问题,该命令引起了大量的活动,应该产生 180 多行控制台输出。

1yes | yum -y install puppet

测试 Puppet 是否已安装并使用以下命令工作. 输出应该只是一个简单的版本号,例如 3.6.2

1puppet --version

设置 Hostname 和 FQDN

如果节点的主机名和完全合格域名(FQDN)设置不正确配置,Puppet 将无法正常运行,这是因为 Puppet 通常配置一个配置文件,指定了几个不同的节点的配置。

若要查看您的节点是否为 Puppet 正确配置,请执行以下两个命令:

1facter | grep hostname
2facter | grep fqdn

单独的facter命令将显示密钥 / 值对列表,其中包含有关您的Droplet的数据。只有两个密钥 / 值对在这里很重要,所以我们正在使用grep来搜索相关的输出,这应该是这样的:

1hostname=mynode
2fqdn=mynode.example.com

如果值中的 mynode 部分不正确,则可以通过使用 命令来修复此问题,这将改变两对中的 值中的 mynode 部分:

1hostname mynode

如果 fqdn 中的域值不正确,您可以通过将单个 行附加到系统配置文件 /etc/resolv.conf 来修复它。

1cat /etc/resolv.conf

现在附上它:

1cat >>/etc/resolv.conf
2domain example.com
3^D

(其中 ^D 意味着键入 Control-D 以终止cat命令的输入。

确认您的更改与:

1facter | grep hostname
2facter | grep fqdn

以下是提醒输出应该包含什么:

1hostname=mynode
2fqdn=mynode.example.com

创建一个娃娃配置文件

现在 Puppet 已安装并准备运行,是时候创建一个 Puppet 配置了。 CentOS/Puppet 安装过程应该已经创建了一个名为 /etc/puppet’ 的目录(如果没有,用 mkdir /etc/puppet` 创建它)。

1ls -la /etc/puppet

应该有几个.conf 文件和一个模块子目录。

娃娃配置目录树命名公约指导我们创建一个表现子目录,以保留我们即将创建的实际配置文件:

1mkdir /etc/puppet/manifests

现在创建配置文件. 你需要替换自己的域名为 mynode.example.com. 使用了 cat 命令,但你可以使用 nano 编辑器(或任何其他编辑器)如果你愿意。

 1cat >/etc/puppet/manifests/projectname.pp
 2
 3node "mynode.example.com" {
 4
 5file { '/root/example_file.txt':
 6    ensure => "file",
 7    owner  => "root",
 8    group  => "root",
 9    mode   => "700",
10    content => "Congratulations!
11Puppet has created this file.
12",}
13
14} # End node mynode.example.com
15^D

(^D 意味着键入Control-D以终止输入到cat命令。

配置文件指定了节点的配置 mynode.example.com(你可以添加更多的构建块,如 node "nodename" {...}' 到这个文件,它仍然会在节点 mynode.example.com`上运行)。

节点构造中,有一个命令来配置一个名为/root/example_file.txt的特定文件,该文件构造命令Puppet 确保有该名称的文件,该文件是一个文件,而不是一个目录,它有指定的所有权,它有指定的保护模式,并且它有指定的内容。

文件指令不仅仅是创建文件的命令,如果它不存在,而是它是如何配置文件的规格。Puppet检查文件并驱动它到指定状态,无论它在何种状态。如果文件不存在,Puppet创建它。如果它存在,但其任何指定的方面不正确(包括文件内容),Puppet会纠正偏差并将文件驱动到指定的状态。因此,虽然Puppet可能似乎在第一次运行时扮演安装脚本的角色,在第一次和随后的运行中,它实际上正在将现有状态与所需状态进行比较,并进行更改以驱动文件系统到所需状态。

打电话给娃娃

现在你已经安装了 Puppet 并创建了一个配置文件,你可以召唤 Puppet. (忽略任何 ipaddress 错误)。

1puppet apply /etc/puppet/manifests/projectname.pp

Puppet 应该创建 /root/example_file.txt' 文件,由 root' 拥有,位于 root' 组中,并具有 -rwx------' 权限。

1ls -la /root

检查文件的内容与:

1cat /root/example_file.txt

您应该看到我们在配置文件中指定的文本。

再次呼唤娃娃

请记住,Puppet 不会作为脚本执行您的配置文件。 相反,它将您的系统驱动到配置文件 中指定的状态。

1puppet apply /etc/puppet/manifests/projectname.pp

破坏文件并再次召唤娃娃

现在让我们通过使用chmod命令更改其保护 来对配置文件造成一些损害。

1chmod o+r /root/example_file.txt

您应该看到 -rwx---r-- 保护为 example_file.txt 而不是 -rwx------ 保护:

1ls -la /root

现在,再一次呼唤娃娃:

1puppet apply /etc/puppet/manifests/projectname.pp

Puppet 应该修复文件的保护。

1ls -la /root

更多损坏和修复

现在让我们通过更改其内容来再次损坏文件:

1cat >/root/example_file.txt
2This is a damaged file!
3^D

确认损坏使用:

1cat /root/example_file.txt

再次召喚 Puppet. 它應該修復檔案:

1puppet apply /etc/puppet/manifests/projectname.pp

确认该文件已被修复:

1cat /root/example_file.txt

接下来呢?

这只是一个Hello World的例子,让你开始。上面的配置文件只是Puppet能做些什么的小例子。 想要了解前面的事情,请快速查看此页面:

您可以指定个别文件的配置、整个目录树、包、服务、 cron、用户、组等。

结论

本教程向您展示了如何在独立模式下安装Puppet,以及如何创建Puppet配置文件以在单个节点中配置单个文件。这个配置文件可以作为一个平台,您可以建立更复杂的配置。如果您坚持使用Puppet完成所有配置的纪律,您将能够将您的Dropplets从雪花(或宠物)转换为牲畜,从而使您的云管理任务快速和可重复。

参考

Puppet背后的公司叫 Puppet Labs, Inc. 可以在这里找到:

人偶安装说明书可在:

您可以通过浏览此页面来品尝Puppet能够配置的内容:

Puppet 用户社区已经创建了成千上万的 Puppet 模块,这些模块可用于配置各种软件:

Published At
Categories with 技术
comments powered by Disqus