如果您是一名系统管理员,拥有一种一致的方式来管理您正在使用的所有服务器和计算机是非常重要的。配置管理系统可以在很大程度上简化这一过程。它们可以从一个中心位置高效地管理所有系统。
在 Linux 上,有多种配置管理系统可用。例如,Puppet, Chef, Ansible, Bcfg2, Juju, CFEngine 等。虽然像 Puppet 和 Chef 这样的工具往往更复杂、更高级,但 Ansible 提供了简单性和易用性。您无需在节点上安装任何额外的客户端软件即可使 Ansible 工作。相反,Ansible 使用 SSH 来管理系统并实现自动化。Ansible 是一款开源软件。它还具有高度的可扩展性、一致性和可靠性。
本指南 演示了如何在 Ubuntu 20.04.
Ubuntu 上的 Ansible
Ansible 可以实现三种类型的自动化:
-
资源配置(Provisioning): 它可以根据基础设施的需求建立各种服务器。
-
配置管理: 它可以对服务器进行各种配置更改。例如,启动和停止服务、安装应用程序和更新、实施安全策略等。
-
应用程序部署: 它通过将内部开发的应用程序自动部署到生产系统,使 DevOps 变得更加容易。
Ansible 几乎可以在任何 IT 环境中完美运行 – 无论是托管服务器还是传统服务器、虚拟化平台还是云端。它还支持管理各种系统,如数据库、网络、防火墙、存储设备等。 CloudSigma 也支持 Ansible 用于我们的云基础设施。
前提条件
对于本指南,我们需要几台机器:
-
控制节点: 控制节点是连接到所有主机节点并发布任务以及管理系统各个方面的中心节点。控制节点可以是任何设备 – 本地机器或远程服务器。
-
主机节点: Ansible 主机是 Ansible 控制节点可以进行自动化管理的机器。
正如指南标题所示,所有这些机器都应该配置有包含最新软件包的 Ubuntu 20.04。这里有一个关于 设置 Ubuntu 服务器 的快速指南。因为 Ansible 使用 SSH 连接到机器,所以所有主机节点都必须正确设置与控制节点的 SSH 密钥。确保所有主机节点都已将控制节点的 SSH 公钥添加到 authentication_keys 文件中。按照我们的教程来学习 如何生成 SSH 密钥并将其添加到 Linux 服务器.
步骤 1:安装 Ansible
对于 Ubuntu,不需要任何额外的软件包或仓库配置。Ansible 可以直接从官方 Ubuntu 软件包服务器获取。执行任何系统级更改都需要管理员权限 – root 用户或具有 sudo 特权的非 root 用户。 sudoers 文件 管理用户和组的 sudo 权限。
首先,我们将在用作控制节点的计算机上安装 Ansible。要在控制节点上安装 Ansible,请运行以下命令:
|
1 |
sudo apt update |

|
1 |
sudo apt install ansible -y |

如果您打算使用密码作为 SSH 身份验证机制,那么您需要安装软件包 sshpass 已安装:
|
1 |
sudo apt install sshpass |

步骤 2:配置 Inventory 文件
在 Ansible 中,inventory 文件包含有关所有 主机 的信息,Ansible 将管理这些主机。它可以是注册在 中的数十或数百台服务器inventory 文件。服务器也可以分为组和子组。通常, inventory 文件 用于建立仅对特定 有效的变量主机 或组。这是编写 playbook 和模板时的一项有用技术。某些变量还可以影响 playbook 的运行方式。
Ansible 附带一个默认的 inventory 文件。首先,在文本编辑器中打开该文件:
|
1 |
sudo vim /etc/ansible/hosts |

默认情况下,清单文件包含各种示例以供参考。这里有一个名为 servers 的组的示例,其中包含三台不同的服务器。变量 ansible_python_interpreter 为清单中包含的所有 主机 定义了 Python 解释器。通过指令 ansible_user,我们可以声明 Ansible 将连接到的用户帐户:
|
1 2 3 4 5 6 7 |
[servers] server_1 ansible_host=<server_1_ip> ansible_user=<server_1_username> server_2 ansible_host=<server_2_ip> ansible_user=<server_2_username> server_3 ansible_host=<server_3_ip> ansible_user=<server_3_username> [all:vars] ansible_python_interpreter=/usr/bin/python3 |

接下来,保存文件并关闭编辑器。要检查清单,请运行以下命令:
|
1 |
ansible-inventory --list -y |
输出应该类似于以下内容:

步骤 3:连接测试
配置清单文件后,我们需要测试 Ansible 是否可以通过 SSH 连接到这些服务器。我们可以通过简单地 ping 所有主机节点来实现。在 控制 节点上,ping 所有的 主机 节点:
|
1 |
ansible all -m ping |
该 ping 模块 检查以下事项:
-
主机可达性
-
SSH 凭据的有效性
-
主机可以使用 Python 运行 Ansible 模块
输出应该类似于以下内容:

如果来自特定节点的回复是 pong,这意味着该节点已准备好在服务器上运行 Ansible 命令和剧本。
步骤 4:运行临时命令
这是一个可选步骤。然而,它对于验证 Ansible 到远程服务器的完整功能非常有用。本节也可以作为其他 Ansible 使用和配置的基本介绍。一旦我们确认了与节点的连接,我们就可以开始运行临时命令和剧本。您通常在远程服务器上运行的任何命令都可以通过 Ansible 在所有服务器上运行。
在这里,运行以下命令。它将同时检查所有节点上的磁盘使用情况:
|
1 |
ansible all -a "df -h" |

我们还可以使用临时命令功能执行各种 Ansible 模块,就像我们执行 ping 模块进行测试一样。例如, apt 模块适用于 Ubuntu 上的 APT 包管理器。它可以管理远程 Ubuntu 节点上的软件包。请注意,进行系统级更改需要 root 权限。远程节点必须允许 root 登录,或者用户必须具有执行管理任务的权限。
在以下示例中,Ansible 在所有主机节点上安装 Nginx:
|
1 |
ansible all -m apt -a "name=nginx state=latest" -u root |
如果只想在单个服务器上运行命令呢?我们将使用服务器别名(在清单文件中分配)来指定服务器:
|
1 |
ansible server_1 -a "df -h" -u cloudsigma |

我们还可以指定多个服务器。用冒号作为分隔符声明每个目标服务器的别名:
|
1 |
ansible server_1:server_2:server_3 -a "df -h" -u cloudsigma |

结语
在本指南中,我们向您展示了安装 Ansible 并配置清单文件以从 Ansible 控制节点运行临时命令的逐步方法。配置完成后,控制节点可以执行您希望在主机上运行的任何命令或剧本。
祝您使用愉快!
评论
暂无评论。发表第一条评论吧。