如何处理从Ansible库存组中删除的主机?

时间:2019-05-03 08:24:04

标签: ansible

由于主机完全不可用或已被重新利用,我如何处理从Ansible库存组中删除主机的情况?

让我举一个简单的例子来说明3种(典型)Ansible角色。它们不代表实际执行的操作,但有助于解释我的问题:

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

主要剧本将角色应用于相应清单组中的主机。

现在考虑2种情况。

  1. 主机是 nodeexporter webserver 组的成员。主机需要重新用于其他用途,因此必须从 webserver 库存组中删除。这仍然使端口80/443保持打开状态。
  2. 物理主机是 nodeexporter kubernetes 库存组的成员。机器有故障,并已从系统中完全删除。这样,将在所有其余的Kubernetes节点上保留其旧IP的防火墙规则。

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

对于Kubernetes,我当前的解决方法是在每个主机上维护一个自动生成的文件,该文件包含允许的IP地址列表。 (在每次运行的剧本上)都与实际授予的IP相匹配。这种方法不适用于例如安装的软件包,如果离开一个组,它们可能会过时。

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

  

有更好的方法吗?

处理此问题的典型方法是在将服务器重新用作其他角色时从头重新部署服务器。这样可以确保您的服务器从已知状态启动,并且避免了由于过时的程序包/防火墙配置/其他系统配置(不适用于新角色)而导致的问题。

如果您已经使用Ansible进行配置管理,则该过程应该很简单:

  • 使用基本的操作系统使用某些自动安装机制配置服务器
  • 使用您的剧本做其他事情

答案 1 :(得分:0)

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

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

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

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