当前位置: 首页 > news >正文

Ansible 自动化运维工具:介绍与完整部署(RHEL 9)

Ansible 自动化运维工具:介绍与完整部署(RHEL 9)

在这里插入图片描述

Ansible 的介绍与安装

一、自动化运维的必要性

传统手动运维依赖图形/命令行界面、检查清单或记忆执行任务,存在以下核心问题:

  • 易出错:易跳过步骤或执行错误操作,结果验证有限;
  • 效率低:重复性任务占用大量时间,无法聚焦核心工作;
  • 一致性差:不同服务器配置易出现差异,影响业务稳定性。

自动化运维可解决上述问题,实现快速、标准化、无差异的系统部署与配置,释放运维人力。

二、什么是 Ansible

Ansible 是基于 Python 开发的开源自动化运维平台,核心能力包括:

  • 批量操作:支持批量系统配置、程序部署、命令执行;
  • 无代理架构:无需在被管节点安装客户端(Agent),通过 SSH/WinRM 通信;
  • 模块化驱动:本身仅提供框架,实际功能由模块实现(核心模块+自定义模块);
  • 全生命周期管理:覆盖配置管理、应用部署、工作流编排、网络自动化;

其工作原理:控制主机通过 SSH 推送临时模块到被管节点,执行任务后自动删除模块,确保被管节点清洁。

三、Ansible 核心优点

  1. 跨平台支持:覆盖 Linux、Windows、Unix 及网络设备,适配物理机、虚拟机、云、容器;
  2. 易读的自动化脚本:通过 YAML 格式的 Playbook 编写任务,人类可读,便于团队协作;
  3. 版本控制友好:Playbook 为纯文本文件,可直接纳入 Git 等版本控制系统;
  4. 动态清单:支持从外部来源(如云平台、CMDB)动态获取被管主机列表,适应架构变化;
  5. 灵活集成:可与 Puppet、Jenkins、红帽卫星等现有系统集成,复用现有架构。

四、Ansible 管理架构

Ansible 由控制主机被管节点组成,核心组件如下:

组件作用
控制主机运行 Ansible 核心程序,发起任务执行(需安装 Ansible,被管节点无需)
被管节点接收控制主机的任务指令,执行对应操作(仅需支持 SSH,无需安装 Ansible)
Host Inventory主机清单,记录被管节点的 IP、端口、账号等信息,支持分组管理
Modules任务执行单元(核心模块/自定义模块),如 ping(测试连通性)、yum(安装软件)
Playbooks任务剧本,通过 YAML 组合多个模块,定义被管节点的最终状态(例行任务首选)
Plugins扩展功能,如日志插件(记录执行日志)、邮件插件(任务结果通知)
Connection Plugins连接插件,默认使用 SSH 插件与被管节点通信

五、Ansible 任务执行模式

Ansible 提供两种核心执行模式,适配不同场景:

模式特点适用场景
Ad-hoc 模式(点对点)单条命令+单个模块,无需保存,执行快速临时性操作(如批量查看磁盘、测试连通性)
Playbook 模式(剧本)多模块按逻辑组合,YAML 格式保存,可重复执行例行性任务(如 Web 服务部署、数据库备份)

六、Ansible 完整部署流程(RHEL 9)

环境规划

共 6 台 RHEL 9 主机,1 台控制主机(master)+ 5 台被管节点(node1~node5),网络信息如下:

主机名IP 地址角色用途
master.example.com192.168.122.100控制主机运行 Ansible,管理被管节点
node1.example.com192.168.122.10被管节点测试节点(test01 组)
node2.example.com192.168.122.20被管节点测试节点(test02 组)
node3.example.com192.168.122.30被管节点Web 节点(web 组)
node4.example.com192.168.122.40被管节点Web 节点(web 组)
node5.example.com192.168.122.50被管节点测试节点(test05 组)
ansible.example.com192.168.122.1宿主机提供 YUM 仓库服务
步骤 1:基础环境准备(所有主机)
1.1 安装 RHEL 9 虚拟机
  • 安装 1 台 RHEL 9 虚拟机作为“模板机”,配置 IP 后,通过 virt-manager 克隆出 5 台,共 6 台主机;
  • 注意:克隆后需删除所有主机网卡配置文件的 UUID(避免冲突),路径:/etc/sysconfig/network-scripts/ifcfg-<网卡名>(如 ifcfg-ens33)。
1.2 配置主机名与 /etc/hosts

所有主机统一配置 /etc/hosts,实现主机名解析(无需 DNS):

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:配置控制主机(master)免密钥登录

Ansible 通过 SSH 通信,需实现 master 到所有被管节点(node1~node5)的免密登录(root + student 用户)。

2.1 生成 SSH 密钥(master 主机)

分别切换 rootstudent 用户,生成密钥(一路回车,不设密码):

# root 用户
[root@master ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:fu+YtSh2VzPILf27GULLWKt/71xihlpGacQABgid3PU root@master.example.com
The key's randomart image is:
+---[RSA 3072]----+
|  .+ +.o+..      |
|    = .. . o     |
|          E o    |
|           . .   |
|        S  .+*   |
|       .   oO.O  |
|        . ..=B+=.|
|        o..Xo+.+=|
|       . o=+=..=B|
+----[SHA256]-----+# student 用户(若不存在,先创建:useradd student && passwd student)
[root@master ~]# su - student
[student@master ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/student/.ssh/id_rsa): 
/home/student/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/student/.ssh/id_rsa
Your public key has been saved in /home/student/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:N5v5lxQ1PcwK9bqjZllkxr7voQJ8IR8KzdBtYxjaiE4 student@master.example.com
The key's randomart image is:
+---[RSA 3072]----+
|        ..+ ..o .|
|      ..+o *  .=o|
|     E o+.o + .oo|
|    o  . + o *o  |
|     .  S * B. . |
|         = B oo  |
|          * o+.o |
|           *..= .|
|          o.oooo |
+----[SHA256]-----+
2.2 批量分发公钥(master 主机)

通过循环脚本将公钥分发到所有被管节点:

# 1. root 用户分发到被管节点 root/student
[root@master ~]# for i in node{1..5}; dossh-copy-id -i ~/.ssh/id_rsa.pub root@$i    # 免密登录被管节点 rootssh-copy-id -i ~/.ssh/id_rsa.pub student@$i  # 免密登录被管节点 student
done# 2. student 用户分发到被管节点 root/student(切换到 student 执行)
su - student
[root@master ~]# for i in node{1..5}; dossh-copy-id -i ~/.ssh/id_rsa.pub root@$issh-copy-id -i ~/.ssh/id_rsa.pub student@$i
done

验证:执行 ssh node1(root/student 用户),无需输入密码即登录成功。

[root@master ~]# for i in node{1..5}; do scp /etc/hosts root@$i:/etc/hosts; done
hosts                                             100%  437   520.7KB/s   00:00    
hosts                                             100%  437   700.9KB/s   00:00    
hosts                                             100%  437   472.2KB/s   00:00    
hosts                                             100%  437   141.6KB/s   00:00    
hosts                                             100%  437   660.6KB/s   00:00    
步骤 3:配置 YUM 仓库(宿主机 + master)

Ansible 安装依赖自定义 YUM 仓库(宿主机提供源,master 及被管节点使用)。

3.1 宿主机(ansible.example.com)配置仓库
  1. 挂载 RHEL 9 镜像,安装 Apache 服务:
    # 挂载镜像
    [root@ansible ~]# mount /dev/cdrom /mnt
    # 安装 Apache
    [root@ansible ~]# yum -y install httpd
    [root@ansible ~]# systemctl restart httpd 
    [root@ansible ~]# systemctl enable httpd
    # 关闭防火墙与 SELinux
    [root@ansible ~]# systemctl stop firewalld 
    [root@ansible ~]# systemctl disable firewalld
    

[root@ansible ~]# setenforce 0
[root@ansible ~]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config

  1. 复制镜像文件到 Apache 根目录(供远程访问):
   # 上传 Ansible自动化平台包 BaseOS 与 AppStream源到 /var/www/html/(需提前准备包自行上传)[root@ansible ~]# ls /var/www/html/ansible-automation-platform  materials  rhel9  roles
3.2 master 主机配置 YUM 仓库

创建 /etc/yum.repos.d/server.repo,指向宿主机仓库:

[root@master ~]$ vim /etc/yum.repos.d/server.repo[aa]
name=RHEL9 BaseOS
baseurl=http://ansible.example.com/rhel9/BaseOS
enabled=1
gpgcheck=0[cc]
name=RHEL9 AppStream
baseurl=http://ansible.example.com/rhel9/AppStream
enabled=1
gpgcheck=0[dd]
name=Ansible Automation Platform
baseurl=http://ansible.example.com/ansible-automation-platform
enabled=1
gpgcheck=0

验证:执行 yum -y install vim,确认能正常安装软件。

步骤 4:student 用户提权(所有主机)

Ansible 通常使用普通用户(student)执行任务,需配置 sudo 免密提权:

# master 主机创建提权文件
[root@master ~]# vim /etc/sudoers.d/studentstudent   ALL=(ALL)   NOPASSWD: ALL  
# student 免密执行所有 sudo 命令# 批量分发到所有被管节点
[root@master ~]# [root@master ~]# for i in node{1..5}; do scp /etc/sudoers.d/student root@$i:/etc/sudoers.d/; done
student                                           100%   32    68.3KB/s   00:00    
student                                           100%   32    61.5KB/s   00:00    
student                                           100%   32    41.3KB/s   00:00    
student                                           100%   32    37.0KB/s   00:00    
student                                           100%   32    52.1KB/s   00:00    
步骤 5:安装 Ansible(master 主机)

切换到 student 用户,安装 Ansible 核心组件:

[root@master ~]$ su - student
[student@master ~]$ sudo yum -y install ansible-core ansible-navigator
步骤 6:配置 Ansible(master 主机,student 用户)

student 家目录下创建 Ansible 工作目录、主机清单、配置文件。

6.1 创建工作目录
# 新建核心目录
[student@master ansible]$ mkdir -p /home/student/ansible/{inventory,roles,collections}
[student@master ansible]$ cd /home/student/ansible
6.2 定义主机清单(inventory)

按业务分组管理被管节点,编辑 inventory 文件:

[student@master ansible]$ vim inventorynode1
node1
node2
node3
node4
node5
6.3 生成并配置 Ansible 主配置(ansible.cfg)
  1. 生成默认配置文件:

    [student@master ansible]$ ansible-config init --disabled > ansible.cfg
    
  2. 编辑配置文件,修改核心参数:

    [student@master ansible]$ vim ansible.cfg
    [defaults]
    inventory=/home/student/ansible/inventory  # 主机清单路径
    remote_user=student                       # 远程执行用户
    roles_path=/home/student/ansible/roles    # 角色存放路径
    host_key_checking=False                   # 关闭 SSH 主机密钥检查(避免首次登录交互)
    collections_path=/home/student/ansible/collections  # 集合存放路径[privilege_escalation]
    become=True                               # 启用权限提升(普通用户→root)
    become_ask_pass=False                     # 提升权限不询问密码
    become_method=sudo                        # 提升方式为 sudo
    become_user=root                          # 提升到 root 用户
    
步骤 7:验证 Ansible 环境

执行 ping 模块,测试所有被管节点连通性,成功标志所有节点返回 SUCCESS,示例如下:

[student@master ansible]$ ansible all -m ping
node5 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"
}
node1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"
}
node4 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"
}
node3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"
}
node2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"
}

至此,Ansible 控制主机部署完成,可通过 Ad-hoc 命令或 Playbook 对被管节点执行自动化任务。

http://www.dtcms.com/a/351175.html

相关文章:

  • 【软考论文】论领域驱动开发方法(DDD)的应用
  • CentOS 7服务器初始化全攻略:从基础配置到安全加固
  • AI应用--接口测试篇
  • Maya绑定基础:驱动关键帧的使用
  • C# .NET支持多线程并发的压缩组件
  • 视频创作者如何用高级数据分析功能精准优化视频策略
  • 红色文化与前沿科技的融合:VR呈现飞夺泸定桥的震撼历史场景​
  • LWIP协议栈
  • Java项目-苍穹外卖_Day3-Day4
  • MyBatis-Flex:一个支持关联查询的MyBatis
  • android vehicle
  • SOME/IP-SD协议含配置选项键值信息的报文示例解析
  • 贝叶斯优化提升化学合成反应效率(附源码)
  • 如何将数据从vivo手机传输到另一部vivo手机
  • 《高并发场景下数据一致性隐疾的实战复盘》
  • Coze Studio开源版:AI Agent开发平台的深度技术解析- 入门篇
  • 深度学习篇---LeNet-5网络结构
  • iOS 开发中的 UIStackView 使用详解
  • Linux-服务器初始化
  • RHEL8.6环境下批量验证服务器凭据并配置Ansible免密管理全流程
  • 用wp_trim_words函数实现WordPress截断部分内容并保持英文单词完整性
  • Ansible 文件管理与 Jinja2 模板全解析:从模块应用到动态配置生成
  • Ansible核心技巧:循环条件与错误处理
  • nginx代理 flink Dashboard、sentinel dashboard的问题
  • HarmonyOS之深入了解装饰器
  • 服务器初始化流程***
  • Rust 符号体系全解析:分类、应用与设计意图
  • CentOS 7 升级 OpenSSL 3.5.1 的详细教程
  • 【Linux】Socket编程——TCP版
  • 【Python】shutil.make_archive() 方法详解