我们build立了一个服务器,运行一个小型协会的基础设施。 到目前为止,我们已经试图用Ansible来pipe理这个configuration,但是这并不是很成功。 也许我们做错了。
原则上,这个想法是,大多数时候这个服务器将被放在一边,人们在蓝色的月亮里添加或者改变事物。 这使得至关重要的是,不pipe在服务器上configuration和运行的是什么,都有很好的文档和清晰的说明,因为不经常pipe理系统的人必然会失去概览(更不用说记住细节)。 另外,随着时间的推移,pipe理这个服务器的人群的组成将会改变(当人们离开并join“委员会”时)。
我们开始了一个干净的安装,每当我们想要设置一些东西(nginx,phpfpm,postfix,防火墙,sftp,munin,..)时,都会添加angular色。 也许是由于我们缺乏经验,我们当然无法完全按照我们需要的方式来完成一套完整的任务,也是因为configuration是一个试验和错误的过程。 这意味着在实践中,我们通常首先configuration我们想要在服务器上运行的任何服务,然后转化为合理的任务。 你可以看到这是怎么回事 人们忘记testing任务,或者害怕这样做会冒险,或者更糟糕的是:我们忘记或忽视了为事情添加东西。
今天,我们几乎没有信心确切的configuration实际上反映了服务器上configuration的内容。
目前我看到三个主要问题:
这里重要的一点是,无论我们最终做什么,新人都应该很容易地学习绳索,而不需要大量的练习。
是否有一个可行的替代scheme仍然提供了一些保证和检查(比如将Ansible文件合并到一些master文件中),即“configuration和logging你所做的”未能提供的?
编辑:我们已经考虑提交/etc git。 有没有一种合理的方式来保护秘密(私人密钥等),但仍然有服务器之外的configuration库在某种程度上可用?
启动一个testing/分期虚拟机,您可以使用它来validation您的更改。 您目前手动执行更改的方法首先被破解,注定要失败。 你和你的团队需要承诺正确使用CM,其中一部分是可用的testing系统。 即使只是一个当地的stream浪汉虚拟机就足够了。
这不仅有助于testing新的变化,而且还可以作为新员工(或者一段时间以来没有使用系统的老员工)的testing平台,以熟悉自己的设置。
关于保持/ etc / git:不,不要这样做。 那个目录只是可以改变的一小部分,只有鼓励人们做出本地改变。
保持你的可靠的剧本在混帐。 考虑限制权限,以便只有您可以对活动服务器应用更改。 其他人可以提交pull请求及其更改,您可以在适当的情况下查看并合并到master中。
也许是由于我们缺乏经验,我们当然无法完全按照我们需要的方式来完成一套完整的任务,也是因为configuration是一个试验和错误的过程。 这意味着在实践中,我们通常会首先configuration我们想要在服务器上运行的任何服务,然后转化为合理的任务。
虽然还有其他问题(比如没有testing环境),但如果不这样做,可以有很大的改进。
Ansible的核心devise目标之一是幂等性的 ,这意味着多次运行你的剧本不应该改变任何东西(除非你改变了剧本)。 因此,当我configuration一个新的软件时,我的步骤是:
如果你不认为你会在Ansible中第一次写出正确的东西, 反正写下来,并迭代它,直到它是正确的,就像其他任何代码一样。 这大大减less了忘记Ansiblize你做的一些改变的机会,因为你所做的每一个变化已经在Ansible在你的发展过程中的某个时候。
Ansible在超过您以前的生产力水平之前有一段时间,但是一旦您做了系统状态就很容易保证。 您的做法似乎与您的最终目标不同步。 使用CM工具集可以提高工作效率,同时保持可靠的工程实践,但要正确构build它需要时间。 您本质上是交易效率和易于实现,稳定性和企业可扩展性。 同样,一位经验丰富的专业程序员也不会写难看的黑客,其后果总是大于好处。
对于初学者,你可能有太多的厨师,没有明确的所有权,如果这样的话,预计公地悲剧。 每个业务优先级都将胜过系统工程问题,除非它被广泛的解决,剩下的事情直接反映在负责的工程师身上。
CM工具集不能被pipe理员devise,这就是我刚刚意识到的。 他们可以重复使用现有的工作,或者可以在一个可靠的基础上进行扩展,但是即使如此,也需要执行一些繁重的工作。 工程师可以做什么,根本就不是pipe理员可以做的事情。 Ansible中的许多概念几乎与代码库中的概念相同,你可以教一个Admin python并期待合格的结果吗? 不,当然不是,我希望有一个黑客的工作,所以你需要使任务结构足够,以便黑客工作是可承受的。
所以你需要设置成功的东西,工程师解决不必要的pipe理点。 为pipe理员实际上可以成功执行的事情交易低层次的系统复杂性。 一个CM工具集不会节省您的体系结构或devise不匹配。
所以顺序受到修改,显然是因为实现取决于什么path对于你现在的状态是最不具有破坏性的。
将任何与业务相关的工作stream程相关的系统工作移至专用的运行平台。
把盒子上的任务拆分出来,你现在可以有两个或更多的盒子。
以更结构化的方式重新实施你的CM,并遵循更好的实践,代表对象不是function或angular色的剧本。 每个系统应该在一个游戏中描述。