我们陷入了一场有趣的争论,并分成了两派。我对任何我们可能忽略的想法或陷阱的具体问题感兴趣。真的,任何可以帮助我们做出决定或指出我们没有考虑到的事情的东西。我知道这有点偏离了“不发表意见”的规则,但我希望这仍然是一个可以接受的问题。很抱歉这么长,有相当多的细微差别。
1) 一方(我本人——并非没有偏见)认为不可变服务器模型对于云系统非常有趣。为此,我们制作了原型,将我们基础设施的所有组件都移到 Docker 中。我们的自定义应用程序通过 Jenkins 直接构建到部署到本地 Docker Registry 的 Docker 映像中。然后,我们创建了一组 Ansible 角色和一个能够连接到空服务器的剧本,安装 Docker,然后告诉 Docker 根据需要安装所有容器。几分钟后,整个应用程序及其所有支持基础设施都已连接并开始工作 - 日志记录、监控、数据库创建/填充等。完成的机器是一个独立的 QA 或开发环境,带有应用程序的精确副本。我们扩展它的计划是制作新的剧本,从基础可信 AMI(可能是一个非常简单的映像)构建新的 AWS 服务器,滚动部署生产应用程序来处理配置管理和发布,并且通常再也不用编辑服务器 - 只需重新制作它们。我并不关心我所描述的内容在实践中是否可行——我只是关心它是否是一个合理的模型。
2) 另一阵营希望使用 Puppet 来处理配置管理,使用 Ansible 来部署我们自定义的应用程序(即从我们的构建流程生成的 tarball),使用 Foreman 来处理整个流程的触发和管理,使用 Katello 来执行一定程度的基础映像管理。发布将涉及 Puppet 根据需要更改配置,Ansible 将在 Foreman 的一定程度的协调下部署更新的组件。如果我们需要新的服务器,我们会相当快地构建服务器,但目的并不是将它们作为标准流程的一部分而一次性使用。这更接近凤凰服务器模型,但寿命很长。
所以我的问题实际上可以归结为:使用我上面描述的工具的不可变服务器模型是否真的像它看起来的那样现实?我喜欢这个想法,我们的登台过程实际上可以实时构建应用程序的完整克隆,让 QA 对其进行敲定,然后只需翻转数据库存储和一些 DNS 设置即可使其生效。
或者说,不可变服务器模型在实践中失败了?我们在 AWS 和云环境方面都拥有丰富的经验,所以这并不是我们真正关心的问题——我们更关心的是如何在未来可靠地部署一个相当复杂的应用程序。这一点尤其令人感兴趣,因为我们发布的频率相当高。
除了为我们创建 EC2 服务器之外,Ansible 还为我们完成了大部分需要做的事情,这并不难。我很难理解为什么在这个模型中你真的需要 Puppet/Foreman/Katello。Docker 比任何我所知的工具中的自定义部署脚本都要干净和简单得多。当你不再担心必须现场配置它们,只需使用新配置重新构建它们时,Ansible 似乎比 Puppet 更易于使用。我是 KISS 原则的粉丝——尤其是在墨菲定律猖獗的自动化领域。在我看来,机器越少越好。
如对该方法有任何想法/评论或建议,我们将不胜感激!
答案1
在我们公司,我们已经在客户的旧基础设施上成功实施了 Puppet。我们还使用 Docker 容器来运行专用服务(实际上是经过修剪和扭曲以适合容器的旧应用程序)。
我第一次开始使用容器时对它们并不满意(是的……30kb 的应用程序变成了 200MB 的沉重映像),但当我在一次小灾难后必须重新创建整个环境时,我改变了主意。我认为 Docker 就是为此而发明的:快速且频繁的部署,无需担心服务器配置。如果您正确设计了容器,您可以轻松地在云提供商、开发人员笔记本电脑和主机托管数据中心之间切换。因为您所需要的只是一个带有 Docker 守护程序的 vanilla Linux 机器。
- 在场景 1) 中,您可以将所有内容放在一个地方(我之所以这么说是因为使用 Docker,您将在同一个存储库中拥有代码和配置),易于管理、阅读和部署。
- 在场景 2) 中,你必须在一个 repo 中存储 3 个不同工具的配置部分,并在另一个 repo 中存储应用程序代码,这会使事情变得更加复杂
我在之前的项目中也使用过 Puppet,到目前为止,我的经验是,使用 Docker 比使用 Puppet 或 Chef 更能实现不可变服务器。我认为配置管理工具对云提供商比对开发团队更有用。
答案2
这是我的 2 欧分。
您提出的 2 个选项是实现(某种)不变性的有效选项。
我认为您应该选择您更满意的那个。
但是,从您写的内容来看,似乎还没有达成共识。
那么也许需要第三个选项?;)
然而,因此不变性并不是目标,而是确保其他属性(无配置漂移、更好的稳定性等)的一种手段。
我会清楚地说明我的目标,设置一些指标来验证它们,并使用这两个选项进行一些测试。然后,您将获得一些数据来选择与您的业务最相符的数据。
祝你好运!