标签: configuration-management

小家伙们如何有效地学习和使用Puppet呢?

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

自从做出决定后,我们的 IT 人员就变得有点过于恼火了。他们最大的反对意见是:

  • “我们不是程序员,我们是系统管理员”;
  • 模块可在线获取,但许多模块彼此不同;轮子经常被重新发明,你如何决定哪一个合适;
  • 我们的 repo 中的代码不够透明,要找到某些东西是如何工作的,他们必须通过清单和模块进行递归,他们甚至可能在不久前自己编写;
  • 一个新的守护进程需要编写一个新的模块,约定必须与其他模块相似,这是一个困难的过程;
  • “让我们运行它,看看它是如何工作的”
  • 社区模块中有大量鲜为人知的“扩展”:“trocla”、“augeas”、“hiera”……我们的系统管理员如何跟踪?

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

configuration-management puppet

110
推荐指数
6
解决办法
3万
查看次数

为什么在 shell 脚本上使用 Chef/Puppet?

Puppet 和 Chef 工具的新功能。似乎他们正在做的工作可以用 shell 脚本来完成。也许它是在 shell 脚本中完成的,直到这些出现。

我同意它们更具可读性。但是,除了可读性之外,是否还有其他优于 shell 脚本的优点?

scripting provisioning configuration-management puppet chef

83
推荐指数
6
解决办法
3万
查看次数

在有意义和无意义的主机名之间进行选择

假设一个环境有一个由不同服务器组成的 puppet 管理集群——各种硬件、软件、操作系统、虚拟/专用等。

您会选择有意义的主机名(mysqlmaster01..99、mysqlslave001..999、vpnprimary、vpnbackup 等)还是更喜欢无意义的主机名,例如书籍或电影中的角色?

我看到有意义的主机名的问题是名称通常代表单个服务,如果服务器有多个用途,它会变得非常混乱(特别是如果服务器角色经常变化)。

难道不是将服务名称映射到 IP 地址并维护 DNS 应该做的映射吗?

这两种方法的优点和缺点是什么,你必须用你选择的方法解决哪些实际问题?

configuration-management best-practices

81
推荐指数
3
解决办法
6388
查看次数

为什么在 Red Hat 和 CentOS 的主要版本之间升级如此困难?

“我们可以将现有的生产 EL5 服务器升级到 EL6 吗?”

来自环境完全不同的两个客户的一个听起来简单的请求促使我通常的最佳实践回答“是的,但它需要协调重建您的所有系统”......

两位客户都认为,出于停机时间和资源原因,完全重建他们的系统是不可接受的选择... ……”

我不是要引出关于配置管理的回应(“Puppetize一切并不总是适用)或客户应该如何更好地计划。这是环境在生产能力中不断发展壮大的一个真实示例,但没有看到迁移到其操作系统下一个版本的干净路径。

环境 A:
非营利组织,拥有40 个 Red Hat Enterprise Linux 5.4 和 5.5 Web、数据库服务器和邮件服务器,运行 Java Web 应用程序堆栈、软件负载平衡器和 Postgres 数据库。所有系统都在不同位置的两个 VMWare vSphere 集群上进行虚拟化,每个集群都具有 HA、DRS 等。

环境 B:
高频金融交易公司,在多个托管设施中配备200 x CentOS 5.x系统,运行生产交易业务,支持内部开发和后台功能。交易服务器在裸机商品服务器硬件上运行。他们有许多sysctl.confrtctl,中断到位约束力和驱动程序的调整,以降低消息传送等待时间。有些具有自定义和/或实时内核。开发人员工作站也运行类似版本的 CentOS。


在这两种情况下,环境都按原样运行良好。升级的愿望来自对 EL6 中可用的更新应用程序或功能的需求。

  • 对于非盈利公司来说,它与 Apache、内核和一些会让开发人员感到高兴的东西有关。
  • 在贸易公司,它是关于内核、网络堆栈和 GLIBC 的一些增强,这将使开发人员感到高兴。

两者都不能在不彻底改变操作系统的情况下轻松打包或更新。

作为系统工程师,我很欣赏红帽建议在主要版本之间移动时进行完全重建。一个干净的开始迫使你重构并在此过程中注意配置。

对客户的业务需求很敏感,我想知道为什么这需要如此繁重的任务。RPM 打包系统不仅能够处理就地升级,但它是让您/boot受益的小细节:需要更多空间、新的默认文件系统、RPM 可能会在升级过程中中断、已弃用和已失效的软件包......

这里的答案是什么?其他发行版(基于 .deb、Arch 和 Gentoo)似乎具有这种能力或更好的途径。假设我们找到了以正确方式完成此任务的停机时间:

  • EL7 发布稳定后,这些客户端应该怎么做才能避免同样的问题呢? …

linux redhat centos configuration-management puppet

72
推荐指数
2
解决办法
3万
查看次数

Puppet 不应该管理什么?

我正在通过一般的配置管理学习我的方法,特别是使用puppet来实现它,我想知道系统的哪些方面(如果有的话)应该用 puppet 管理?

例如,在将系统借给 puppet 的管理之前,我们通常认为主机名已经设置是理所当然的。基本的 IP 连接,至少在用于联系 puppetmaster 的网络上,必须正常工作。使用 puppet 自动创建 dns 区域文件很诱人,但 DNS 反向指针应该在启动之前就已经到位,否则证书会很有趣。

那么我应该从 puppet 中省略 IP 配置吗?或者我应该在第一次启动 puppet 之前设置它但仍然使用 puppet 管理 IP 地址?具有多个 IP 的系统(例如,用于 WAN、LAN 和 SAN)会怎样?

IPMI怎么样?您可以使用ipmitool配置大部分(如果不是全部),从而避免获得控制台访问(物理、串行网络、远程 KVM 等),因此可以使用 puppet 进行自动化。但是在每次 puppet agent 运行时重新检查它的状态对我来说听起来并不酷,而且在做任何其他事情之前我希望对系统进行基本的熄灯访问。

另一个完整的故事是关于安装更新。我不打算讨论这个具体问题,已经有很多关于 SF 的问题以及不同系统管理员之间的许多不同哲学。我自己,我决定不让傀儡更新的东西(如只ensure => installed),并因为我们已经习惯了做手工更新,离开这个任务的自动化到以后的一天,当我们与木偶(如更加自信。通过增加MCollective到混合)。

这些只是我现在想到的几个例子。系统的任何方面是否应该被人偶接触到?或者,换一种说法,应该在配置时设置什么和系统中“静态”配置的内容与通过集中配置管理处理的内容之间的界限在哪里?

linux configuration-management puppet

70
推荐指数
3
解决办法
1万
查看次数

Puppet vs Chef,来自用户和用例的赞成和反对

我已经用谷歌搜索并阅读了“to-puppet-or-to-chef-that-is-the-question”文章。

我对用例感兴趣,在现实世界的实现中,人们根据实际问题选择了一个或另一个。

我对与 cobbler问题的集成特别感兴趣(我知道 puppet 是这个方向的标准方法);作为任何人在鞋匠 - 厨师整合方面的任何经验?

提前致谢

rhel5 configuration-management puppet cobbler chef

55
推荐指数
4
解决办法
1万
查看次数

如何记录服务器更改?

所以我们可能都遇到过这种情况:你调试了一些问题,却发现它是由你六个月前所做的配置更改引起的,而且你不记得你为什么这样做。所以你撤消它并解决问题,现在其他一些问题又回来了。哦,是的,现在我想起来了!然后你正确修复它。

那是因为你没有做好笔记,你这个笨蛋!但是这样做的好方法是什么?

在工程方面,我们有大量软件可以帮助我们检测和跟踪变化。源代码控制、代码审查等。跟踪每个更改,每个更改都需要对其进行注释。典型的工程部门需要良好的评论,以便在六个月内弄清楚为什么会这样破坏它时,您可以使用历史“责备”功能或二进制搜索构建来查明问题。这些工具是非常有效的交流工具和历史记录。

但是在服务器领域,我们有 500 种不同的服务,所有这些服务的配置方式都不同。而且它们并不总是具有文本格式(考虑设置文件夹的权限或更改页面文件位置),尽管它们可能具有文本表示。

在我们的环境中,我们检查了可以进入 Perforce 的配置文件,但这些文件很少。无法完全检查 Active Directory DB ..虽然可能是一个可以区分的转储......

过去,我曾尝试在我们的 wiki 中保留手动更改日志,但要保持这样做的纪律非常困难(我知道,这不是一个好借口,但确实很难)。

我的问题:您使用什么策略和工具来解决跟踪服务器配置更改的问题?

- 更新 -

注意:我不是在寻找共享笔记工具(我熟悉 OneNote 等),而是专门用于帮助跟踪服务器更改的自动化工具。没有用于跟踪服务器配置更改的综合工具,但也许有一些针对特定应用程序(如 GPO)的工具。

此外,我对您认为有用的特定策略非常感兴趣。“我们在 Sharepoint 中共享笔记”非常含糊。你如何保持纪律?您使用什么格式来跟踪您的更改?您如何组织变更数据?我真的很喜欢例子和想法。

configuration-management

52
推荐指数
3
解决办法
2万
查看次数

厨师最佳实践/问题

我使用并喜欢 Puppet。我搬到了一家新公司,他们正在收养厨师。所以我正在尝试学习 Chef,但我很难将它们拼凑在一起,因为我仍然在 Puppet 中思考 =)

这些是我的问题:

  • 在 Ruby DSL、JSON 或管理控制台中设置角色哪个更好?为什么有多种方法可以做同样的事情?
  • 你能把食谱组织成子目录吗?例如:我们有自定义软件,我想为其编写食谱并将其粘贴到:chef-repo/cookbooks/ourcompanystuff/customsoftwarecookbook 这是一个好习惯吗?
  • 我是否为每种类型的角色创建一个说明书,指定它的作用?我是否有这些食谱包括其他食谱(即我的网络服务器角色的食谱包括 apache 食谱)。我不确定如何处理食谱之间的依赖关系和继承。
  • 有没有像 Puppet 的外部节点分类器那样节点自动确定它们的角色?
  • 似乎您可以使用 Knife 或在管理控制台中进行配置,或者编辑 JSON 文件?这让我感到非常困惑,为什么有这么多方法可以做事,真是令人麻痹!是否有理由使用其中之一?来自 puppet 似乎很容易使用这些工具意外错误配置某些东西(即-遗漏某些东西)
  • 如何在我的开发集群中使用 Chef 自动配置节点?使用 Puppet,我启动了一个连接到 puppermaster 的 VM,并启动了一个 puppet 运行并自行设置(角色由外部节点分类器确定)。我如何用 Chef 做到这一点?使用将其绑定到厨师服务器的 pem/rb 文件安装厨师,使用刀手动告诉节点其角色或在管理界面中编辑它,然后启动厨师客户端运行以设置自己?

我完成了入门教程,我看到他们有 EC2 教程,但我从未使用过 EC2,所以我很难理解它们。在这一点上,我已经托管了 Chef 并且我开始尝试配置单个节点。我从这里去哪里?我需要开始看公共食谱吗?

Opscode 上的文档还可以,但不如 Puppet 的好。我的搜索中是否还有其他好的厨师资源?

configuration-management chef

48
推荐指数
1
解决办法
2万
查看次数

如何从 Ansible 和 Vagrant 启用额外的调试输出?

我正在研究用于服务器和应用程序配置的 Ansible。我的应用程序目前在 Vagrant 中配置了 shell 脚本。我没有重写我的脚本,而是取了一个样本并尝试部署它。

它似乎部署得很好,但在执行了一系列成功步骤后,我看到了一条失败消息:

» vagrant provision                                       ~/vm/blvagrant 1 ?
[default] Running provisioner: ansible...

PLAY [web-servers] ************************************************************

GATHERING FACTS ***************************************************************
ok: [192.168.9.149]

TASK: [install python-software-properties] ************************************
ok: [192.168.9.149] => {"changed": false, "item": ""}

TASK: [add nginx ppa if it ubuntu 10.04 and up] *******************************
ok: [192.168.9.149] => {"changed": false, "item": "", "repo": "ppa:nginx/stable", "state": "present"}

TASK: [update apt repo] *******************************************************
ok: [192.168.9.149] => {"changed": false, "item": ""}

TASK: [install nginx] *********************************************************
ok: [192.168.9.149] => {"changed": …
Run Code Online (Sandbox Code Playgroud)

configuration-management vagrant ansible

44
推荐指数
2
解决办法
5万
查看次数

Puppet 或 Chef 相比 Salt(反之亦然)有哪些优势/特性?

我正在考虑推出一种新的配置管理工具来取代我们自己开发的解决方案。事实上的标准是 Chef 和 Puppet,它们都是以 Ruby 为中心的(尽管显然可以用于部署非 Ruby 环境)。我们绝大多数的开发都是用 Python 完成的,我们的内部部署工具大量使用Fabric。因此,我正在学习Salt,因为它也是 Python,尽管它不如 Chef 或 Puppet 成熟。但由于我对这些选项不够熟悉,我发现很难进行比较。

除了较小的社区之外,我会通过使用 Salt 而不是 Puppet/Chef 来放弃任何重要的东西吗?

更新

我发布这个问题已经六个月了。尽管它已关闭,但它已被观看了 1,000 多次,所以我想我会评论我的经历。

我最终决定使用 Puppet,因为它有一个更大的社区。然而,这是一次非常令人沮丧的经历,主要是由于复杂的 Puppet 配置语法。因为我现在有了比较两者的参考框架,所以我最近又看了看 Salt——我不会回去了。非常非常酷。我最喜欢的东西:

  • 推和拉配置模型的无缝集成。Puppet 使用拉模型(节点定期轮询服务器以获取更新)并有一个名为 Marionette 的姊妹组件用于推送更改。两者对我都很重要,我更喜欢 Salt 的工作原理。当你有很多节点时,Salt 的执行速度也会快得多。

  • 配置语法使用 YAML,它只是一种使用缩进和项目符号的简单文本格式。您也可以通过模板选择使用其他配置格式。根据我的经验,这使 Salt 的学习和维护难度提高了大约 10 倍。

  • 基于Python。这是我最初开始研究 Salt 的最大原因。这最终成为我留下来的次要原因之一。但是,如果您是像我们这样的 Python 商店,则可以更轻松地开发 Salt 插件。

python configuration-management puppet chef saltstack

40
推荐指数
0
解决办法
6411
查看次数