48

最近我在看 Ansible,想在项目中使用它。还有另一个工具 Rundeck 可以用来做各种操作工作。我没有使用这两种工具的经验,这是我目前对它们的理解:

相似点

  • 这两个工具都是无代理的,并且使用 SSH 在远程服务器上执行命令

  • Rundeck的主要概念是Node,和Ansible的inventory一样,关键思想是定义/管理/分组目标服务器

  • Rundeck 可以在选定的节点上执行 ad-hoc 命令,Ansible 也可以非常方便地做到这一点。
  • Rundeck 可以定义工作流并在选定的节点上执行,这可以通过编写 playbook 使用 Ansible 完成
  • Rundeck 可以与 Jenkins 等 CI 工具集成来做部署工作,我们也可以定义一个 Jenkins 作业来运行 ansible-playbook 来做部署工作

不同点

  • Rundeck 有 Job 的概念,Ansible 没有

  • Rundeck 有 Job Scheduler,Ansible 只能通过 Jenkins 或 Cron 任务等其他工具来实现这一点

  • Rundeck 默认有免费的 Web UI,但你必须为 Ansible Tower 付费

似乎 Ansible 和 Rundeck 都可以用来做配置/管理/部署工作,也许以不同的方式。所以我的问题是:

  • 这两个工具是互补的还是为不同的目的而设计的?如果它们是互补的工具,为什么 Ansibl 只与 Chef/Puppet/Slat 等工具相比,而不是与 Rundeck 相比?如果他们不是为什么他们有这么多相似的功能?
  • 我们已经在使用 Jenkins 进行 CI 构建持续交付管道,使用哪个工具(Ansible/Rundeck)进行部署是一个更好的主意?
  • 如果它们可以一起使用,最佳做法是什么?

非常感谢任何建议和经验分享。

4

6 回答 6

42

TL;DR - 考虑到您的 Jenkins 环境用于 CI/CD,我建议只使用 Ansible。

您已经发现 Ansible 和 Rundeck 之间存在相当大的交叉,因此最好专注于每个产品的重点、风格和用途。

重点

我相信 Rundeck 的重点是让系统管理员能够构建一个(基于 Web 的)自助服务门户,其他系统管理员以及可能较少“技术”/系统管理员的人都可以访问该门户。Rundeck 的网站说“将您的操作程序转变为自助服务工作。安全地为他人提供所需的控制和可见性。 ”。Rundeck 还觉得它对世界有更“集中”的看法:您将作业加载到数据库中,这就是它们所在的位置。

对我来说,Ansible 是为 devops 设计的——因此以一种高度可重复的方式构建和自动化(自建)应用程序的部署。我认为 Ansible 更侧重于构建自己的产品的软件开发公司:Ansible 的“剧本”是文本文件,因此通常存储在源代码控制中,并且通常与剧本将部署的应用程序一起存储。

就业创造重点

使用 Rundeck,您通常可以通过 Web UI 创建作业。

使用 Ansible,您可以通过文本编辑器在文件中创建任务/剧本。

操作/任务/工作风格

Rundeck 默认是命令式的——您编写执行的脚本(通过 SSH)。

Ansible 既是命令式的(即执行 bash 语句)也是声明式的,因此在某些情况下,例如,启动 Apache,您可以使用该service任务来确保它正在运行。这更接近于其他配置管理工具,如 Puppet 和 Chef。

复杂的作业/脚本

Rundeck 可以通过在 Job 的工作流程中定义一个步骤来运行另一个 Job,但从经验来看,这感觉像是一个附加的附加功能,而不是一个严肃的顶级功能。

Ansible 旨在创建复杂的操作;running/includes/etc 是顶级功能。

它是如何运行的

Rundeck 是一个服务器应用程序。如果您想从其他地方(如 CI)运行作业,您需要调用 cli 或进行 API 调用。

直接 Ansible 是命令行。

附带条件

由于 Rundeck和Ansible的交叉和整体灵活性,您可以在每个中实现上述所有。您可以通过将 Rundeck 作业导出到 YAML 或 XML 并将它们签入源代码控制来实现对它们的版本控制。您可以使用 Tower 在 Ansible 中获取 Web UI。等等等等等等

你的问题:

辅助工具?

我可以设想一个 SaaS 商店同时使用这两种方法:一个可能使用 Ansible 执行所有部署操作,然后使用 Rundeck 执行一次性的临时作业。

但是,虽然我可以设想它,但我不建议将其作为起点。我,我会从 Ansible 开始,看看我能走多远。如果我发现我真的,真的需要一次性运行,我只会在稍后加入 Rundeck 。

CI/CD

Ansible:您的环境听起来更像是一个软件公司,您在其中部署自己的应用程序。它可能应该是可重复的(尤其是在您进行持续交付时),因此您需要在源代码控制中部署脚本。你会想要简单,而 Ansible 是“只是文本文件”。我希望你也希望你的开发人员能够在他们的机器上运行东西(对吧?),Ansible 是去中心化的。

一起使用(用于 CI/CD)

从 Ansible 调用 Rundeck,没有。当然,这是可能的,但我正在努力想出充分的理由。至少,不是非常专业的特定于特定应用程序或框架的原因。

从 Rundeck 调用 Ansible,是的。我可以设想有人首先在 Ansible 中构建一些可重复的临时命令。然后我可以看到有一点需要能够在没有命令行的情况下调用它(比如:非技术用户)。但是,这又是针对您的环境的。

于 2015-07-21T07:45:24.240 回答
5

我的观点 - rundeck 和 ansible(免费,无塔)做不同类型的工作

  1. Ansible(无塔)- 配置管理(服务器/应用程序供应,大量配置更新)

  2. Rundeck - 具有访问控制、通知、作业输出等的集中式作业调度程序(归档旧日志、运行一些脚本等)

于 2016-05-09T22:28:58.930 回答
5

在被问到这个问题时,作者正确地指出 Ansible 只提供了一个收费的 UI。

UI现已开源:AWX

于 2017-11-30T09:43:14.277 回答
3

它完全基于您的要求。我使用 rundeck 进行远程脚本执行和应用程序部署。我已经将它与 Foreman 集成以涵盖供应和配置管理。

如果您有预算限制,那就别无所求,Rundeck 摇滚。不过,您可能会错过 Ansible 中的一些功能。此外,Google 小组在获得支持的情况下也非常活跃。

如果您有预算投资 ansible Tower,您可能不需要其他任何东西。

于 2015-07-06T04:50:50.377 回答
2

服务器标准变得可靠。

临时/操作任务去rundeck。

这是我目前使用的。

于 2015-10-13T05:18:25.073 回答
2
  1. 如果您打算将它们用作开发人员或 OPS 团队的自助服务门户,那么我会说 RBAC 在 Tower 而不是在 Rundeck 中实现更简单、直观更清晰。考虑设置 RBAC 需要多少努力和复杂性,因为它对于支持此产品的团队至关重要。

  2. Tower 中的 REST API 比 Rundeck 中的更简单、更易于解析。

  3. 在 Tower 中,您可以查看每个 playbook 任务的单个事件,而在 Rundeck 中,所有内容都被抛出在一个控制台输出中。

  4. Tower 中的动态清单对于公共云中的部署非常有用。

于 2015-11-11T23:20:58.183 回答