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:验证安装
方案二:使用 pipx 安装(隔离环境)
在某些系统上,可能无法使用 pip 安装 Ansible。这时 pipx 是一个广泛可用的替代方案 。
步骤 1:安装 pipx
1 2 3 4 5 6
| brew install pipx
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:验证安装
升级 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' 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
Windows
Ansible 不能原生运行在 Windows 上。Windows 用户需要 :
- 安装 WSL2(Windows Subsystem for Linux)
- 在 WSL 中安装 Ubuntu 或其他发行版
- 在 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 版本 。