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 来自动化您的任务。