如何在Ubuntu20.04上安装和配置Ansible

来自菜鸟教程
跳转至:导航、​搜索

介绍

配置管理系统旨在为管理员和运营团队简化控制大量服务器的过程。 它们允许您从一个中央位置以自动化方式控制许多不同的系统。

虽然有许多流行的配置管理工具可用于 Linux 系统,例如 ChefPuppet,但这些工具通常比许多人想要或需要的复杂。 Ansible 是这些选项的绝佳替代方案,因为它提供的架构不需要在节点上安装特殊软件,使用 SSH 执行自动化任务并使用 YAML 文件来定义配置细节。

在本指南中,我们将讨论如何在 Ubuntu 20.04 服务器上安装 Ansible,并介绍如何使用该软件的一些基础知识。 有关 Ansible 作为配置管理工具的更高级概述,请参阅 An Introduction to Configuration Management with Ansible

先决条件

要遵循本教程,您将需要:

  • 一个 Ansible 控制节点:Ansible 控制节点是我们将用来通过 SSH 连接和控制 Ansible 主机的机器。 您的 Ansible 控制节点可以是您的本地机器或专用于运行 Ansible 的服务器,尽管本指南假设您的控制节点是 Ubuntu 20.04 系统。 确保控制节点具有:
    • 具有 sudo 权限的非 root 用户。 要进行此设置,您可以按照我们的 Ubuntu 20.04 初始服务器设置指南的 步骤 2 和 3。 但是,请注意,如果您使用远程服务器作为 Ansible 控制节点,则应遵循本指南的 每一步 。 这样做将使用 ufw 在服务器上配置防火墙并启用对您的非 root 用户配置文件的外部访问,这两者都将有助于保持远程服务器的安全。
    • 与此用户关联的 SSH 密钥对。 要进行设置,您可以按照我们关于 如何在 Ubuntu 20.04 上设置 SSH 密钥的指南中的 Step 1 进行操作。
  • 一个或多个 Ansible 主机:Ansible 主机是您的 Ansible 控制节点配置为自动化的任何机器。 本指南假定您的 Ansible 主机是远程 Ubuntu 20.04 服务器。 确保每个 Ansible 主机具有:
    • Ansible 控制节点的 SSH 公钥添加到系统用户的 authorized_keys 中。 此用户可以是 root 或具有 sudo 权限的普通用户。 要进行设置,您可以按照 如何在 Ubuntu 20.04 上设置 SSH 密钥的 步骤 2

第 1 步 — 安装 Ansible

要开始使用 Ansible 作为管理服务器基础架构的一种方式,您需要在将用作 Ansible 控制节点的机器上安装 Ansible 软件。 我们将为此使用默认的 Ubuntu 存储库。

首先,刷新系统的包索引:

sudo apt update

在此更新之后,您可以安装 Ansible 软件:

sudo apt install ansible

提示确认安装时按Y

您的 Ansible 控制节点现在拥有管理主机所需的所有软件。 接下来,我们将介绍如何设置清单文件,以便 Ansible 可以与您的托管节点通信。

第 2 步 — 设置库存文件

库存文件 包含有关您将使用 Ansible 管理的主机的信息。 您可以在清单文件中包含从一台到数百台服务器的任意位置,并且可以将主机组织成组和子组。 清单文件还经常用于设置仅对特定主机或组有效的变量,以便在剧本和模板中使用。 一些变量也会影响 playbook 的运行方式,例如我们稍后会看到的 ansible_python_interpreter 变量。

要编辑默认 Ansible 清单的内容,请在 Ansible 控制节点上使用您选择的文本编辑器打开 /etc/ansible/hosts 文件:

sudo nano /etc/ansible/hosts

注意:虽然 Ansible 通常会在 etc/ansible/hosts 创建一个默认清单文件,但您可以在任何更适合您需要的位置自由创建清单文件。 在这种情况下,您需要在运行 Ansible 命令和 playbook 时使用 -i 参数提供自定义清单文件的路径。 使用每个项目的清单文件是一种很好的做法,可以最大程度地降低在错误的服务器组上运行剧本的风险。


Ansible 安装提供的默认清单文件包含许多示例,您可以将它们用作设置清单的参考。 以下示例定义了一个名为 [servers] 的组,其中包含三个不同的服务器,每个服务器由自定义别名标识:server1server2 和 server3[X177X ]。 请务必将突出显示的 IP 替换为 Ansible 主机的 IP 地址。

/etc/ansible/主机

[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

[all:vars]
ansible_python_interpreter=/usr/bin/python3

all:vars 子组设置对包含在此清单中的所有主机有效的 ansible_python_interpreter 主机参数。 此参数确保远程服务器使用 /usr/bin/python3 Python 3 可执行文件,而不是 /usr/bin/python (Python 2.7),这在最近的 Ubuntu 版本中不存在。

完成后,按 CTRL+X 然后按 YENTER 保存并关闭文件以确认您的更改。

每当您想检查库存时,都可以运行:

ansible-inventory --list -y

您将看到与此类似的输出,但包含您在清单文件中定义的自己的服务器基础架构:

Outputall:
  children:
    servers:
      hosts:
        server1:
          ansible_host: 203.0.113.111
          ansible_python_interpreter: /usr/bin/python3
        server2:
          ansible_host: 203.0.113.112
          ansible_python_interpreter: /usr/bin/python3
        server3:
          ansible_host: 203.0.113.113
          ansible_python_interpreter: /usr/bin/python3
    ungrouped: {}

既然您已经配置了清单文件,那么您就拥有了测试与 Ansible 主机的连接所需的一切。

第 3 步 — 测试连接

在设置清单文件以包含您的服务器之后,是时候检查 Ansible 是否能够连接到这些服务器并通过 SSH 运行命令。

对于本指南,我们将使用 Ubuntu root 帐户,因为这通常是新建服务器上默认可用的唯一帐户。 如果您的 Ansible 主机已经创建了一个普通的 sudo 用户,我们鼓励您改用该帐户。

您可以使用 -u 参数来指定远程系统用户。 如果未提供,Ansible 将尝试以您当前系统用户的身份连接到控制节点。

从您的本地机器或 Ansible 控制节点,运行:

ansible all -m ping -u root

此命令将使用 Ansible 的内置 ping 模块 在默认清单中的所有节点上运行连接测试,连接为 rootping 模块将测试:

  • 主机是否可以访问;
  • 如果您拥有有效的 SSH 凭据;
  • 如果主机能够使用 Python 运行 Ansible 模块。

你应该得到类似这样的输出:

Outputserver1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

如果这是您第一次通过 SSH 连接到这些服务器,系统会要求您确认通过 Ansible 连接的主机的真实性。 出现提示时,键入 yes,然后点击 ENTER 进行确认。

一旦您从主机收到 "pong" 回复,这意味着您已准备好在该服务器上运行 Ansible 命令和剧本。

注意:如果您无法从服务器获得成功的响应,请查看我们的 Ansible 备忘单指南,了解有关如何使用不同连接选项运行 Ansible 命令的更多信息。


第 4 步 — 运行临时命令(可选)

在确认您的 Ansible 控制节点能够与您的主机通信后,您可以开始在您的服务器上运行临时命令和 playbook。

您通常通过 SSH 在远程服务器上执行的任何命令都可以在清单文件中指定的服务器上使用 Ansible 运行。 例如,您可以使用以下命令检查所有服务器上的磁盘使用情况:

ansible all -a "df -h" -u root
Output
server1 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           798M  624K  798M   1% /run
/dev/vda1       155G  2.3G  153G   2% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs           798M     0  798M   0% /run/user/0

server2 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           395M  608K  394M   1% /run
/dev/vda1        78G  2.2G   76G   3% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs           395M     0  395M   0% /run/user/0

...

突出显示的命令 df -h 可以替换为您想要的任何命令。

您还可以通过 ad-hoc 命令执行 Ansible 模块,类似于我们之前使用 ping 模块测试连接所做的操作。 例如,以下是我们如何使用 apt 模块在您库存中的所有服务器上安装最新版本的 vim 的方法:

ansible all -m apt -a "name=vim state=latest" -u root

在运行 Ansible 命令时,您还可以针对单个主机以及组和子组。 例如,这是检查 servers 组中每个主机的 uptime 的方式:

ansible servers -a "uptime" -u root

我们可以通过用冒号分隔来指定多个主机:

ansible server1:server2 -m ping -u root

有关如何使用 Ansible 的更多信息,包括如何执行 playbook 以自动设置服务器,您可以查看我们的 Ansible 参考指南

结论

在本指南中,您已经安装了 Ansible 并设置了一个清单文件以从 Ansible 控制节点执行临时命令。

一旦您确认您能够从中央 Ansible 控制器机器连接和控制您的基础设施,您就可以在这些主机上执行您想要的任何命令或剧本。

有关如何使用 Ansible 的更多信息,请查看我们的 Ansible 备忘单指南