Ansible 环境配置(基于 RHEL 9)

Ansible 环境配置(基于 RHEL 9)

一、Ansible 概述

1. 核心定义与功能

  • 定位:开源自动化运维工具,基于 Python 开发,采用无代理架构,通过 SSH/WinRM 实现远程主机管理。
  • 核心功能:批量系统配置、程序部署、命令执行、配置管理、工作流 / 网络自动化,支持应用全生命周期编排。
  • 优势:跨平台无代理、YAML 剧本易读、支持版本控制、动态清单、可与 Jenkins / 红帽卫星等工具集成。

2. 核心组成结构

|--------------------|-------------------------------|
| 组件 | 功能描述 |
| Core Modules | Ansible 自带模块,覆盖系统管理、软件部署等基础场景 |
| Custom Modules | 用户自定义扩展模块,补充核心模块功能缺口 |
| Plugins | 扩展功能(如日志记录、邮件通知) |
| Playbooks | YAML 格式剧本,定义主机需执行的任务与模块 |
| Connection Plugins | 连接远程主机的插件,默认使用 SSH |
| Host Inventory | 主机清单,记录受管主机的 IP、端口、密码等信息 |

3. 执行模式

  • Ad-hoc(点对点模式):单条命令快速执行(如批量 ping 主机、安装软件)。
  • Playbook(剧本模式):通过 YAML 文件定义复杂任务流,为主要管理方式。

二、环境部署前置准备(RHEL 9)

1. 基础环境规划

|-----------|--------------------------------------------------------------------------|----------------------------------------------------|---------------------|
| 主机角色 | 主机名 | IP 地址 | 用途 |
| 控制节点(树主机) | ansible.example.com | 192.168.100.100(与物理机通信)、192.168.122.1(与 KVM 虚拟机通信) | 部署 Ansible,管理所有被控节点 |
| 被控节点 | master.example.com | 192.168.122.100 | 主被控节点,用于批量分发配置 |
| 被控节点 | node1.example.com | 192.168.122.10 | 克隆节点 1 |
| 被控节点 | node2.example.com | 192.168.122.20 | 克隆节点 2 |
| 被控节点 | node3.example.com | 192.168.122.30 | 克隆节点 3 |
| 被控节点 | node4.example.com | 192.168.122.40 | 克隆节点 4 |
| 被控节点 | node5.example.com | 192.168.122.50 | 克隆节点 5 |

2. 控制节点(ansible.example.com)基础配置

(1)配置 IP 与主机名
复制代码
# 1. 配置网卡 IP(192.168.100.100/24)

nmcli connection modify ens160 ipv4.addresses 192.168.100.100/24 ipv4.gateway 192.168.100.254 ipv4.dns 114.114.114.114 ipv4.method manual connection.autoconnect yes

nmcli connection up ens160

# 2. 修改主机名

hostnamectl hostname ansible.example.com
(2)配置本地 YUM 源
  • 创建 YUM 配置文件:

    vim /etc/yum.repos.d/server.repo

  • 写入以下内容(RHEL 9 分 BaseOS 与 AppStream 仓库):

    [aa]

    name=aa1

    baseurl=file:///mnt/BaseOS

    enabled=1

    gpgcheck=0

    [bb]

    name=bb1

    baseurl=file:///mnt/AppStream

    enabled=1

    gpgcheck=0

  • 挂载系统镜像到 /mnt:

    mount /dev/cdrom /mnt # 若需开机自动挂载,可添加到 /etc/fstab

(3)安装 KVM 相关工具(用于创建被控节点虚拟机)
复制代码
# 安装虚拟化工具组

yum -y group install "Virtualization Client" "Virtualization Hypervisor" "Virtualization Tools"

# 重启并设置 libvirtd 服务开机自启

systemctl restart libvirtd

systemctl enable libvirtd
(4)允许 root 远程 SSH 登录
复制代码
# 编辑 SSH 配置文件

vim /etc/ssh/sshd_config

# 修改以下参数

PermitRootLogin yes

# 重启 SSH 服务

systemctl restart sshd

systemctl enable sshd
(5)将RHEL 9.2 镜像上传到树主机中

三、被控节点(虚拟机)创建与配置

1. 创建 master 虚拟机

  1. 通过 virt-manager 图形工具创建虚拟机:
    • 镜像选择 RHEL 9.2 系统镜像;
    • 创建 root 用户并勾选 "允许 root SSH 登录";
    • 创建普通用户 student;

2. 克隆 node1-node5 虚拟机

  1. 在 virt-manager 中右键克隆 master 虚拟机,共克隆 5 台(命名为 node1-node5);

  2. 分别配置每台节点的 IP 与主机名(以 node1 为例):

    1. 修改主机名

    hostnamectl set-hostname node1.example.com

    2. 编辑网卡配置文件(删除 UUID,修改 IP)

    vi /etc/NetworkManager/system-connections/enp1s0.nmconnection

    修改内容:

    ipv4.addresses=192.168.122.10/24

    删除 uuid 字段(避免冲突)

    3. 重启网络

    nmcli connection NetworkManager

    nmcli connection up enp1s0

按上述步骤配置 node2-node5,IP 分别为 192.168.122.20/30/40/50

四、跨主机通信与权限配置

1. 配置主机名解析(控制节点与被控节点)

(1)控制节点(ansible)配置 hosts
复制代码
vim /etc/hosts

# 添加以下内容

192.168.122.1 ansible.example.com ansible

192.168.122.100 master.example.com master

192.168.122.10 node1.example.com node1

192.168.122.20 node2.example.com node2

192.168.122.30 node3.example.com node3

192.168.122.40 node4.example.com node4

192.168.122.50 node5.example.com node5
(2)分发 hosts 文件到所有被控节点
复制代码
# 1. 发送到 master

scp /etc/hosts root@master:/etc/hosts

# 2. 从 master 批量发送到 node1-node5

ssh root@master "for i in node{1..5}
>do scp /etc/hosts root@\$i:/etc/hosts
>done"

2. 配置 SSH 免密登录(root 与 student 用户)

(1)master 节点生成密钥并分发(root 用户)
复制代码
# 1. 登录 master 并生成密钥(一路回车默认即可)

ssh root@master

ssh-keygen

# 2. 分发公钥到 node1-node5(root 用户)

for i in node{1..5}
>do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$i
>done

# 3. 分发公钥到 node1-node5(student 用户)

for i in node{1..5}
>do ssh-copy-id -i ~/.ssh/id_rsa.pub student@$i
>done
(2)master 节点 student 用户配置免密
复制代码
# 1. 切换到 student 用户

su - student

# 2. 生成密钥

ssh-keygen

# 3. 分发公钥到 node1-node5(root 与 student)

for i in node{1..5}
>do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$i
>done

for i in node{1..5}
>do ssh-copy-id -i ~/.ssh/id_rsa.pub student@$i
>done

3. 配置普通用户 sudo 提权(所有被控节点)

(1)在 master 节点创建 sudo 配置文件
复制代码
vim /etc/sudoers.d/student

# 添加以下内容(允许 student 免密执行所有命令)

student ALL=(ALL) NOPASSWD: ALL
(2)分发 sudo 配置到 node1-node5
复制代码
for i in node{1..5}; do

scp /etc/sudoers.d/student root@$i:/etc/sudoers.d/

done

五、Ansible 服务部署与配置

1. 控制节点(ansible)配置网络 YUM 源

(1)安装 httpd 服务并部署 YUM 源文件
复制代码
# 1. 安装 httpd

yum -y install httpd

# 上传 ansible-automation-platform 相关包到/var/www/html/

# 3. 重启 httpd 并设置开机自启

systemctl restart httpd

systemctl enable httpd

# 4. 关闭防火墙与 SELinux(避免端口拦截)

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

vim /etc/selinux/config

SELINUX=disabled
(2)被控节点(master/node1-node5)配置网络 YUM 源
复制代码
# 1. 登录 master 编辑 YUM 配置

ssh student@master

vim /etc/yum.repos.d/server.repo

# 2. 写入以下内容(指向控制节点的 httpd 源)

[aa]

name=aa1

baseurl=http://ansible.example.com/rhel9/BaseOS

enabled=1

gpgcheck=0

[cc]

name=cc1

baseurl=http://ansible.example.com/rhel9/AppStream

enabled=1

gpgcheck=0

[dd]

name=dd1

baseurl=http://ansible.example.com/ansible-automation-platform

enabled=1

gpgcheck=0

# 3. 安装基础工具(vim、命令补全)

sudo yum -y install vim bash-completion net-tools

# 4. 也可以将YUM 配置分布到 node1-node5

for i in node{1..5}; do

scp /etc/yum.repos.d/server.repo student@$i:/etc/yum.repos.d/

ssh student@$i "sudo yum -y install vim bash-completion net-tools"

done

2. 安装 Ansible(master 节点,student 用户)

复制代码
# 1. 切换到 student 用户

su - student

# 2. 安装 ansible 核心组件

sudo yum -y install ansible-core ansible-navigator

3. 配置 Ansible(master 节点,student 用户)

(1)创建 Ansible 工作目录
复制代码
#因为我们的ansible目录下没有以上的一些目录和文件
#需要创建(在/home/student/ansible目录下):
cd /home/student/ansible

主机清单:
touch inventory
角色目录:
mkdir roles
模块目录:
mkdir collections
(2)生成并编辑 Ansible 配置文件
复制代码
# 1. 生成默认配置文件(--disabled 表示注释所有默认配置)(在/home/student/ansible目录下执行)

ansible-config init --disabled > ansible.cfg

# 2. 编辑配置文件(vim ansible.cfg),修改以下关键参数

[inventory]

inventory = /home/student/ansible/inventory # 主机清单路径

[defaults]

remote_user = student # 远程执行用户

roles_path = /home/student/ansible/roles # 角色目录

host_key_checking = False # 关闭 SSH 主机密钥检查

collections_path = /home/student/ansible/collections # 集合目录

[privilege_escalation]

become = True # 开启提权

become_ask_pass = False # 提权无需密码

become_method = sudo # 提权方式(sudo)

become_user = root # 提权目标用户(root)
(3)配置主机清单(inventory 文件)
复制代码
vim /home/student/ansible/inventory

# 写入以下内容

node1

node2

node3

node4

node5

六、环境验证

在 master 节点的 ansible 工作目录下,执行 ping 测试(验证所有节点连通性):

复制代码
cd /home/student/ansible

ansible all -m ping
  • 若所有节点返回 SUCCESS,表示 Ansible 环境配置成功;
  • 若失败,检查 SSH 免密、hosts 解析、sudo 提权配置是否正确。