如何在 CentOS 8 / RHEL 8 上安装和配置 Ansible

Ansible 是一种用于类 Unix 和 Microsoft Windows 操作系统的开源软件配置和配置管理工具。

与 Puppet、Chef 和 CFEngine 不同,服务器软件安装在一台机器上,客户端机器通过代理软件进行管理。 其中 Ansible 是通过 SSH 控制节点(Ansible 服务器)来管理节点的,因此不会有任何代理软件运行在托管节点(客户端服务器)机器上。

Ansible 可以使用 SSH 在数百个节点上进行软件的部署、配置管理,整个操作通常只需一个命令即可执行 能听懂的. 但是,在某些情况下,您可能需要执行多个命令进行部署。

本指南将帮助您在 CentOS 8 / RHEL 8 上安装 Ansible.

环境

主机名 IP地址 目的
server.itzgeek.local 192.168.0.10 CentOS 8 / RHEL 8 控制机
node1.itzgeek.local 192.168.0.20 CentOS 8 受管节点 1
node2.itzgeek.local 192.168.0.30 CentOS 7 受管节点 2

在 CentOS 8 / RHEL 8 上安装 Ansible

设置控制节点

要安装 Ansible,我们必须分别在 CentOS 8 和 RHEL 8 上启用 EPEL 和 Ansible 存储库。

### CentOS 8 ###  yum install -y epel-release  ### RHEL 8 ###  subscription-manager repos --enable ansible-2.9-for-rhel-8-x86_64-rpms 

安装 Ansible 百胜 命令。

yum install -y ansible 

安装 Ansible 后,通过执行以下命令验证 Ansible 的版本。

ansible --version

输出:

ansible 2.8.5   config file = /etc/ansible/ansible.cfg   configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']   ansible python module location = /usr/lib/python3.6/site-packages/ansible   executable location = /usr/bin/ansible   python version = 3.6.8 (default, May 21 2019, 23:51:36) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)] 

设置受管节点

客户端机器至少应该有 Python 2(版本 2.6 或更高版本)或 Python 3(版本 3.5 或更高版本)。

### CentOS 8 / RHEL 8 ###  yum install -y platform-python  ### CentOS 7 / RHEL 7 ###  yum install -y python 

SELinux

如果您在受管节点上启用了 SELinux,则必须在节点上安装以下软件包,然后才能在 Ansible 中使用任何与副本/文件/模板相关的功能。

### CentOS 8 / RHEL 8 ###  yum install -y python3-libselinux  ### CentOS 7 / RHEL 7 ###  yum install -y libselinux-python

SSH 认证

如前所述,Ansible 使用原生 OpenSSH 进行远程通信。 Ansible 支持两者 无密码密码 在受管节点上执行命令的身份验证。

在这里,对于这个演示,我在 ansible 控制节点 (root) 和托管节点 (root) 之间使用了无密码通信。 但是,我将向您展示如何将 Ansible 与密码身份验证结合使用。

SSH 密钥认证(无密码认证)

对于 ssh 身份验证,默认情况下,它使用 ssh 密钥(无密码身份验证)与远程机器进行身份验证。

: 如何在 CentOS 8 / RHEL 8 上设置 SSH 无密码登录

: 如何在 CentOS 7 / RHEL 7 上设置 SSH 无密码登录

如您所知,您在节点上执行的软件供应或配置更改需要 root 权限或 root 等效权限(sudo)。 因此,为方便起见,在 Ansible Server 的 root 用户和节点的 root 用户之间设置无密码通信。

密码认证

通过提供选项,也可以在需要的地方使用密码身份验证 – 询问通行证. 此选项需要 sshpass 到控制机器。

yum install -y sshpass  

创建 Ansible 清单

/etc/ansible/hosts 文件保存 Ansible 将通过 SSH/Winrm (Windows) 连接到的远程主机清单以管理它们。 此刻,我们将只看到如何管理远程 Linux 节点的配置。

编辑库存文件。

vi /etc/ansible/hosts 

将一个或多个远程系统的 IP 地址或主机名放入其中。 您可以将服务器与 [GROUP_NAME]. 在这里,我已将两台机器添加到 演示服务器 团体。

组用于对特定用途的系统进行分类。 如果不指定任何组,它们将充当未分组的主机。

[demoservers] 192.168.0.20 192.168.0.30

检查 Ansible 连接

让我们使用来自控制机器的 ping(模块)来检查节点的连通性。 为此,我们将使用命令 能听懂的 有选项 -m (加载模块)和 全部 (所有服务器)或 演示服务器 (一组节点)。

此 ping 模块通常用于对 Ansible 连接问题进行故障排除。

# All servers - If you use passwordless authentication. Current logged in user on Ansible server and remote node's user are same  ansible -m ping all  # All servers - If you use passwordless authentication and the remote user is different from logged in user on Ansible server  ansible -m ping -u raj all  # All servers - If you use password authentication and the remote user is different from logged in user on Ansible server  ansible -m ping all -u raj --ask-pass  # Only demoservers group - If you use passwordless authentication. Current logged in user on Ansible server and remote node's user are same  ansible -m ping demoservers 

输出:

192.168.1.20 | SUCCESS => {     "changed": false,     "ping": "pong" } 192.168.1.30 | SUCCESS => {     "changed": false,     "ping": "pong" }

在上面的例子中,我们已经看到了如何使用 ping 模块 能听懂的 命令使用无密码和密码身份验证 ping 所有或一组远程主机。

以同样的方式,我们可以使用各种模块 能听懂的 命令。 您可以找到可用的模块 这里.

在节点上执行命令

这一次,我们将使用 命令 模块与 能听懂的 命令获取远程机器信息。

以下命令假设您在控制节点和受管节点之间进行无密码通信。 我正在使用 演示服务器 组来执行命令。

检查主机名

在我们的第一个例子中,我们将执行 主机名 命令与 命令 模块以一次性获取远程节点的主机名。

ansible -m command -a "hostname" demoservers

输出:

192.168.1.30 | SUCCESS | rc=0 >> node2.itzgeek.local  192.168.1.20 | SUCCESS | rc=0 >> node1.itzgeek.local 

检查正常运行时间

检查节点的正常运行时间。

 ansible -m command -a "uptime" demoservers

输出:

192.168.1.30 | SUCCESS | rc=0 >>  16:36:45 up 56 min,  3 users,  load average: 0.00, 0.00, 0.00  192.168.1.20 | SUCCESS | rc=0 >>  16:36:45 up  1:09,  2 users,  load average: 0.05, 0.04, 0.05

读取远程文件

您还可以查看特定文件的内容。

ansible -m command -a "cat /etc/hosts" demoservers

输出:

192.168.1.30 | SUCCESS | rc=0 >> # This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients to the # internal DNS stub resolver of systemd-resolved. This file lists all # configured search domains. # # Run "systemd-resolve --status" to see details about the uplink DNS servers # currently in use. # # Third party programs must not access this file directly, but only through the # symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way, # replace this symlink by a static file or a different symlink. # # See man:systemd-resolved.service(8) for details about the supported modes of # operation for /etc/resolv.conf.  nameserver 127.0.0.53  192.168.1.20 | SUCCESS | rc=0 >> # Generated by NetworkManager search itzgeek.local nameserver 8.8.8.8 nameserver 192.168.1.1 

重定向文件输出

您还可以使用重定向将输出(在 Ansible 服务器上)保存到任何文件。

ansible -m command -a "cat /etc/resolv.conf" demoservers > /tmp/ouput_file  cat /tmp/ouput_file

在节点上进行配置更改

我们可以用 行内文件 模块来编辑远程节点上的文件。 例如,要添加其他名称服务器,我们可以使用以下命令。

ansible -m lineinfile -a "path=/etc/resolv.conf line=nameserver 8.8.4.4" demoservers

您可以使用以下命令验证更改。

ansible -m command -a "cat /etc/resolv.conf | grep -i nameserver" demoservers

结论

就这样。 您现在已经在 CentOS 8 / RHEL 8 上成功安装了 Ansible. 您可以继续创建 Ansible playbook 来自动化您的任务。