“单服务器多管理员”的配置管理

Joo*_*ost 9 configuration-management ansible

我们已经设置了一个服务器来运行一个小型协会的基础设施。到目前为止,我们已经尝试使用 Ansible 管理配置,但这并没有取得很大的成功。也许我们做错了。

原则上,我们的想法是这个服务器在大部分时间都将保持独立,人们会在蓝色月亮中添加或更改一次内容。这使得在服务器上配置和运行的任何内容都有详细记录和清晰的记录至关重要,因为不经常管理系统的人必然会失去概览(更不用说记住细节了)。此外,随着时间的推移,将管理此服务器的一组人员的组成将发生变化(随着人们离开并加入“委员会”)。

我们从一个干净的安装开始,每当我们想要设置一些东西(nginx、phpfpm、postfix、防火墙、sftp、munin 等)时,都会在 ansible 中添加角色。也许由于我们的经验不足,我们当然永远无法按照我们需要的方式一次性输入一组 ansible 任务,也因为配置有点反复试验的过程。这意味着在实践中,我们通常会首先配置我们想要在服务器上运行的任何服务,然后转换为 ansible 任务。你可以看到这是怎么回事。人们忘记然后测试任务,或者害怕这样做有破坏事物的风险,或者更糟的是:我们忘记或忽略向 ansible 添加东西。

今天,我们对 ansible 配置实际上反映了服务器上的配置几乎没有信心。

目前我看到三个主要问题:

  • 很难(阅读:我们没有好的方法)在不冒破坏事物的风险的情况下测试 ansible 任务。
  • 它增加了额外的工作来首先确定所需的配置,然后弄清楚如何将其转换为 ansible 任务。
  • (理想情况下,)我们不会经常使用它来建立熟悉度和常规。

这里的一个重要考虑因素是,无论我们最终做什么,新手都应该很容易掌握诀窍而无需大量练习。

是否有可行的替代方案仍然提供一些保证和检查(类似于将 Ansible 文件合并到 some master)“配置事物并写下您所做的事情”未能提供?

编辑:我们已经考虑过/etc使用 git。有没有一种合理的方法来保护机密(私钥等),但仍然可以以某种方式在服务器外部使用配置存储库?

EEA*_*EAA 10

只需启动一个可用于验证更改的测试/暂存 VM。您当前首先手动执行更改的方法已无可救药地被破坏并注定要失败。您和您的团队需要致力于正确使用 CM,其中一部分是拥有可用的测试系统。即使只是一个本地 vagrant VM 就足够了。

这不仅有助于测试新的更改,而且还可以作为新员工(或有一段时间没有使用该系统的老员工)熟悉您的 ansible 设置的测试平台。

关于在 git 中保留 /etc/ :不,不要这样做。该目录只是 ansible 正在改变的一小部分,在那里安装 git 只会鼓励人们进行本地更改。

将你的 ansible playbook 保存在 git 中。考虑限制权限,以便只有您可以将 ansible 更改应用于实时服务器。其他人可以提交带有更改的拉取请求,您可以在适当的情况下查看并合并到 master 中。

  • @ThomWiggers 我假设你们两个在同一个团队,因为你使用了“我们”。好的,你问如何正确地做到这一点。我给出了答案。要么你想正确地做,要么你不想。正确地进行 CM 需要时间、金钱和意图。如果您有通过 LE 获取和部署证书等要求,那么使用 Digital Ocean 建立一个 5 美元/月的虚拟机并将其用于测试。哎呀,当您想要测试更改然后终止它时,您甚至可以按需部署它。 (4认同)
  • 归根结底,这确实是一个文化和资源问题,而不是技术问题。您还没有承诺使用配置管理。你是不是公司无关紧要。您正在寻求有关如何正确做事的帮助,而拥有一个临时环境就是其中的一部分。 (3认同)
  • 恕我直言,是的,你应该承诺。不过,你能否说服你的同事是另一个问题。没有轻量级的方法可以做到这一点,不需要管理服务器的人具有某种程度的意图。在现代 CM 系统中,ansible 是迄今为止最容易上手的。您*确实*想要跟踪服务器随时间的变化。可靠地做到这一点的唯一方法是使用 CM。 (3认同)

Xio*_*iov 6

也许由于我们的经验不足,我们当然永远无法按照我们需要的方式一次性输入一组 ansible 任务,也因为配置有点反复试验的过程。这意味着在实践中,我们通常会首先配置我们想要在服务器上运行的任何服务,然后转换为 ansible 任务。

虽然有其他问题(如没有一个测试环境),你可以不这样做一个大的改善这个

一个Ansible的核心设计目标是要幂等,这意味着运行你的剧本多次不应该改变什么(除非你已经改变了戏剧)。因此,当我配置一个新软件时,我的步骤是:

  1. 对 Ansible 任务进行更改。
  2. 运行剧本。
  3. 检查系统,如果不正确,返回步骤 1。
  4. 提交我的更改。

如果您认为第一次在 Ansible 中不会写出正确的东西,那么无论如何都要编写它并迭代它,直到它正确为止,就像任何其他代码一样。这大大减少了忘记对您所做的某些更改进行 Ansiblize 的机会,因为您所做的每个更改在开发过程中的某个时刻都已经在 Ansible 中。

  • 我在这个迭代过程中遇到的另一个问题是,当您编写一个进行更改的任务,对服务器进行更改,发现更改是错误的,更新您的任务并重新应用剧本时。现在服务器包含两组更改的混合:来自任务第一次迭代的更改,以及来自第二次迭代的更改。通常第二次迭代会覆盖第一次,但不一定总是。是否有一种合理的方法来“清理”而不是 1) 手动通过 SSH 进行撤消,或者 2) 每次都从全新安装开始? (2认同)