☰
Ansible Core 2.21 安装部署:openEuler 环境、在线安装与离线部署
2026/10/26 2:01:47 网站建设 项目流程

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 PlatformRed 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
系统 PythonPython 3.7.9
原有 pippip 20.2.2
Ansible 目标版本ansible-core 2.21.x
Python 目标版本Python 3.12
软件依赖源国内镜像源 / Nexus PyPI Proxy

已有环境中,系统 Python 查询结果:

python3 --version pip3 --version
Python 3.7.9 pip 20.2.2

2. 为什么需要 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.x

2. 查看 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 命令。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询