手动更改和配置不需要手工完成。他们甚至不一起喝茶。
在工作中,我们使用Puppet来管理所有架构,就像你一样,由于性能瓶颈、攻击等原因,我们需要手动进行快速更改。
我们的做法是首先确保Puppet能够设置架构的每个部分,以便随时进行交付而不需要进行任何特定调整。
然后,当我们需要手动更改时,如果时间紧迫且不会干扰Puppet管理的文件,则没有风险;如果要更改Puppet管理的文件,则只需停止Puppet代理并进行所需更改即可。
忙碌结束后,我们按以下方式操作:
这些更改适用于具有相同症状的所有服务器吗?
如果是的话,您可以开发Puppet称之为“facts”的内容,这是一种在每次运行代理时运行的代码,并将结果保存在所有Puppet模块中可用的变量中,因此,例如,如果您更改了IP连接跟踪最大值,因为防火墙无法处理所有连接,您可以轻松地(十行代码)在每次运行Puppet时获得当前的conntrack计数值,从而告诉Puppet设置与当前使用相关的最大值。然后,所有其他服务器都将受益于此调优,您很可能永远不必再处理conntrack问题(只要保持使用短频率运行Puppet,这是默认设置)。
这些更改应该始终在紧急情况下手动应用吗?
如果配置由Puppet管理,请找到一种方法将配置包含在其他文件中,并告诉Puppet忽略它。这是最简单的方法,但并非总是可行(例如,/etc/network/interfaces不支持包含)。如果不可能,则必须在紧急情况下停止Puppet代理,以便能够更改Puppet文件而不会被下次Puppet运行删除的风险。
这些更改仅适用于此主机,其他主机永远不需要它们吗?
无论如何都要将其添加到Puppet中!如果$ fqdn == my.very.specific.host,则放置一个sweet,并在其中放置所需内容。即使仅适用于单个情况,也始终有益(且耗时),因为这将允许您完全恢复服务器设置,如果由于某种原因您的服务器崩溃到不可恢复的状态(例如硬件问题)。
总之:
对我来说,处理手工更改的诀窍在于花费大量精力来推理您决定进行更改的方式,并在紧急情况结束后将该逻辑移入Puppet。当然要非常小心,就像您想要针对您的架构测试的不同情况的数量一样耗时,但最终它非常、非常有益。