Ansible 是跨多台机器大规模部署更改的好方法。 例如,我用它在新机器上进行一些基本设置并同时更新多个主机。 同样重要的是要记住,Ansible 不仅用于家庭实验室环境,而且在企业环境中也非常流行,这使其成为一项非常有价值的技能。
在新机器上设置 Ansible
首先,我们需要安装 ansible 包,它应该很简单:
` sudo apt update && sudo apt install ansible `
我们需要创建我们的 Ansible 目录来处理:
` mkdir ~/ansible && cd ~/ansible `
您现在应该位于本地计算机上的 Ansible 目录中。
Ansible 概览
我们使用 Ansible 的两个主要功能,存储所有主机的库存,以及包含在主机上执行的“指令”的剧本。 为了让 Ansible 读取我们的剧本并执行操作,它必须知道主机在哪里,也就是清单文件是什么。 它只是所有主机的“清单”。
现在我们有了 playbook 本身。Ansible 读取完清单并了解所有主机后,就开始寻找要执行的操作。这就是 playbook,它只是一个简单的 YAML 文件,利用“模块”来执行任务。关于这些模块的文档可以在Ansible 网站上找到。如果还有不清楚的地方,NetworkChuck 的这段 [ Ansible 入门视频] 讲解得很好。
创建我们的 Ansible 库存
现在我们对 Ansible 及其功能有了基本的了解,我们可以创建清单了。 格式可以是 YAML 或 INI,为了简单起见,我们将使用 INI 并且只添加一个主机。
这是一个示例文件:
清单.ini:
“`伊尼
[强大的]
192.168.1.78
“`
在你的 ansible 目录中将其命名为 `inventory.ini`。 该文件创建了一个“组”,其中包含一个主机“192.168.1.78”。 稍后我们可以在我们的剧本中使用它。 你可以根据你的设置给它任何你想要的组名和 IP。 如果需要,您还可以向组中添加更多主机。
部署 Ansible 剧本
首先,我们要验证 Ansible 是否正常工作:
请记住,我们的 ssh 公钥必须位于我们尝试访问的主机上的 authorized_keys 文件中。 否则,此命令将失败。 我们使用的是“powerful”组,但使用您命名的任何名称。
` ansible -i ./inventory.ini -m ping -u administrator powerful`
如果可行,我们可以在该节点上提供我们的剧本。
我们部署的 playbook 会简单地更新系统,重启系统,然后等待其恢复在线。如果组内有多个节点,它会逐个节点进行操作,等待前一个节点恢复在线后再重启下一个节点。这样可以确保节点上的服务有足够的时间关闭和迁移(如果您使用的是Docker Swarm 之类的服务)。
更新.yml:
“`yaml
– 名称:升级所有节点并重启
收集事实:没有
主机:“{{ variable_hosts }}”
变成:是
序列号:1
任务:
– 名称:更新和升级 | {{ inventory_hostname }}
易于:
# 强制向后兼容
force_apt_get:是的
更新缓存:是的
升级:'是'
– 名称:重新启动 | {{ inventory_hostname }}
重启:
# 重启后等待节点恢复在线的时间
重启超时:300
# 上一个任务(apt)完成后等待多长时间重启
pre_reboot_delay:60
– 姓名:平 | {{ inventory_hostname }}
ping:
– 名称:暂停 | {{ inventory_hostname }}
暂停:
分钟:5
“`
`ansible-playbook -i ./inventory.ini -e variable_hosts=powerful -u 管理员 -K ./update.yml`

旗帜说明:
– -i:指定清单文件。
– -e:我们必须指定主机,在剧本中我们有一个变量“variable_hosts”,这是传递给剧本的内容。
– -u:这是用于在主机上运行命令的用户。
– -K:这告诉剧本提示用户输入 sudo 密码,否则剧本将失败。
关闭的思考
Ansible 是一种非常强大且用途广泛的工具,可用于多种用途。 我们在这篇文章中仅仅触及了皮毛,但您应该继续试验和自动化任务以了解更多信息。 无论是自动化 Kubernetes 部署,还是像我们今天所做的那样更新您的系统。
-伊桑·爱德华兹




Amazon