Ubuntu 20.04 安装与配置 Ansible 终极指南
引言
配置管理系统旨在简化管理员和运维团队控制大量服务器的流程。它们使您能够从一个中央位置以自动化方式控制许多不同的系统。
虽然有许多适用于Linux系统的热门配置管理工具,比如Chef和Puppet,但是这些工具往往比许多人期望或需要的更加复杂。Ansible是一个很好的替代方案,因为它提供了一种无需在节点上安装特殊软件的架构,利用SSH执行自动化任务并使用YAML文件定义配置细节。
在本指南中,我们将讨论如何在Ubuntu 20.04服务器上安装Ansible,并介绍如何使用这个软件的一些基础知识。如果你想要更高层次的概述关于Ansible作为配置管理工具的话,请参阅《使用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密钥的指南的第1步。
- 一个或多个Ansible主机: Ansible主机是你的Ansible控制节点配置为自动化的任何机器。本指南假设你的Ansible主机是远程Ubuntu 20.04服务器。请确保每个Ansible主机具备:
- Ansible控制节点的SSH公钥已添加到系统用户的
authorized_keys
中。此用户可以是root用户,也可以是具有sudo权限的普通用户。要进行此设置,你可以遵循如何在Ubuntu 20.04上设置SSH密钥的第2步。
- Ansible控制节点的SSH公钥已添加到系统用户的
第一步——安装Ansible
要开始使用Ansible来管理服务器基础架构,您需要在将作为Ansible控制节点的机器上安装Ansible软件。
从控制节点中运行以下命令,将官方项目的PPA(个人软件包存档)包含在系统源列表中。
sudo apt-add-repository ppa:ansible/ansible
当提示时按Enter
键以接受PPA的添加。
接下来,刷新您系统的软件包索引,以便它了解新加入的PPA中可用的软件包。
sudo apt update
在此更新后,您可以使用以下方式安装Ansible软件:
sudo apt install ansible
您的Ansible控制节点现在拥有所有管理主机所需的软件。接下来,我们将讲解如何将您的主机添加到控制节点的清单文件中,以便对它们进行控制。
第二步 – 设置清单文件
清单文件包含关于要使用Ansible进行管理的主机的信息。您可以在清单文件中包含从一个到几百个服务器,并且主机可以分组和分层组织。清单文件还经常用于设置仅对特定主机或组有效的变量,以便在playbooks和模板中使用。一些变量还可以影响playbook的运行方式,比如我们将在下面看到的ansible_python_interpreter
变量。
要编辑默认Ansible清单的内容,请在Ansible控制节点上使用您选择的文本编辑器打开/etc/ansible/hosts
文件。
sudo nano /etc/ansible/hosts
注意: 虽然Ansible通常会在/etc/ansible/hosts
目录下创建默认的清单文件,但你可以自由选择在任何适合你需求的位置创建清单文件。在这种情况下,当运行Ansible命令和playbooks时,你需要使用-i
参数提供自定义清单文件的路径。使用每个项目的清单文件是一个好的做法,可以最小化在错误的服务器组上运行playbook的风险。
Ansible安装提供的默认清单文件包含许多示例,您可以用作设置清单的参考。以下示例定义了一个名为[servers]
的组,在其中有三个不同的服务器,每个服务器都由自定义别名:server1
、server2
和server3
来标识。请确保用您的Ansible主机的IP地址替换下面高亮显示的IP地址。
/etc/ansible/hosts
可用来存储 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 可执行文件,而不是最新版Ubuntu上不存在的 /usr/bin/python
(Python 2.7)。
当你完成后,按下CTRL+X
,然后按Y
和ENTER
键以保存并关闭文件,确认更改。
每当您想要查看您的清单时,您可以运行:
ansible-inventory --list -y
您会看到类似于这样的输出,但其中包含根据您的清单文件定义的您自己的服务器基础设施。
输出
这是文章《如何在Ubuntu 20.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控制节点上运行:
- 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命令和Playbook了。
注意:如果您无法从服务器上成功获取到响应,请查阅我们的Ansible备忘单指南,获取有关如何使用不同连接选项运行Ansible命令的更多信息。
第四步—运行临时命令(可选)
在确认您的Ansible控制节点能够与您的主机通信后,您可以开始在服务器上运行临时命令和Playbook。
在您的清单文件中指定的服务器上,可以使用Ansible运行任何您通常通过SSH在远程服务器上执行的命令。例如,您可以使用以下命令检查所有服务器的磁盘使用情况。
- 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
:
- ansible all -m apt -a "name=vim state=latest" -u root
当运行Ansible命令时,您还可以针对单个主机以及群组和子组进行定位。例如,以下是您如何检查servers
组中每个主机的正常运行时间:
- ansible servers -a "uptime" -u root
我们可以通过用冒号分隔它们来指定多个主机。
- ansible server1:server2 -m ping -u root
关于如何使用Ansible的更多信息,包括如何执行Playbook以自动化服务器设置,您可以查看我们的Ansible参考指南。
结论
在本指南中,您已经安装了Ansible并设置了一个清单文件,以便从Ansible控制节点执行即席命令。
一旦您确认您可以从中央的Ansible控制机器连接和控制您的基础设施,您可以在这些主机上执行任何您想要的命令或Playbook。
想要了解如何使用Ansible的更多信息,请查看我们的Ansible速查指南。