Debian 11安装配置Ansible:从零开始的完整指南

简介

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

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

在本指南中,我们将讨论如何在 Debian 11 服务器上安装 Ansible,并介绍如何使用这个软件的一些基本原理。如果您想获取有关 Ansible 作为配置管理工具的更高层次的概述,请参阅《使用 Ansible 进行配置管理的简介》。

先决条件

要跟随这个教程,您将需要:

  • 一个 Ansible 控制节点: Ansible 控制节点是我们用于通过 SSH 连接和控制 Ansible 主机的机器。您的 Ansible 控制节点可以是您的本地机器,也可以是专门用于运行 Ansible 的服务器,尽管本指南假设您的控制节点是 Debian 11 系统。请确保控制节点具备:
    • 一个具有 sudo 权限的非 root 用户。要进行此设置,您可以遵循我们《Debian 11 初始服务器设置指南》的第 2 步和第 3 步。但是,请注意,如果您使用远程服务器作为 Ansible 控制节点,则应遵循本指南的每一步。这样做将在服务器上使用 ufw 配置防火墙,并为您的非 root 用户配置文件启用外部访问,这两者都有助于保持远程服务器的安全。
    • 与此用户关联的 SSH 密钥对。要进行此设置,您可以遵循我们《如何在 Debian 11 上设置 SSH 密钥》指南的第 1 步。
  • 一个或多个 Ansible 主机: Ansible 主机是您的 Ansible 控制节点配置为自动化的任何机器。本指南假设您的 Ansible 主机是远程 Debian 11 服务器。请确保每个 Ansible 主机具备:
    • Ansible 控制节点的 SSH 公钥已添加到系统用户的 authorized_keys 中。此用户可以是 root 用户,也可以是具有 sudo 权限的普通用户。要进行此设置,您可以遵循我们《如何在 Debian 11 上设置 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 命令和剧本时,您需要使用 -i 参数提供自定义清单文件的路径。使用逐个项目的清单文件是一种好的实践,可以最大程度地减少在错误的服务器组上运行剧本的风险。安装 Ansible 时提供的默认清单文件包含许多示例,您可以将其用作设置清单的参考。

以下示例定义了一个名为 [servers] 的组,其中包含三个不同的服务器,每个服务器都使用自定义别名标识:server1server2server3。请务必用您的 Ansible 主机的 IP 地址替换所标识的 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 可执行文件,而不是最新 Debian 版本上不存在的 /usr/bin/python (Python 2.7)。

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

每当你想要查看你的清单时,你可以运行以下操作:

  1. ansible-inventory –list -y

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

输出

这是文章《如何在Debian 11上安装并配置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连接到这些服务器并运行命令了。

在本指南中,我们将使用Debian的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”,然后按ENTER键确认。

一旦您从主机处接收到“pong”回复,就意味着您已经准备好在该服务器上运行Ansible命令和Playbook了。

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

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

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

您可以使用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命令时,您也可以针对单个主机以及组和子组进行操作。举个例子,以下是您如何检查servers组中每个主机的正常运行时间:

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

我们可以用冒号将多个主机分开来指定。

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

想要了解更多关于如何使用Ansible的信息,包括如何执行Playbook自动化服务器配置,您可以查看我们的Ansible参考指南

结论

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

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

如欲了解如何使用Ansible,可查看我们的Ansible备忘单指南获取更多信息。

bannerAds