Ubuntu 22.04安装配置Ansible完整指南:新手友好详细教程

引言

配置管理系统旨在简化对大量服务器的控制流程,为管理员和运维团队服务。它们允许您从一个集中位置自动控制多个不同的系统。

尽管有许多适用于Linux系统的流行配置管理工具,比如Chef和Puppet,但这些工具对很多人来说可能比较复杂,也不是每个人都需要。Ansible是一个很好的选择,因为它提供了一种不需要在节点上安装特殊软件的架构,使用SSH执行自动化任务,并使用YAML文件定义配置细节。

在本指南中,我们将讨论如何在Ubuntu 22.04服务器上安装Ansible,并介绍如何使用此软件的一些基本知识。有关Ansible作为配置管理工具的高级概述,请参考《使用Ansible进行配置管理的简介》。

先决条件

为了跟随本教程,您需要:

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

第一步 — 安装Ansible

要开始使用Ansible来管理服务器基础架构,您需要在将充当Ansible控制节点的计算机上安装Ansible软件。

从您的控制节点上运行以下命令,将官方项目的PPA(个人软件包存档)包括在您系统的资源列表中:

  1. sudo apt-add-repository ppa:ansible/ansible

在提示时按下回车键,以接受PPA的添加。

接下来,刷新您系统的软件包索引,以使其了解新加入的 PPA 中可用的软件包。

  1. sudo apt update

根据此更新,您可以使用以下方式安装 Ansible 软件:

  1. sudo apt install ansible

您的Ansible控制节点现在已经拥有了管理主机所需的所有软件。接下来,我们将讲解如何将主机添加到控制节点的清单文件中,以便控制节点可以管理它们。

第二步 – 设置库存文件

清单文件包含了使用Ansible管理的主机的信息。您可以在清单文件中包含一台到数百台服务器,并且主机可以按组和子组进行组织。清单文件通常还用于设置仅对特定主机或组有效的变量,以便在剧本和模板中使用。某些变量还可以影响剧本的运行方式,比如我们将在下一步中看到的ansible_python_interpreter变量。

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

  1. sudo nano /etc/ansible/hosts

注意:

虽然Ansible通常在/etc/ansible/hosts下创建默认清单文件,但您可以自由地在任何位置创建适合您需求的清单文件。在这种情况下,在运行Ansible命令和playbooks时,您需要使用-i参数提供自定义清单文件的路径。使用针对每个项目的清单文件是一个很好的做法,可以最小化在错误服务器组上运行playbook的风险。安装Ansible时提供的默认清单文件包含许多示例,您可以将其作为设置清单的参考。

下面的示例定义了一个名为[servers]的组,其中包含三个不同的服务器,每个服务器都由自定义别名标识:server1、server2和server3。请确保将示例中突出显示的IP地址替换为您的Ansible主机的IP地址。

/etc/ansible/hosts可以进行以下天然的中文释义:主机清单文件

[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可执行文件,而不是最近的Ubuntu版本上没有的/usr/bin/python(Python 2.7)。

当你完成后,按下CTRL+X然后按Y关闭文件,并按下ENTER键确认你的更改。

每次你想要检查库存时,你可以执行以下操作:

  1. ansible-inventory --list -y

你会看到类似的输出,但其中包含你在清单文件中定义的自己的服务器基础设施。

输出

这是文章《如何在Ubuntu 22.04上安装和配置Ansible》的第2部分(共2部分)。

all:
  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主机连接所需的一切。

第三步——测试连接

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

对于本指南,我们将使用Ubuntu的root账户,因为通常新创建的服务器上只有默认的这一个账户可用。如果您的Ansible主机已经创建了普通的sudo用户,请优先使用该账户。

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

从您的本地计算机或Ansible控制节点运行:

  1. ansible all -m ping -u root

这个命令将使用Ansible内置的ping模块,在连接为root的情况下,对默认清单中的所有节点进行连通性测试。ping模块将测试以下内容:

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

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

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

如果这是你第一次通过SSH连接到这些服务器,你将被要求通过Ansible来确认你连接的主机的真实性。在提示时,输入yes然后按下回车键确认。

一旦你从主机收到一个”pong”回复,就意味着你可以在该服务器上运行Ansible命令和playbooks了。

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

第四步——运行即席命令(可选)

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

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

  1. ansible all -a "df -h" -u root
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

你也可以通过临时命令执行Ansible模块,就像我们之前使用ping模块来测试连接一样。例如,下面是我们如何使用apt模块在清单中的所有服务器上安装最新版本的vim:

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

当运行Ansible命令时,您还可以针对单个主机、分组和子分组进行目标定位。例如,您可以使用以下方式来检查服务器组中每台主机的正常运行时间:

  1. ansible servers -a "uptime" -u root

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

  1. ansible server1:server2 -m ping -u root

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

结论

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

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

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

bannerAds