【问题标题】:How to handle hosts removed from Ansible Inventory Groups?如何处理从 Ansible Inventory Groups 中删除的主机?
【发布时间】:2019-05-03 08:24:04
【问题描述】:

我如何处理从 Ansible Inventory Group 中移除的主机,无论是因为主机完全不可用还是重新调整用途?

让我举一个 3 个(示例性)Ansible 角色的简短示例。它们并不代表实际做了什么,但有助于解释我的问题:

  • webserver 角色安装某个 webserver 应用程序,将 HTML 内容复制到目标主机并在防火墙中打开端口 80 和/或 443(例如,使用 ufw module)。
  • Kubernetes 角色将主机加入现有的 Kubernetes 集群。为了使网络正常工作,它会在受影响的主机和所有其他集群成员上打开防火墙端口。
  • nodexporter 角色安装 Prometheus Node Exporter 并在防火墙中打开其端口以允许来自某个 Prometheus 服务器的传入连接。

主剧本将角色应用于相应库存组中的主机。

现在考虑两种情况。

  1. 主机是 nodeexporterwebserver 组的成员。主机需要重新用于其他目的,因此从 webserver Inventory Group 中删除。这仍然使端口 80/443 保持打开状态。
  2. 物理主机是 nodeexporterkubernetes Inventory Groups 的成员。机器有缺陷并从系统中完全删除。这会在所有剩余的 Kubernetes 节点上打开旧 IP 的防火墙规则。

我编写角色的方式是添加/确保防火墙端口等内容。以 nodeexporter 角色服务器为例,为什么我不能简单地刷新防火墙。那么,如果主机将组留给主机本身和其他受影响的主机(如 Kubernetes 示例中),我如何确保正确的状态?

我目前针对 Kubernetes 案例的解决方法是在每个主机上维护一个自动生成的文件,其中包含允许的 IP 地址列表。这(在每个剧本运行中)与实际授予的 IP 匹配。这种方法不适用于例如已安装的软件包,如果留下一个组,可能会变得陈旧。

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: ansible


    【解决方案1】:

    有没有更好的方法来做到这一点?

    处理此问题的典型方法是在将服务器重新用于其他角色时从头开始重新部署服务器。这可确保您的服务器从已知状态启动,并避免可能由不适合新角色的陈旧包/防火墙配置/其他系统配置引起的问题。

    如果您已经在使用 Ansible 进行配置管理,这应该是一个简单的过程:

    • 使用某种自动安装机制提供带有基本操作系统的服务器
    • 使用你的剧本做其他事情

    【讨论】:

    • 但是我的第二个示例(Kubernetes)呢,主机的存在或不存在会对其他主机产生影响?
    【解决方案2】:

    我在以前的项目中使用了两种方法来解决此问题:

    • 使用dynamic inventory:在这种情况下,您可以根据您的规则(主机名、操作系统、位置、环境变量...)以编程方式将主机分配给组。只要机器少并且库存代码速度快,就可以很好地工作
    • 使用以主机为中心的方法:在这种情况下,为每个主机安装 ansible 并使用命令 ansible-inventory 而不是 ansible-playbook 来克隆 playbook 并仅为 localhost 执行它。 Playbook 执行可以检索一些信息(主机名、操作系统、位置、环境变量等)来条件执行。我更喜欢这种方法,因为您可以在每次启动时自动执行配置(第一次安装,下一次升级)。缺点:您需要在所有虚拟机上使用 ansible。

    为了解决第二种情况,我重建了一个完整的配置文件,这是要应用的新参考。每次添加或删除机器时,您都必须这样做。使用 Ansible 时,必须考虑“最终状态”,新的配置文件是必须删除旧配置文件的新状态:

    • 使用动态清单很容易做到:为每个主机生成所有新的防火墙规则并在需要时应用它们。
    • 使用以主机为中心的方法会更加复杂,因为每个主机都不知道其他主机。有解决方案,但过于复杂,无法在此问题中描述。

    【讨论】:

    • 感谢您的回答。尽管如此,这对案例 2) 有什么帮助,我需要删除 ufw 规则以允许从 剩余 主机中删除的主机的 IP 地址?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多