Ansible - 远程自动化还是本地自动化?

7

如果使用像Ansible这样的自动化工具在云端(比如AWS)构建基础架构堆栈,将自动化工具和构建堆栈分别放置于云端的不同区域/VPC中是否足够,还是将自动化工具和脚本放置在本地(自己的数据中心/机器)更加合理?

两种方法似乎都被使用,但我想知道是否存在最佳实践标准。

2个回答

4
作为对xeraa好回答的对比,我们尽可能地从AWS内部运行。
我们从中获得的真正好处是,它允许我们使用集中式Jenkins服务器,该服务器运行Ansible(在我们的情况下还有Terraform),用于实际的AWS配置,而Ansible仅用于配置EC2实例并运行针对管理任务的临时playbook。
然后,我们可以通过凭据和/或安全组/NACL来控制对这些Jenkins服务器的访问权限。
以这种方式进行操作意味着我们可以控制拥有某种凭据的人数,这些凭据将允许他们构建任何他们想要的东西和/或销毁任何他们想要的东西。
理想情况下,我们只会通过IAM EC2实例角色向Jenkins服务器提供凭据,但我们还没有做到。
"One real positive out of this is that our front line/second line support guys who use Windows pretty much exclusively can access a nice web GUI for managing things in the middle of the night and run Jenkins jobs that they specifically have access to run that will do things such as restarting a server/service or even rebuilding part of a VPC.
我们的前线和第二线支持人员几乎完全使用Windows,他们可以在半夜访问一个漂亮的Web GUI来管理事物,并运行他们特别有权限运行的Jenkins作业,这些作业可以执行诸如重新启动服务器/服务或重建VPC的部分等操作。
We have a separate "dev" account that developers have access to from their own machines and it's here that we build things out as we develop our Ansible (and Terraform) code base before that code base is then used in our test and production environments."
我们有一个单独的“dev”帐户供开发人员从自己的机器上访问,我们在这里构建东西,同时开发我们的Ansible(和Terraform)代码库,然后将该代码库用于我们的测试和生产环境。

有一个折中的方法我想要添加。您仍然可以从集中式的Jenkins运行所有内容,从而利用您所描述的优点,但是与其让Jenkins运行远程playbook,不如运行SSH命令进入目标机器来触发本地playbook(可能使用ansible-pull,这样每次都会获得最新的副本)。这样您就可以兼顾两者的优点。 - Allan Denot

4
我们在本地运行所有东西。
此外,
- 我们在本地 Vagrant box 中测试所有 playbook(以及我们的软件),因此我们无论如何都需要它。 - 我们不需要额外的机器。而且您也应该使用 Ansible 配置它们,因此至少有人需要安装 Ansible。否则,您会遇到鸡生蛋问题。 - 可能会更快,因为您少了一次网络跳转。
缺点是,
- 每个人都需要本地安装 Ansible,这只适用于 Linux 和 Mac,而不适用于 Windows(只能作为目标)。
其他考虑因素包括:
- 对于我们的 Windows 用户,Linux/Mac 用户创建一个带有 Ansible 的 VM(已经设置好了一切),并将其导出为基础镜像。然后,Windows 用户可以在 Vagrant 中导入该基础镜像,并仅需启动它 - 一切都已经安装好了。这包括 Ansible,因此您可以从 VM 运行所有内容。 - 起初,我们计划将 Ansible 放在 NAT 实例上(用于私有 VPC 子网)。但是,然后我们就需要一个配置来设置 VPC、安全组和 NAT 实例,另一个配置在 NAT 实例上运行并设置其余基础设施。然而,我们没有看到任何真正的好处,所以现在我们将所有东西都放在本地。
注:不确定是否有明确的答案,但这些是我们的论点。

不错的回答。出于好奇,您是否考虑过在生产环境之前运行代码库以确保其在开发/测试环境中运行?还是您坚持要求人们在将其运行在实时服务器之前先在本地或Vagrant上运行? - ydaetskcoR
我们有一个 Jenkins 作业,对每个推送进行干运行和 ansible-lint 检查。否则这是开发人员的责任,但我们只有 5 个具有 Ansible 访问权限的人,总共有 8 个人。 - xeraa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接