介绍
本教程的目标是尽快在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 更有吸引力地进行损坏修理。
- http://www.scriptrock.com/blog/puppet-vs-chef-battle-wages
- http://www.infoworld.com/d/data-center/puppet-or-chef-the-configuration-management-dilemma-215279
本教程不寻求做一个全面的比较。
雪花,宠物和牲畜
在软件配置世界中出现了一个比喻来描述服务器配置管理的三级 复杂性. 你可以处于雪花 级别、宠物级别或牲畜级别。
你的节点是雪花,如果你不知道它是如何进入状态的 它是在,或者你过于紧张地做出任何改变,甚至触摸它如果它破裂,如果它破裂,你真的有麻烦。你的节点是 像一个微妙的雪花,你把它带到兽医治愈它。 你的节点是 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 作为您使用以下命令工作的计算机的命令行的根。
1ssh [email protected]
如果您尚未配置 DNS 以将域名指向节点,则需要使用节点的 IP 地址。
1ssh [email protected]
安裝娃娃
下一步是安装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 模块,这些模块可用于配置各种软件: