Ansible 详细部署教程

项目概述

Ansible 是一款革命性的简单 IT 自动化平台,它让应用程序和系统部署与维护变得更容易。Ansible 可以处理配置管理、应用部署、云资源分配、临时任务执行、网络自动化和多节点编排等任务。

核心设计原则

  • 无代理(Agentless):利用现有的 SSH 守护进程,无需在远程系统上安装任何代理
  • 简单设置:学习曲线极低,使用接近自然语言的 YAML 语法
  • 并行管理:快速并行管理多台机器
  • 安全可审计:专注于安全性和内容的可审计性

部署前准备

节点角色说明

根据官方文档,Ansible 的部署涉及两种节点角色 :

角色 说明 要求
控制节点(Control Node) 运行 Ansible 的机器 几乎任何安装了 Python 的类 UNIX 机器
被管理节点(Managed Node) Ansible 管理的远程机器 不需要安装 Ansible,但需要 Python 和 SSH 访问

控制节点要求

项目 要求
操作系统 Red Hat、Debian、Ubuntu、macOS、BSDs、WSL 下的 Windows
Python 取决于 Ansible 版本(见下表)

Python 版本兼容性

Ansible 版本 ansible-core 版本 控制节点 Python 支持
Ansible 12 2.19 Python 3.11 - 3.13
Ansible 2.20 2.20 Python 3.12 - 3.14

注意:不带 WSL 的 Windows 不能原生作为控制节点 。

被管理节点要求

  • 无需安装 Ansible
  • 需要 Python 来运行 Ansible 生成的代码
  • 需要一个可通过 SSH 连接的用户账户,并有交互式 POSIX shell

方案一:使用 pip 安装(官方推荐)

这是官方唯一维护的安装方式,适用于大多数系统 。

步骤 1:确认 Python 和 pip 可用

1
2
python3 --version
python3 -m pip -V

如果 pip 未安装:

1
2
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py --user

步骤 2:安装 Ansible

1
2
3
4
5
# 安装完整版(包含社区集合)
python3 -m pip install --user ansible

# 或仅安装最小核心版
python3 -m pip install --user ansible-core

步骤 3:配置 PATH(如需)

1
export PATH=$PATH:$HOME/.local/bin

步骤 4:验证安装

1
ansible --version

方案二:使用 pipx 安装(隔离环境)

在某些系统上,可能无法使用 pip 安装 Ansible。这时 pipx 是一个广泛可用的替代方案 。

步骤 1:安装 pipx

1
2
3
4
5
6
# macOS
brew install pipx

# Linux
python3 -m pip install --user pipx
python3 -m pipx ensurepath

步骤 2:安装 Ansible

1
2
3
4
5
# 安装完整版
pipx install --include-deps ansible

# 或安装最小核心版
pipx install ansible-core

步骤 3:验证安装

1
ansible --version

升级 Ansible

1
pipx upgrade --include-injected ansible

方案三:使用系统包管理器安装

Fedora Linux

Fedora 通过标准仓库提供完整版和最小核心版 :

1
2
3
4
5
# 安装完整版
sudo dnf install ansible

# 安装最小核心版
sudo dnf install ansible-core

Ubuntu

Ubuntu 通过 PPA 提供比标准仓库更新的版本 :

1
2
3
4
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible

Debian

Debian 主仓库有 Ansible,但版本可能较旧。如需更新版本,可使用 Ubuntu PPA :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
UBUNTU_CODENAME='noble'  # Debian 13 对应 noble
FINGERPRINT='6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367'

wget -O- "https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x${FINGERPRINT}" | sudo gpg --dearmor -o /usr/share/keyrings/ansible-archive-keyring.gpg

cat <<EOF | sudo tee /etc/apt/sources.list.d/ansible.sources > /dev/null
Types: deb
URIs: https://ppa.launchpadcontent.net/ansible/ansible/ubuntu/
Suites: ${UBUNTU_CODENAME}
Components: main
Signed-By: /usr/share/keyrings/ansible-archive-keyring.gpg
EOF

sudo apt update && sudo apt install ansible

CentOS Stream / AlmaLinux / Rocky Linux

这些发行版可通过 EPEL 仓库安装 :

1
2
sudo dnf install epel-release
sudo dnf install ansible

OpenSUSE Tumbleweed/Leap

1
sudo zypper install ansible

macOS

1
brew install ansible

Windows

Ansible 不能原生运行在 Windows 上。Windows 用户需要 :

  1. 安装 WSL2(Windows Subsystem for Linux)
  2. 在 WSL 中安装 Ubuntu 或其他发行版
  3. 在 WSL 内按照 Linux 安装方法操作

方案四:从源码安装(开发/最新版本)

步骤 1:克隆仓库

1
2
git clone https://github.com/ansible/ansible.git
cd ansible

步骤 2:切换分支(可选)

1
2
3
4
5
# 使用稳定版本
git checkout stable-2.19

# 或使用开发版本(包含最新功能,可能有破坏性变更)
git checkout devel

步骤 3:设置环境并安装依赖

1
2
source ./hacking/env-setup
pip3 install -r requirements.txt

基本配置与使用

步骤 1:创建项目目录

1
mkdir ~/ansible-project && cd ~/ansible-project

步骤 2:创建清单文件(Inventory)

创建 hosts 文件,列出被管理节点 :

1
2
3
4
5
6
[webservers]
web1 ansible_host=192.168.1.101
web2 ansible_host=192.168.1.102

[dbservers]
db1 ansible_host=192.168.1.201

步骤 3:配置 SSH 免密登录

1
2
ssh-keygen -t ed25519
ssh-copy-id user@192.168.1.101

步骤 4:测试连接

1
ansible all -i hosts -m ping

步骤 5:创建第一个 Playbook

创建 playbook.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
---
- name: 配置 Web 服务器
hosts: webservers
become: yes
tasks:
- name: 安装 Nginx
package:
name: nginx
state: present

- name: 启动 Nginx 服务
service:
name: nginx
state: started
enabled: yes

步骤 6:运行 Playbook

1
ansible-playbook -i hosts playbook.yml

常见问题排查

问题 解决方案
ansible 命令未找到 ~/.local/bin 添加到 PATH,或使用完整路径
SSH 连接失败 检查 SSH 密钥配置,确认被管理节点可通过 SSH 访问
Python 版本不兼容 根据 Ansible 版本要求升级控制节点 Python
pip 安装权限错误 使用 --user 标志,或使用 pipx 隔离安装
被管理节点无 Python 网络设备模块通常不需要 Python;其他情况需安装 Python

总结

部署方式 适用场景 难度 推荐度
pip 安装 大多数用户 ⭐⭐⭐⭐⭐
pipx 安装 需要隔离环境 ⭐⭐ ⭐⭐⭐⭐
系统包管理器 Linux 发行版用户 ⭐⭐⭐⭐⭐
源码安装 开发/最新功能 ⭐⭐⭐ ⭐⭐

对于大多数用户,使用 pip 安装是最简单直接的选择:

1
2
3
4
5
# 安装
python3 -m pip install --user ansible

# 验证
ansible --version

Ansible 采用无代理架构,只需在控制节点安装一次,即可通过 SSH 管理任意数量的被管理节点。建议使用 Python 3.11+ 以兼容最新的 Ansible 版本 。