部署 Ansible
一、部署环境准备
在开始之前,请确保你满足以下条件:
控制节点 (Control Node):
- 一台 Linux 服务器(推荐 CentOS 7/8, Ubuntu 18.04+, Debian 10+)。
- 已安装 Python 2.7 或 Python 3.5+(现代 Linux 系统通常已预装)。
- 能够通过 SSH 连接到所有 “被控节点”。
被控节点 (Managed Nodes):
- 一台或多台需要被管理的 Linux 服务器。
- 已安装 Python 2.6+ 或 Python 3.5+。
- 已开启 SSH 服务(默认 22 端口)。
- 防火墙已放行来自 “控制节点” 的 SSH 连接。
二、在控制节点上安装 Ansible
这里以最常见的 CentOS 7/8 和 Ubuntu/Debian 为例。
1. 在 CentOS / RHEL 上安装
CentOS 7 需要先安装 EPEL (Extra Packages for Enterprise Linux) 源,CentOS 8 则可以直接从官方源安装。
# 对于 CentOS 7
sudo yum install -y epel-release
sudo yum install -y ansible# 对于 CentOS 8 / RHEL 8
sudo dnf install -y ansible
2. 在 Ubuntu / Debian 上安装
Ubuntu/Debian 系统可以直接使用 apt
包管理器安装。
# 更新 apt 包索引
sudo apt update
# 安装 Ansible
sudo apt install -y ansible
3. 验证安装
安装完成后,执行以下命令查看版本信息,如果能成功输出版本号,说明安装成功。
ansible --version
三、配置 SSH 免密登录(推荐)
为了避免在执行 Ansible 命令时反复输入密码,强烈建议配置从 “控制节点” 到所有 “被控节点” 的 SSH 免密登录。
在控制节点上生成 SSH 密钥对如果你还没有 SSH 密钥对,请在控制节点上执行以下命令生成。一路按 Enter 键即可。
ssh-keygen -t rsa
这会在
~/.ssh/
目录下生成id_rsa
(私钥) 和id_rsa.pub
(公钥)。将公钥分发到所有被控节点使用
ssh-copy-id
命令可以轻松地将公钥复制到被控节点。假设被控节点的 IP 是192.168.1.101
,用户名是root
。# 语法: ssh-copy-id <用户名>@<被控节点IP> ssh-copy-id root@192.168.1.101
执行此命令时,会要求你输入一次
192.168.1.101
的root
用户密码。成功后,后续从控制节点 SSH 连接该节点将不再需要密码。提示:如果你的被控节点数量很多,可以编写一个简单的 Shell 脚本或使用 Ansible 的
authorized_key
模块来批量分发密钥。
四、配置主机清单 (Inventory)
主机清单是一个文件,Ansible 通过它来知道要管理哪些服务器。默认的清单文件是 /etc/ansible/hosts
。
编辑主机清单文件
sudo vim /etc/ansible/hosts
定义主机和分组在文件末尾添加你的被控节点信息。你可以将服务器分组,方便统一管理。
# 示例:定义一个名为 [webservers] 的组,包含两台 web 服务器 [webservers] 192.168.1.101 ansible_user=root ansible_port=22 192.168.1.102 ansible_user=root ansible_port=22# 示例:定义一个名为 [dbservers] 的组,包含一台数据库服务器 [dbservers] 192.168.1.201 ansible_user=root# 你也可以为整个组设置变量 [webservers:vars] ansible_python_interpreter=/usr/bin/python3# 定义一个包含所有服务器的组 [all:children] webservers dbservers
[webservers]
:方括号内是组名。192.168.1.101
:被控节点的 IP 地址或主机名。ansible_user=root
:指定 SSH 登录的用户。ansible_port=22
:指定 SSH 端口(默认为 22,可以省略)。
五、测试 Ansible 连通性
一切准备就绪后,使用 Ansible 的 ping
模块来测试与被控节点的连通性。这是验证部署是否成功的关键一步。
测试所有节点
ansible all -m ping
测试指定分组
ansible webservers -m ping
如果一切正常,你会看到类似以下的输出,状态为 SUCCESS
:
192.168.1.101 | SUCCESS => {"changed": false,"ping": "pong"
}
192.168.1.102 | SUCCESS => {"changed": false,"ping": "pong"
}
至此,你的 Ansible 环境已经成功部署并可以开始使用了!