如何在Debian 11上安装并配置Ansible
简介 jiè)
配置管理系统旨在简化对大量服务器进行控制的过程,供管理员和运维团队使用。它们允许您从一个中央位置自动控制许多不同的系统。
虽然有许多流行的配置管理工具可用于Linux系统,例如Chef和Puppet,但这些通常比许多人所需的更复杂。Ansible是这些选项的一个很好的替代方案,因为它提供了一种架构,不需要在节点上安装特殊软件,使用SSH来执行自动化任务,并使用YAML文件来定义配置详细信息。
在本指南中,我们将讨论如何在Debian 11服务器上安装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 a Debian 11 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 Debian 11. 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 Debian 11. - 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 Debian 11 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 Debian 11.
第一步 – 安装Ansible
若想使用Ansible来管理服务器基础结构,首先需要在作为Ansible控制节点的机器上安装Ansible软件。
从您的控制节点上运行以下命令,将官方项目的PPA(个人软件包归档)包含在您系统的源列表中:
- sudo apt-add-repository ppa:ansible/ansible
按照提示,当提示时按回车键接受PPA的添加。
接下来,刷新您系统的软件包索引,使其能够了解新添加的PPA中可用的软件包。
- sudo apt update
根据此更新,您可以使用以下方式安装Ansible软件:
- sudo apt install ansible
你的Ansible控制节点现在拥有管理主机所需的所有软件。接下来,我们将解释如何将主机添加到控制节点的清单文件中,以便它可以对它们进行控制。
第二步-设置库存文件
清单文件包含关于您将使用Ansible管理的主机的信息。您可以在清单文件中包含一到数百个服务器,并且可以将主机组织成组和子组。清单文件通常还用于设置仅对特定主机或组有效的变量,以便在播放书和模板中使用。某些变量还可以影响播放书的运行方式,例如我们稍后将看到的ansible_python_interpreter变量。
要编辑默认的Ansible清单内容,请在Ansible控制节点上使用您选择的文本编辑器打开/etc/ansible/hosts文件。
- sudo nano /etc/ansible/hosts
Note
安装Ansible时提供的默认清单文件包含许多示例,您可以将其用作设置清单的参考。以下示例定义了一个名为[servers]的组,其中包含三个不同的服务器,每个服务器都使用自定义别名标识: server1、server2和server3。请务必用您的Ansible主机的IP地址替换所标识的IP地址。
[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可执行文件,而不是最新Debian版本上不存在的/usr/bin/python(Python 2.7)。
当你完成后,按下CTRL+X,然后按Y和ENTER以保存和关闭文件,确认你的更改。
每当你想要查看你的库存时,你可以运行以下操作:
- ansible-inventory –list -y
你将会看到类似这样的输出,但其中包含了你在清单文件中定义的自己的服务器基础设施。
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根帐户,因为在新创建的服务器上,通常只有该帐户可用。如果您的Ansible主机已经创建了一个常规的sudo用户,我们建议您使用该帐户。
你可以使用-u参数来指定远程系统用户。如果未提供,则Ansible将尝试连接控制节点上的当前系统用户。
从您的本地机器或Ansible控制节点上运行:
- 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.
你应该得到类似这样的输出。
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了。
Note
第四步——运行临时命令(可选)
在确认您的Ansible控制节点能够与主机进行通信后,您可以开始在服务器上运行即席命令和playbooks。
您可以使用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命令时,您也可以针对单个主机以及组和子组进行操作。举个例子,以下是您如何检查服务器组中每个主机的正常运行时间:
- ansible servers -a “uptime“ -u root
我们可以用冒号将多个主机分开来指定。
- ansible server1:server2 -m ping -u root
想要了解更多关于如何使用Ansible的信息,包括如何执行playbook自动化服务器配置,您可以查看我们的Ansible参考指南。
结论
在这个指南中,您已经安装了Ansible并设置了一个清单文件,以便从Ansible控制节点执行即时命令。
一旦您确认能够从中央Ansible控制器机器连接和控制您的基础设施,您就可以在这些主机上执行任何命令或剧本。
如欲了解如何使用Ansible,可查看我们的Ansible备忘单指南获取更多信息。