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 yesnmcli 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=aa1baseurl=file:///mnt/BaseOSenabled=1gpgcheck=0[bb]name=bb1baseurl=file:///mnt/AppStreamenabled=1gpgcheck=0
- 挂载系统镜像到 /mnt:
mount /dev/cdrom /mnt # 若需开机自动挂载,可添加到 /etc/fstab
(3)安装 KVM 相关工具(用于创建被控节点虚拟机)
# 安装虚拟化工具组yum -y group install "Virtualization Client" "Virtualization Hypervisor" "Virtualization Tools"# 重启并设置 libvirtd 服务开机自启systemctl restart libvirtdsystemctl enable libvirtd
(4)允许 root 远程 SSH 登录
# 编辑 SSH 配置文件vim /etc/ssh/sshd_config# 修改以下参数PermitRootLogin yes# 重启 SSH 服务systemctl restart sshdsystemctl enable sshd
(5)将RHEL 9.2 镜像上传到树主机中
三、被控节点(虚拟机)创建与配置
1. 创建 master 虚拟机
- 通过 virt-manager 图形工具创建虚拟机:
-
- 镜像选择 RHEL 9.2 系统镜像;
-
- 创建 root 用户并勾选 “允许 root SSH 登录”;
-
- 创建普通用户 student;
-
- 配置 IP 为 192.168.122.100,主机名为 master.example.com。
2. 克隆 node1-node5 虚拟机
- 在 virt-manager 中右键克隆 master 虚拟机,共克隆 5 台(命名为 node1-node5);
- 分别配置每台节点的 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 NetworkManagernmcli 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 ansible192.168.122.100 master.example.com master192.168.122.10 node1.example.com node1192.168.122.20 node2.example.com node2192.168.122.30 node3.example.com node3192.168.122.40 node4.example.com node4192.168.122.50 node5.example.com node5
(2)分发 hosts 文件到所有被控节点
# 1. 发送到 masterscp /etc/hosts root@master:/etc/hosts# 2. 从 master 批量发送到 node1-node5ssh 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@masterssh-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
>donefor 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}; doscp /etc/sudoers.d/student root@$i:/etc/sudoers.d/done
五、Ansible 服务部署与配置
1. 控制节点(ansible)配置网络 YUM 源
(1)安装 httpd 服务并部署 YUM 源文件
# 1. 安装 httpdyum -y install httpd# 上传 ansible-automation-platform 相关包到/var/www/html/# 3. 重启 httpd 并设置开机自启systemctl restart httpdsystemctl enable httpd# 4. 关闭防火墙与 SELinux(避免端口拦截)systemctl stop firewalldsystemctl disable firewalldsetenforce 0vim /etc/selinux/configSELINUX=disabled
(2)被控节点(master/node1-node5)配置网络 YUM 源
# 1. 登录 master 编辑 YUM 配置ssh student@mastervim /etc/yum.repos.d/server.repo# 2. 写入以下内容(指向控制节点的 httpd 源)[aa]name=aa1baseurl=http://ansible.example.com/rhel9/BaseOSenabled=1gpgcheck=0[cc]name=cc1baseurl=http://ansible.example.com/rhel9/AppStreamenabled=1gpgcheck=0[dd]name=dd1baseurl=http://ansible.example.com/ansible-automation-platformenabled=1gpgcheck=0# 3. 安装基础工具(vim、命令补全)sudo yum -y install vim bash-completion net-tools# 4. 也可以将YUM 配置分布到 node1-node5for i in node{1..5}; doscp /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# 写入以下内容node1node2node3node4node5
六、环境验证
在 master 节点的 ansible 工作目录下,执行 ping 测试(验证所有节点连通性):
cd /home/student/ansibleansible all -m ping
- 若所有节点返回 SUCCESS,表示 Ansible 环境配置成功;
- 若失败,检查 SSH 免密、hosts 解析、sudo 提权配置是否正确。