如何在 Linux 上安装和测试 Ansible
在此页
- 在 CentOS 7 上安装 Ansible:
- 在 CentOS 8 上安装 Ansible:
- 在 Ubuntu 上安装 Ansible:
- 在 CentOS、Debian 和 Ubuntu 上使用 Python PIP 安装 Ansible:
- 配置 Ansible 控制器主机:
- 结论:
Ansible 是一种广泛使用的配置管理工具,用 Python 语言编写,有助于同时配置单台或多台机器。 Ansible 可用于执行以下任务
- 从头开始配置单个或多个节点
- 部署
- 配置更改
- 打补丁
- 服务管理
- 还有更多
Ansible 因其简单性而被广泛使用。 Ansible 代码也是用 YAML 语言编写的,它不需要在远程机器上安装代理。 Ansible 使用端口 22 (SSH) 连接到远程机器并进行必要的更改。
任何可以在 22 端口上连接到远程机器的机器都可以成为控制节点。控制节点是您可以安装 Ansible 的地方,受管节点由控制节点管理。
让我们看一下 Ansible 在控制器节点上的安装。
在 CentOS 7 上安装 Ansible:
由于 Python 是安装 Ansible 的唯一先决条件,因此让我们通过执行以下命令来安装 Python。
$sudo yum install python3 -y
要在 CentOS 7 上安装 Ansible,首先确保安装了 CentOS 7 EPEL 存储库。执行以下命令安装 epel 存储库。
$sudo yum install epel-release
通过执行以下更新命令更新系统包索引。
$sudo yum update -y
安装存储库后,使用 yum 包管理器安装 Ansible。执行下面提到的命令来安装 Ansible。
$sudo yum install ansible -y
验证 Ansible 是否安装正确及其版本。
$ansible -v
在 CentOS 8 上安装 Ansible:
让我们看看 CentOS 8 的安装步骤。让我们在 CentOS 8 上安装 python。
$sudo dnf install python3
一旦安装了 python,让我们通过执行以下命令来安装 EPEL 存储库。
$sudo dnf install epel-release -y
通过执行以下更新命令来更新系统包索引。
$sudo dnf update -y
我们现在准备安装 Ansible。执行以下命令来安装 Ansible。
$sudo dnf install ansible -y
验证 Ansible 是否安装正确及其版本。
$ansible -v
在 Ubuntu 上安装 Ansible:
Python 是当今大多数 Linux 发行版中的默认包。如果你没有安装 python,执行下面的命令来安装 python 包。
$sudo apt-get install python3
要在 Ubuntu 中安装 Ansible,让我们首先通过执行以下命令来安装存储库。
$sudo apt-add-repository ppa:ansible/ansible
通过执行以下更新命令更新系统包索引。
$sudo apt-get update -y
现在,安装 Ansible。
$sudo apt-get install -y ansible
验证 Ansible 是否安装正确及其版本。
$ansible -v
在 CentOS、Debian 和 Ubuntu 上使用 Python PIP 安装 Ansible:
无论您使用什么操作系统,您都可以使用 python 包安装程序安装 Ansible。让我们执行以下命令来安装 python3-pip。
对于 CentOS 7 及以下版本:
$sudo yum install python3 python3-pip -y
对于 CentOS 8:
$sudo dnf install python3 python3-pip -y
对于 Ubuntu 和 Debian:
$sudo apt-get install python3 python3-pip
由于我们安装了 python 和 pip,让我们在任何操作系统上执行以下命令来安装 Ansible。
$sudo pip3 install ansible
验证 Ansible 是否安装正确及其版本。
$ansible -v
配置 Ansible 控制器主机:
在我们开始与其他节点通信之前,我们需要先设置 \hosts\ 文件。该文件将包含受管节点的所有 IP 或主机名。
注意:并不总是需要使用主机文件来连接到被管节点。但是每次,我们都需要在执行每个命令时使用托管节点服务器 IP 或主机名。
通过执行以下命令创建具有 root 权限的文件(如果尚不存在):
$sudo touch /etc/ansible/hosts
在写入文件之前,让我们看一下并了解示例主机文件:
[group_name]
alias ansible_ssh_host=your_node_server_ip
主机文件应遵循上述语法。让我们看看每个参数。
[group_name]:此参数将创建一个组。 group_name 参数下的所有受管节点 IP 地址或主机名将属于同一组。例如,如果我们的基础架构中有多个 Web 服务器,我们可以在此处添加所有 IP 地址或托管节点的主机名。
alias:该参数用于给被管节点服务器一个别名,以标识被管节点服务器。例如,如果我们的基础架构中有多个 Web 服务器,我们可以给 host1、host2、host3 作为别名。给定别名的主要好处是,当我们将执行 Ansible 命令来更改单个服务器的配置时,我们可以使用别名来识别并在服务器上执行所需的任务。
ansible_ssh_host=your_node_server_ip:此参数会将别名指向托管节点 IP 地址或主机名。
我们将使用 CentOS 8 作为 Ansible 的受控节点。如上所述,Ansible 使用远程主机的 22 端口进行连接。
我们假设我们的 CentOS 受管节点服务器 IP 地址为 192.168.0.2、192.168.0.3 和 192.168.0.4。
为了允许 Ansible 控制器节点与托管节点通信,我们必须确认托管节点可以在端口 22 上访问,这是一个 SSH 端口。执行以下命令以在控制器的所有三个受管节点上一一确认连接。
$ssh 192.168.0.2
$ssh 192.168.0.3
$ssh 192.168.0.4
系统将提示您输入所有节点的根用户的密码。如果您在 Ansible 控制器和受管节点之间配置了无密码身份验证,则 Ansible 可以非常顺利地工作。使用 Ansible 命令中的不同参数,密码验证也可以工作。
由于我们已经在 Ansible 控制器和托管节点之间配置了 ssh 连接,让我们配置主机文件以连接到所有托管节点。如前所述,我们可以在一个组中添加多个节点服务器别名。在这种情况下,让我们添加所有三个节点并分别指定别名 host1、host2 和 host3。添加所有托管节点详细信息后,我们的主机文件应如下所示。执行以下命令来编辑我们之前创建的主机文件。
通过执行以下命令以 root 权限打开文件:
$sudo vi /etc/ansible/hosts
让我们在主机文件中添加下面提到的配置。
[node_servers]
host1 ansible_ssh_host=192.168.0.2
host2 ansible_ssh_host=192.168.0.3
host3 ansible_ssh_host=192.168.0.4
在这里,我们在名为 node_servers 的组中添加了所有托管节点 IP 和别名。
现在让我们尝试从 Ansible 控制器连接到托管节点。
$ansible -m ping node_servers
上面的命令使用模块 ping 连接到我们在上面的主机文件中定义的“node_servers”组。
您可能会因各种原因遇到错误。
- 默认情况下,如果您未提供用户名,Ansible 将尝试使用您当前的用户名连接到托管节点。如果节点服务器上不存在该用户,您将收到以下错误。
- 如果 ssh 端口 22 未打开以连接受管节点。 (如前所述,Ansible 连接在 ssh 端口上)
- 如果主机文件中的 IP 不正确。
如果上述任何条件失败,您将遇到以下错误。
host1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host2 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host3 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
让我们特别告诉 Ansible 它应该使用 james 用户连接到 \node_servers 组中的托管节点。创建 group_vars 目录,如下所述。
$sudo mkdir /etc/ansible/group_vars
此目录中的文件专门用于配置我们可以在 Ansible 剧本中使用的变量。
让我们通过执行以下命令为我们的设置创建一个变量文件:
$sudo vim /etc/ansible/group_vars/node_servers.yml
将以下代码添加到文件中:
---
ansible_ssh_user: james
YML 文件的第一行总是以 \---\ 开头。完成后让我们保存并关闭此文件。现在 Ansible 将始终为 node_servers 组使用 james 用户,而不管您用于运行命令的当前用户是什么。
检查受管节点连接:
现在我们已经设置了主机和足够的配置详细信息以允许我们成功连接到我们的托管节点,我们可以尝试我们之前运行的相同命令。
$ansible -m ping servers
Ansible 将返回如下输出:
host1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
主机3 | SUCCESS => { changed: false, ping: pong}
这是确保 Ansible 与其托管节点建立连接的基本测试。
结论:
被管节点无需使用CentOS操作系统。您可以使用我们在上面为 CentOS、RedHat、Ubuntu 和任何其他 Linux 发行版使用的相同测试配置。