想象一下,您要管理许多服务器,这些服务器具有许多人使用的许多不同服务。现在假设您要重新配置或替换其中一台服务器上的某些软件。显然,您不想在生产中的服务器上工作。
如果这是代码更改,作为开发人员,我会在我的本地开发机器上进行更改,在本地测试它并将更改提交到版本控制系统。然后可以将更改部署到暂存环境中,进一步测试并最终部署到生产环境中。如有必要,我也很容易回滚。
一般而言,或者具体来说,您如何在系统管理中实现这一点?
(首先想到的是使用虚拟机并将虚拟机映像置于版本控制中,但我确信有很多文献和巧妙的解决方案我目前还不知道。)
免责声明:我是 Puppet 的开发者之一。
显而易见的方法是仅应用这些概念:定义开发/测试/生产的周期,并通过它们推动更改。使用版本控制来跟踪系统。
简而言之,沿着这条路走下去会发现您确实需要能够自动化这些事情的工具 - 本质上,您想要自动化系统管理,这样您就不会在机器上使用这些技术,而是在系统上使用它们管理机器。
Chef、Puppet、Salt和CFEngine等工具都是满足第二个需求的流行工具。他们的工作总体方向是将系统管理转变为您可以进行版本控制和测试的中央解决方案。
DevOps运动是关于如何做到这一点的另一个良好信息来源。虽然规则是开发人员和运营人员之间更好的合作,但它也朝着同一方向发展。
简短的回答是“操作系统部署管理”、“配置管理”和“软件打包”。长答案如下。
我想在丹尼尔·皮特曼 (Daniel Pittman) 的回复中添加对系统管理中“系统”构成要素的细分。
一个系统或环境将包括:
包括这些将是过程,例如:
并且您希望将这些结合在一起以帮助您实现非功能性目标,例如:
这是一个快速的大脑转储。我相信可以将更多内容添加到所有列表中。
您的问题涉及其中一些,但没有使用特定的词。例如,您希望能够轻松部署和恢复,即需要可维护性;你想在测试环境中进行测试,直到它通过即可重复性、可测试性和可测量性;您正在考虑将 vm 映像置于版本控制中,因为您希望操作系统和配置部署具有可重复性。
有很多工具可以帮助您完成这项工作,其中一些是 Daniel 提到的。其他一些是:
同样,这不是一个完整的列表,但我一直在脑海中为我提供指导,希望它也能帮助你。
在 Windows 世界中,这些围绕应用程序生命周期管理的问题正在通过 System Center 2012 得到解决。
在 System Center Virtual Machine Manager (SCVMM) 中,服务使用“服务模板”(例如经典的三层服务)定义,执行环境定义为“云”(例如开发、暂存、生产)。服务模板可以进行版本控制并(以自动化方式)推出到不同的云。在幕后,SCVMM 负责提供、部署和配置虚拟化硬件(VM 等)和软件(操作系统、应用程序组件等)。
System Center Service Manager 是从流程的角度将它们联系在一起的部分。例如,问题管理和变更控制。