Ansible Core 2.21 安装部署:openEuler 环境、在线安装与离线部署
一、Ansible 是什么?
Ansible 是一款开源的自动化运维工具,可以通过 SSH 批量管理 Linux 服务器。
日常运维中,如果需要在多台服务器上安装软件、修改配置、创建用户或重启服务,传统方式需要逐台登录操作。
使用 Ansible 后,可以通过一台控制节点统一执行任务,减少重复操作,提高运维效率。
例如:需要在 10 台 Linux 服务器上安装 Nginx。
传统方式:
SSH 登录服务器 01 → 安装 Nginx SSH 登录服务器 02 → 安装 Nginx SSH 登录服务器 03 → 安装 Nginx ...Ansible 方式:
Ansible 控制节点 │ ├── Linux 01 ├── Linux 02 ├── Linux 03 └── Linux ... │ ▼ 批量执行安装任务Ansible 的主要特点:
- Agentless:被管理的 Linux 节点不需要安装 Ansible Agent。
- SSH 通信:通常通过 SSH 连接远程服务器。
- 批量管理:利用 Inventory 对服务器进行分组管理。
- Playbook:通过 YAML 编排自动化任务。
- 幂等性:使用支持幂等的模块时,重复执行相同任务不会产生不必要的配置变更。
需要注意,Ansible 并不是所有命令都天然具有幂等性,例如使用shell执行自定义脚本,仍需自行控制重复执行的影响。
二、Ansible Core、AWX、AAP 的区别
Ansible 生态中主要涉及以下几种组件。
| 名称 | 作用 | 使用场景 |
|---|---|---|
| Ansible Core | 核心自动化执行引擎 | 批量执行命令、Playbook |
| AWX | 开源 Web 管理平台 | 图形化执行、任务管理、权限管理 |
| Ansible Automation Platform | Red Hat 企业级自动化平台 | 企业级自动化管理与技术支持 |
本次先安装Ansible Core,掌握最基础的自动化执行能力。
接着后续可以 Playbook、Roles,再根据需要部署 AWX。
1. Ansible 工作架构
运维人员 │ │ 执行 ansible / ansible-playbook ▼ ┌──────────────────────┐ │ Ansible 控制节点 │ │ │ │ ansible-core │ │ Inventory │ │ Playbook │ │ Modules │ │ Roles │ └──────────┬───────────┘ │ SSH / TCP 22 │ ┌──────────┼──────────┐ │ │ │ ▼ ▼ ▼ ┌────────┐ ┌────────┐ ┌────────┐ │ Linux │ │ Linux │ │ Linux │ │ Node01 │ │ Node02 │ │ Node03 │ └────────┘ └────────┘ └────────┘架构说明:
控制节点安装 Ansible Core,通过 Inventory 获取目标服务器信息,再通过 SSH 将任务发送到被管理节点执行。
多数常规 Linux 模块需要被管理节点具备兼容的
Python 环境。
被管理节点通常不需要安装 Ansible Core。
以准备使用的ansible-core 2.21为例:
| 节点 | Python 要求 | 是否安装 Ansible |
|---|---|---|
| 控制节点 | Python 3.12~3.14 | ✅ 必须 |
| 被管理节点 | Python 3.9~3.14 | ❌ 不需要 |
例如:
Ansible 控制节点 Python 3.12 + ansible-core 2.21 │ │ SSH ├── Linux 01:Python 3.9 ✅ ├── Linux 02:Python 3.11 ✅ ├── Linux 03:Python 3.12 ✅ └── Linux 04:Python 3.7 ❌为什么被管理节点需要 Python?
因为 Ansible 通过 SSH 连接服务器后,很多模块会在远程服务器上运行 Python 代码。
不过raw等特殊模块可以不依赖远程 Python。
三、实验环境与版本选择
本次使用现有 openEuler 20.03 (LTS-SP4)服务器作为 Ansible 控制节点,采用 Python 虚拟环境部署,避免影响系统原有软件依赖。
1. 当前实验环境
| 组件 | 环境信息 |
|---|---|
| 操作系统 | openEuler 20.03 LTS-SP4 |
| 系统 Python | Python 3.7.9 |
| 原有 pip | pip 20.2.2 |
| Ansible 目标版本 | ansible-core 2.21.x |
| Python 目标版本 | Python 3.12 |
| 软件依赖源 | 国内镜像源 / Nexus PyPI Proxy |
已有环境中,系统 Python 查询结果:
python3 --version pip3 --versionPython 3.7.9 pip 20.2.22. 为什么需要 Python 3.12?
Ansible Core 2.21 要求:
| 节点类型 | 支持的 Python 版本 |
|---|---|
| 控制节点 | 3.12~3.14 |
| 被管理节点 | 3.9~3.14 |
因此,现有的 Python 3.7.9 不满足 Ansible Core 2.21 的控制节点运行要求。
本次不直接替换系统 Python,而是新增 Python 3.12。
规划目录:
/usr/bin/python3 └── Python 3.7.9 系统原有 Python,保留 /opt/python3.12/ └── Python 3.12 新增 Python 环境 /opt/ansible/ └── venv/ Ansible Core 2.21 虚拟环境这样可以避免直接修改系统自带的/usr/bin/python3,降低对 DNF 和其他系统工具的影响。
四、在线安装 Ansible Core
安装顺序:
安装系统编译依赖 │ ▼ 安装 Python 3.12 │ ▼ 创建 Python 虚拟环境 │ ▼ 通过 Nexus / PyPI 安装 Ansible Core │ ▼ 集中验证1. 安装基础依赖
在 openEuler 服务器执行:
dnf install -y \ gcc \ make \ wget \ tar \ gzip \ openssl-devel \ zlib-devel \ bzip2-devel \ libffi-devel \ readline-devel \ sqlite-devel \ xz-devel \ ncurses-devel这些依赖主要用于编译 Python 及其常用标准库扩展。
本次使用源码编译安装 Python,便于控制安装目录,并与系统原有 Python 共存。
2. 安装 Python 3.12
这里以 Python 3.12.12 为例。
mkdir -p /opt/src cd /opt/src wget https://www.python.org/ftp/python/3.12.12/Python-3.12.12.tgz tar -xzf Python-3.12.12.tgz cd Python-3.12.12配置编译路径:
./configure \ --prefix=/opt/python3.12 \ --with-ensurepip=install编译并安装:
make -j"$(nproc)" make altinstall这里使用altinstall,避免直接覆盖系统中的python3命令。
注意:Python 3.12 需要兼容的 OpenSSL 开发库。对于旧版 openEuler,如果编译时出现_ssl模块缺失,应先处理 OpenSSL 兼容性,不能忽略错误继续安装 Ansible。
3. 创建 Ansible 虚拟环境
使用新安装的 Python 创建独立虚拟环境:
mkdir -p /opt/ansible /opt/python3.12/bin/python3.12 \ -m venv /opt/ansible/venv进入虚拟环境:
source /opt/ansible/venv/bin/activate此时后续的python、pip将优先使用虚拟环境。
4. 在线安装 Ansible Core
本次实验此前已经部署了 Nexus Repository,并完成阿里云 PyPI 代理仓库测试。
因此可以直接使用 Nexus 作为 Ansible 的 Python 依赖下载入口:
python -m pip install \ "ansible-core>=2.21,<2.22" \ --index-url http://127.0.0.1:8081/repository/pypi-aliyun/simple/ \ --trusted-host 127.0.0.1说明:
ansible-core>=2.21,<2.22:选择 Ansible Core 2.21 系列版本。--index-url:指定 Nexus PyPI 代理仓库。--trusted-host:本地 HTTP 实验使用,正式环境应采用可信 HTTPS。
如果没有部署 Nexus,也可以直接通过国内 PyPI 镜像源安装:
python -m pip install \ "ansible-core>=2.21,<2.22" \ -i https://mirrors.aliyun.com/pypi/simple/两种方式任选其一。
本次优先通过 Nexus 安装,便于验证此前搭建的软件依赖代理仓库在 Ansible 部署中的实际应用。
五、Ansible Core 在线安装
在线安装 Ansible Core (执行后,直接跳到-七验证版本)
本次实验此前已经通过 Nexus 创建了阿里云 PyPI 代理仓库,因此直接使用 Nexus 安装 Ansible Core 2.21.5。
python-mpipinstallansible-core==2.21.5\--index-url http://127.0.0.1:8081/repository/pypi-aliyun/simple/\--trusted-host127.0.0.1参数说明:
| 参数 | 作用 |
|---|---|
ansible-core==2.21.5 | 指定安装版本 |
--index-url | 指定 Nexus PyPI 软件源 |
--trusted-host | 允许本地实验环境使用 HTTP 软件源 |
六、Ansible Core 离线安装
离线安装主要用于无法直接访问互联网的服务器,例如隔离网络、企业内网等环境。
核心思路:
有网服务器 │ ▼ 下载 Ansible 及全部依赖 │ ▼ 打包本地 Wheel 文件 │ 文件拷贝 / SCP │ ▼ 离线服务器 │ ▼ --no-index 本地安装前提条件:
离线控制节点已经具备 Python 3.12、pip、venv,以及 Ansible 运行所需的系统基础库。
如果目标系统连 Python 都没有,需要提前准备 Python 安装包及其系统依赖。仅准备 Ansible Wheel 文件,并不能解决所有操作系统层面的依赖问题。
1. 在线环境下载安装包
建议在与离线目标系统、CPU 架构及 Python 版本兼容的环境中执行。
mkdir -p /opt/ansible-offline /opt/python3.12/bin/python3.12 -m pip download \ "ansible-core>=2.21,<2.22" \ -d /opt/ansible-offline \ -i https://mirrors.aliyun.com/pypi/simple/这个命令会下载 Ansible Core 以及需要的 Python 依赖。
为了保证在线和离线安装的版本一致,实际交付时应记录当前解析到的精确版本,并固定依赖版本。
2. 打包离线安装文件
cd /opt tar -czf ansible-offline.tar.gz ansible-offline将压缩包复制到离线服务器,例如:
scp /opt/ansible-offline.tar.gz \ root@192.168.2.121:/opt/这里的 IP 仅为实验示例,需要修改为实际离线服务器地址。
如果离线环境完全无法通过 SSH 连接,可以采用移动存储设备传输。
3. 在离线服务器安装
解压:
cd /opt tar -xzf ansible-offline.tar.gz创建 Ansible 虚拟环境:
/opt/python3.12/bin/python3.12 \ -m venv /opt/ansible-venv进入虚拟环境:
source /opt/ansible-venv/bin/activate本地安装:
python -m pip install \ --no-index \ --find-links=/opt/ansible-offline \ "ansible-core>=2.21,<2.22"参数说明:
| 参数 | 作用 |
|---|---|
--no-index | 禁止访问在线软件包索引 |
--find-links | 指定本地 Python 安装包目录 |
pip download | 提前下载软件包和依赖 |
整个安装过程不需要访问 PyPI。
本次离线方式使用 Python Wheel 包,适合已经准备好 Python 运行环境的 Linux 控制节点。
七、统一验证安装结果
前面的安装步骤不需要每一步都反复测试,最后集中检查即可。
1. 查看 Python 版本
python --version预期:
Python 3.12.x2. 查看 Ansible 版本
ansible --version需要重点检查:
ansible [core 2.21.x]同时确认输出的 Python 路径来自 Ansible 虚拟环境,而不是系统 Python 3.7。
3. 验证本地模块执行
ansible localhost -m ping -c local预期:
localhost | SUCCESS => { "changed": false, "ping": "pong" }注意:
这里的ping是 Ansible 模块,用于验证目标节点是否能够执行 Ansible 任务,并不是普通 ICMP 网络 Ping。
4. 验证 Playbook 执行
创建测试文件:
mkdir -p /opt/ansible-project cd /opt/ansible-project cat > test.yml <<'EOF' --- - name: Ansible installation test hosts: localhost connection: local gather_facts: false tasks: - name: Output test message ansible.builtin.debug: msg: "Ansible Core installation successful" EOF执行:
ansible-playbook test.yml![[QQ_1792842120078.png]]
Ansible 虚拟环境的三种使用方式
方式一:激活虚拟环境(推荐学习时使用)
# 激活 source /opt/ansible/venv/bin/activate ansible --version ansible localhost -m ping -c local ansible-playbook test.yml # 退出 deactivate方式二:直接使用绝对路径(推荐脚本和自动化任务)
不进入虚拟环境,直接执行:
/opt/ansible/venv/bin/ansible --version执行 Playbook:
/opt/ansible/venv/bin/ansible-playbook /opt/ansible-project/test.yml这是完全可行的,而且更适合 Jenkins、Shell 脚本和定时任务。
方式三:配置 PATH(推荐日常运维使用)
如果不想每次都执行source,可以在当前用户的~/.bashrc中添加:
export PATH=/opt/ansible/venv/bin:$PATH然后执行一次:
source ~/.bashrc之后新开的 Bash 终端就可以直接使用:
ansible --version ansible-playbook test.yml不过,这会让虚拟环境中的python、pip也优先进入 PATH。它不会覆盖系统 Python 文件,但可能影响你在终端执行的其他 Python 命令。