题 小家伙怎么能有效地学习和使用Puppet? [关闭]


六个月前,在我们的非盈利项目中,我们决定开始将我们的系统管理迁移到Puppet控制的环境,因为我们预计从现在到现在,我们的服务器数量将在现在和一年之间大幅增长。

自从做出决定以来,我们的IT人员已经变得有点过于烦恼了。他们最大的反对意见是:

  • “我们不是程序员,我们是系统管理员”;
  • 模块可在线获得,但许多模块彼此不同;轮子经常被重新发明,你如何决定哪一个符合要求?
  • 我们的回购中的代码不够透明,无法通过他们甚至可能在前一段时间写过的清单和模块来查找有效的东西。
  • 一个新的守护进程需要编写一个新模块,约定必须与其他模块类似,这是一个困难的过程;
  • “让我们运行它,看看它是如何工作的”
  • 社区模块中几乎没有人知道的“扩展”:'trocla','augeas','hiera'......我们的系统管理员如何跟踪?

我可以看到为什么一个大型组织会将他们的系统管理员派遣到Puppet课程成为Puppet大师。但是如果他们不上课并且基本上通过他们的浏览器和编辑器学习,那么小型玩家如何才能将Puppet学习到专业水平呢?


106
2018-06-06 08:38






答案:


我开始在部署新基础设施之前使用Puppet而只是买了一个(备受推崇)关于这个主题的书。我不认为大多数人实际上获得了专业的Puppet培训。我研究了一些例子,直到我能够将这个过程塑造成我的环境。这是2011年12月,所以在几周之内,我能够理解基础知识并获得生产框架。我不是配置管理的新手,有一个 Cfengine的 背景,但你的许多系统管理员的担忧引起了共鸣。我犯了错误,不得不多次重构,但我确实让事情变得令人满意。

关于你的观点的几点说明......

  • 传统的系统管理角色正在发生变化。适应或落后。我是一名成功的系统工程师,但我也必须重组(例如学习Python)。随着通过虚拟化和公共和私有云服务的硬件抽象获得牵引力,对个别服务器的关注减少。这意味着系统任务的自动化以及使用配置管理来夺取对大量服务器的控制。加 DevOps概念 混合,你会看到的 客户/最终用户的期望 并且要求正在发生变化

  • 在线提供的Puppet模块在风格和结构上有所不同,是的,我看到了很多重叠,冗余和重复的工作。我工作的一位开发人员说:“你可以在网上寻找有用的东西时开发自己的工具!”这让我停下来,因为我意识到Puppet似乎更多地吸引开发者类型,而不是管理员寻找一个 最佳实践 或者 正确的方法 做法。

  • 大量记录,以了解事物的连接方式。鉴于定义不稳定和缺乏 标准 服务方式,您的配置管理结构确实是您的环境所特有的。这种透明度必须在内部发展。

  • 我认为复制模块以容纳新守护程序或将服务添加到现有清单是相当容易的,具体取决于您组织服务器和角色的方式。

  • 在将更改推送到更大的服务器组之前,我花了很多时间在单个目标上进行测试。在代表性服务器上手动运行puppetd允许我调试更改并评估其影响。也许这有点保守,但这是必要的。

  • 我不确定我有多依赖社区模块。我必须这样做 开始使用Augeas进行一些工作并且感叹这是我在CFEngine中理所当然的功能。

总而言之,我觉得Puppet没有明确的标准。我无法弄清楚如何在我的Puppetmaster上组织目录结构,了解如何管理证书签名,获取 适当的反向DNS 在任何地方到位, 让Puppet适当扩展 了解环境并了解何时利用社区模块而不是构建自己的模块。这是一种思维转变,我看到这将导致系统管理员的恐慌。然而,这也是从头开始构建的解决方案,因此我有了评估工具的奢侈品。这种方式的决定是基于思想共享和Puppet背后的动力。学习新东西值得付出努力。

记得, 这个网站 也是一个很好的资源。


101
2018-06-06 09:02



我从没有Puppet经验到在两周内完成我的完整环境管理。我负责大约40个虚拟机,尽管都在运行Ubuntu。这简化了一些事情。我是专业的开发人员。 “适应或落后” - 我现在是devops + sysadmin +架构师。很好的答案! - François Beausoleil
我建议他们开始部署小型服务,首先是独立服务,然后开始修补更多服务器。我不需要使用Puppet,但我有一个小VPS,我最近制作了自己的Puppet模块。如果他们想在本世纪跟上其他系统管理员的步伐,他们最好是开放的。我这样做是因为我喜欢,我猜不是每个人都喜欢学习新东西,但有一件事是肯定的,现在系统管理员比以往任何时候都更接近开发人员。 - Sergio Galvan
我在一家小公司工作,我也跑 puppetd -t 在推送到所有服务器之前测试几个盒子。一对夫妇有一些独特的东西导致我的更新失败,这绝不会失败。如果您在开始时拥有受控且一致的环境,那么Puppet会更容易。 - jordanm
@ewwhite,我已经在他们的文档中学习了Puppet教程,但想知道你在学习时使用了哪本书?我有点觉得文档中提供的教程缺少一些东西,因为我在测试主机上使用Puppet来了解我正在做的事情,因此不能点击我。编辑:或您可以推荐的任何其他资源。谢谢。 - Mike Keller
@MikeKeller我喜欢它在我的帖子中...但它是 在这里。 - ewwhite


在以前的工作中,我被分配了执行Puppet的试验性任务。现在,我有编程背景,虽然不是Ruby,所以我没有其他人那么多的问题。

但是,有趣的是要注意到这一点 程序员 没有经验的非传统范式也有Puppet的问题,因为Puppet是 陈述,不是必要的。从这个意义上说,Puppet的工作方式与任何配置文件非常相似:你说的应该是怎样的,Puppet会处理其余的事情。

在飞行员之后,我有机会用Puppet培训了十几个其他管理员,并在两个活动中进行了演示。我从那次经历中得到的结论是,有些管理员接受了它,有些则没有。这些都是传统的管理员,没有编程技能,也有不同程度的专业知识。

我注意到的一件特别的事情是Puppet需要 不变 实践。那些经过培训,编写模块,然后花了一两个月做其他事情的人回到了Puppet并没有什么有用的技能。每周坚持做小事的人永远不会失去这种能力。

根据这两个观察结果,我建议您确保每个人每周都要添加一些Puppet类,定义或模块(最好至少两到三次)。那些仍然无法适应它的人可能真的缺乏这样做的技能。

再说一次,如果Puppet从更高的位置强加给他们,他们可能只是对他们认为是管理层干扰他们如何工作的反应 - 实际上这是真的。可能是让他们选择的情况 哪一个 配置管理系统使用会改善一些事情。以下是一些替代方案:

  • ANSIBLE:这是新的,但它基于shell命令和ssh,这可能会吸引传统的系统管理员。
  • 厨师:也许他们的问题是声明式的风格,在这种情况下,如果拥有Ruby经验,Chef会更好。
  • SaltStack:基于Python,开源
  • Cfengine的:古老,快速,传统 - 它可能会在这些方面赢得胜利。

29
2018-06-06 15:59



关于ANSIBLE的好处是,它可以跨越银河距离,绝对没有数据传输延迟! - Kalamane
感谢您提出的问题。直到现在我才意识到这一点。 - ewwhite
@ewwhite欢迎你。我,我自己,最近才发现它,但很多关于它引起了我的注意。如果我们已经没有Puppet这么多了,我肯定会尝试一下。 - Daniel C. Sobral


我一直在小商店使用Puppet两年,我是唯一的系统管理员。我遇到的最大障碍是学习如何正确开发软件。没有一个星期过去的地方,我没有搞砸我告诉开发商不要做十几次的事情。我检查了太多的代码,我没有分解签到,我没有标记,我没有分支,没有运行语法检查,没有使用标准,等等。如果你刚刚开始我会推荐一些以下内容。

  1. 意识到你正在开发你不知道该怎么做或做得不好的软件。这是预期的,因为它是新的。
  2. 作为代码的基础设施是现实,一旦你越过驼峰,它就非常强大。我邀请一些开发人员,向他们展示你当前的开发过程(或缺乏开发过程),当他们引起人们的注意时不要冒犯,并认真对待他们的建议。我建议使用开发人员使用的任何系统和流程,除非它完全不合适。
  3. Puppet第三方模块占90%的时间。我读过他们。我会偷他们的想法。没有重大编辑,我不会将它们拉进我的系统。但是我会在puppet stdlib中添加一些不错的功能。
  4. augeas和hiera。学习那两个。第一个允许对现有文件进行复杂编辑。第二个是外部数据存储。
  5. 将代码与数据分开。这是要学习的难点概念之一。将监控主机等硬编码值复制到模块代码中是不好的。将它们放在数据存储中(db,yaml(Hiera使用这是默认值),csv,等等)模块可以使用它是好的。一个例子是使用Mysql的webapp。这允许分别推送代码和数据的能力。这使您的开发过程更简单。
  6. 木偶解析器验证和 木偶皮棉 作为您的一部分,在代码签入过程之前或之后。一旦你达到速度,rspec测试也许是一个好主意。
  7. 编写样式指南/代码标准并使用它。 “安装Apache的代码在哪里”是一个常见问题。如果你的模块基本相同,那应该很容易。

总而言之,我已经解决了所有这些问题,因此我的大多数系统管理员朋友也是如此。使用配置管理系统需要一些时间。一旦你这样做,你会想知道没有一个人你是如何生活的。 “登录服务器并手动进行更改?Ick。”


11
2018-06-06 18:04



感谢您的建议,尤其是augeas和hiera是我们已经开始实施的两个组件,这让我们更加了解,甚至对Puppet的功能充满信心。那谢谢啦 :-) - drumfire


六个月前,在我们的非盈利项目中,我们决定开始   将我们的系统管理迁移到Puppet控制的环境中   因为我们期望我们的服务器数量大幅增长   从现在到现在一年之间。

听起来像是一个早期开始的好主意--Puppet不仅仅是配置管理,它是一种文档形式。

自从做出决定以来,我们的IT人员也变得有点过分了   有点恼火。

他们需要调整态度。

"We're not programmers, we're sysadmins";

再一次,态度。你可以为服务器创建一个conf文件吗? 根据您的需求和复杂性,您可以轻松进入模板/“程序员”的工作 演变

模块可在线获得,但许多模块彼此不同;车轮   正在经常重新发明,你如何决定哪一个适合   法案;

很难回答 - 我总是更喜欢puppetlabs模块 - 甚至在那个时候,我不会那么多。判决请求肯定。在我看来,有些模块“过于褶边”。

我们的回购中的代码不够透明,无法通过清单和模块来查找有效的东西   甚至已经写过一段时间了;

这听起来不像是傀儡问题,但更像组织或文档问题?

一个新的守护进程需要编写一个新的模块,惯例必须是   类似于其他模块,一个艰难的过程;

如果守护程序很简单,那么它就可以成为一个类。我不确定你的约定是什么意思,木偶对你很好地执行约定不是吗?或者我们是否在谈论代码格式?

"Let's just run it and see how it works"

如果你慢慢安全的话,这并不是一个坏主意。我仍然从一个VM开始,以了解事情的要点。

社区模块中几乎没有人知道的“扩展”:'trocla',   'augeas','hiera'......我们的系统管理员如何跟踪?

postfix,exim,sendmail,mysql,postgresql,iftop,iptraf,perl,perl模块.. 选择你想要的并使用它?我觉得这听起来更像是一种态度的东西......

我可以看到为什么一个大型组织会派遣他们的系统管理员   木偶课程成为木偶大师。但小球员会怎样呢?   如果他们不去,就把Puppet学习到专业水平   课程,基本上通过他们的浏览器和编辑器学习?

我没有参加任何课程 - 而我 上午 一个程序员不仅仅是一个系统管理员,我发现它并不需要太多的编程技巧来完成任何事情。

接下来的Puppet文档非常详尽。只需注意内置类型,花点时间看看其他模块是如何组合在一起的。我不会说它太简单了,但它也不是 - 硬。让您的基础设施为木偶做好准备需要花费一些时间,但投入的时间确保在您扩展时得到充分利用。


7
2018-06-06 14:04



仅供参考,这是因为 - 他们已经完成了基础设施的准备工作。所以我有一个新的经验,不能说是时间浪费了。 - thinice
作为我最近的首发,我完全在你的评论中认出自己。 - Martijn Heemels
就我而言,态度的改变确实是必要的。 Ops喜欢自动化并经常编写脚本,所以主要是使用不同的工具。看到你的Puppet清单从头开始配置整个机器或新服务是一种很酷的感觉。错误可能同时影响多台机器的事实需要习惯于更严格的测试,这可能很烦人,但显然是一件好事。尝试使用Vagrant,rspec-puppet,puppet-lint,Geppetto,Git分支和其他免费工具,您很快就会发现自己喜欢的工作流程。 - Martijn Heemels
使用Puppet也帮助我学习了Ruby,它取代了Bash作为我的默认系统工具语言。 - Martijn Heemels


KISS(保持简单愚蠢) - 不要因为他们在那里而使用新技术,而是因为你需要它们,使用你的部署所需的最低限度,根据需要更新不要试图跟上流血边缘。如果你从一个基本的设置开始,并在它的基础上更容易随身携带,他们不应该需要一个课程(这些甚至可用?)。

您可以看到的另一个区域是您的系统管理员。如果他们不能编程,那么它们是否足够先进以进行大型部署,大多数工作需要使用您使用的任何工具编写脚本?


5
2018-06-06 09:18



... 因为我们预计从现在到现在,我们的服务器数量将在现在和一年之间大幅增长。 需求? - Jeff Ferland
真正取决于期望的确定程度,以及在实际需要时,您所实施的内容是否仍然合适。 - JamesRyan
+1“使用你的部署所需的最低限度” - 很多木偶问题我试图让木偶控制系统上的所有内容。 - Sirex


我也为非营利组织工作,并负责最初将Linux盒子带入家中,不久之后Puppet负责管理它们。我们已经完成了一些特定的事情  帮助让事情滚滚而来。

首先,我试图远离第三方模块。内置工具可处理我们90%的管理。我使用的最大的第三方实用程序是防火墙模块。任何自定义事实等都是与整个团队共同开发的。我们开发了一个模板模块,并将文件管理,包,服务等全部标准化为此模板。

其次,在使用内置模块进行标准化之后,我们开始使用Git和Atlassian的Crucible - 免费获得非盈利 - 顺便说一下 - 对所有配置更改进行审核。这提供了所需的透明度。

第三,我自动设置了Puppet,以便可以使用一组默认选项自动添加新主机。有几种方法可以解决这个问题。由于我已经有一个完整的Kickstart环境,我选择在那里添加一个脚本。


5
2018-06-06 13:50





“我们不是程序员,我们是系统管理员”

我的时代变了,变得更糟:像我这样的灰熊 预期 成为比专业程序员更好的程序员,否则将无法通过 系统管理员

现在,我们有“系统管理员”,他们基本上是Windows桌面用户,他们在某些时候转换为Linux并且无法编程,并且没有发现任何错误。

房间里的大象是管理层容忍这种破坏性态度的原因。破坏谁或什么?对企业和基础设施。

回到Puppet [,CFEngine,Chef]主题:一旦设置了这样的解决方案,就会丢失一个。每个人都输了。为什么?因为提出这个想法的人无法以漂亮,干净,Kickstart [,JumpStart,Automated Installer,AutoYaST,Ignite-UX,NIM]操作系统软件包的形式设计封装配置管理。当你必须使用像Puppet(或Chef或CFEngine)这样的自动黑客工具时,这意味着你缺乏必要的资金来源 设计 并 实行 一个过程,通过相同的设计,可以完全实现原始和管理系统,完全自动化和完全非交互式。

另一个重点是,如果你必须有Puppet或一些这样的解决方案 正确 有人 黑客 手动的系统或应用程序配置,也可以追溯到没有设计过程的经验,并且在该过程中,配置被打包成离散组件的框架。实际上,无论谁实现Puppet等,都没有组件所有者,发布,配置管理,能力成熟度模型的概念。这正在迅速发展成为业界非常严重的问题。

使用Puppet也帮助我学习了Ruby,它已经取代了Bash作为我的默认系统工具语言。“

为什么需要Ruby,只需使用Bourne shell程序,AWK和sed,就可以将全面的端到端配置管理封装在操作系统软件包的预安装,postinstall,preremove和postremove部分中。有人会学习Ruby的深奥语言,以及在Puppet语境中的方言,这是完全没有必要的。配置管理的问题很容易解决(并且已经解决了)shell程序和AWK,以及一点点sed(1)作为粘合剂。

看到你的Puppet清单从头开始配置整个机器或新服务是一种很酷的感觉。

通过Kickstart,AutoYaST或JumpStart完成它是一件更酷的事情, 没有一行代码,并能够使用查询操作系统 内置工具,无需任何深奥或额外的软件不需要客户端 - 服务器架构 (SSH不仅仅是很好,也不仅仅是很好),并且看到你的操作系统知道每一次改变都是如此。

5.从数据中分离代码。这是要学习的难点概念之一。将监控主机等硬编码值复制到模块代码中是不好的。将它们放在数据存储中(db,yaml(Hiera使用这是默认值),csv,等等)模块可以使用它是好的。一个例子是使用Mysql的webapp。这允许分别推送代码和数据的能力。这使您的开发过程更简单。

......或者你可以 模板 您的配置文件包含shell变量,甚至是反引号(例如 ls -1 ...并编写一个shell脚本,它使用AWK调用eval(1)并展开模板中的所有变量,从而利用shell内置的完全相同的强大解析器。为什么要把它变得复杂,什么时候真的很简单呢?您将在哪里存储配置值?为什么,在任何你喜欢的地方,例如pkginfo(4)文件,或像Oracle这样的数据库,或几乎 随地。不需要ultracomplex解决方案。我上面提到的图书馆可能就是这样 来源 从操作系统软件包中的预安装或安装后部分,从而消除重复并利用中央代码...

但最重要的是,我发现以上引用是下一代系统管理员的一个例子,需要不是由系统管理员进行辅导,而是由 系统工程师。发现自己是一个灰熊,并以学徒的身份登录。


4
2018-02-11 12:28



你似乎已经忘了你对作者问题的回答了。 - M. Glatki
这个答案似乎主要是关于意见,态度和工具的讨论,并没有真正解决被问到的问题。 - JonathanDavidArndt