如何在Ubuntu 22.04上安装和配置Ansible

引言

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

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

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

先决条件

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

  • One Ansible Control Node: The Ansible control node is the machine we’ll use to connect to and control the Ansible hosts over SSH. Your Ansible control node can either be your local machine or a server dedicated to running Ansible, though this guide assumes your control node is an Ubuntu 22.04 system. Make sure the control node has:A non-root user with sudo privileges. To set this up, you can follow Steps 2 and 3 of our Initial Server Setup Guide for Ubuntu 22.04. However, please note that if you’re using a remote server as your Ansible Control node, you should follow every step of this guide. Doing so will configure a firewall on the server with ufw and enable external access to your non-root user profile, both of which will help keep the remote server secure.
    An SSH keypair associated with this user. To set this up, you can follow Step 1 of our guide on How to Set Up SSH Keys on Ubuntu 22.04.
  • One or more Ansible Hosts: An Ansible host is any machine that your Ansible control node is configured to automate. This guide assumes your Ansible hosts are remote Ubuntu 22.04 servers. Make sure each Ansible host has:The Ansible control node’s SSH public key added to the authorized_keys of a system user. This user can be either root or a regular user with sudo privileges. To set this up, you can follow Step 2 of How to Set Up SSH Keys on Ubuntu 22.04.

第一步 — 安装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

 

Note

注意:虽然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

所有: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

 

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

Output

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模块将测试以下内容:

  • if hosts are accessible;
  • if you have valid SSH credentials;
  • if hosts are able to run Ansible modules using Python.

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

Output

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

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

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

Note

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

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

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

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

  1. 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。

你也可以通过临时命令执行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备忘单指南。

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds