自动化运维平台搭建实战:Ansible从入门到批量部署
为什么选择Ansible搭建自动化运维平台
对于刚接触服务器运维的同学,手动登录每台机器执行命令既低效又容易出错。自动化运维平台搭建的核心目标就是摆脱这种重复劳动。
Ansible 最大的优势是无需在被管节点安装客户端,通过 SSH 就能批量执行任务,学习成本低、部署快,非常适合零基础团队作为入门方案。
本文以 CentOS 7/8 为例,从零开始安装 Ansible、配置主机清单、编写第一个 Playbook,并给出常见踩坑点和验证方法。
前置准备:环境和密钥配置
在开始之前,你需要一台控制节点(管理机器)和至少一台被管节点(目标服务器)。
两者网络互通,并且控制节点能通过 SSH 访问被管节点。
在控制节点安装 Ansible
控制节点建议使用 Linux 系统。
SSH 登录后执行:
# 添加 EPEL 源(CentOS 7/8)
sudo yum install -y epel-release
# 安装 Ansible
sudo yum install -y ansible
安装完成后验证版本:
ansible --version
输出类似 ansible 2.9.x 即表示成功。
如果你的系统是 Ubuntu,使用 sudo apt install ansible。
配置 SSH 免密登录
Ansible 默认通过 SSH 执行任务,所以需要让控制节点能无密码登录被管节点。
在控制节点生成密钥对(如果已有则跳过):
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa
将公钥复制到被管节点:
ssh-copy-id root@被管节点IP
输入一次密码后,后续登录就不再需要密码了。
测试免密是否生效:
ssh root@被管节点IP "hostname"
如果直接返回主机名,说明配置成功。
编写主机清单并执行基础命令
Ansible 使用 主机清单(Inventory) 来管理所有被管节点。
默认清单文件在 /etc/ansible/hosts,你也可以自定义。
编辑 /etc/ansible/hosts,添加被管节点:
[webservers]
192.168.1.101
192.168.1.102
[dbservers]
192.168.1.201 ansible_user=root
这里 [webservers] 和 [dbservers] 是组名,可以按功能分组。ansible_user 指定 SSH 用户,不写则默认使用当前用户。
然后执行第一条 Ansible 命令,测试连通性:
ansible all -m ping
如果被管节点返回 "pong": true,说明 Ansible 能正常工作。
随后我们可以批量执行一个系统命令,比如查看所有 web 服务器的内存使用:
ansible webservers -m shell -a "free -h"
这里的 -m shell 表示使用 shell 模块,-a 后跟要执行的命令。
这是最基础的自动化操作。
编写第一个Playbook实现批量部署
Playbook 是 Ansible 的核心,用 YAML 格式定义任务步骤。
下面以部署 Nginx 并启动服务为例,创建一个 deploy_nginx.yml:
---
- name: 部署 Nginx 到 web 服务器
hosts: webservers
become: yes
tasks:
- name: 安装 nginx
yum:
name: nginx
state: present
- name: 启动并设置开机自启
service:
name: nginx
state: started
enabled: yes
- name: 拷贝自定义首页(可选)
copy:
src: /tmp/index.html
dest: /usr/share/nginx/html/index.html
become: yes 表示使用 sudo 提权。
执行 Playbook:
ansible-playbook deploy_nginx.yml
执行过程中会显示每个任务的执行结果,绿色代表成功,红色代表失败。
部署完成后,用浏览器访问被管节点的 IP 就能看到 Nginx 欢迎页了。
避坑指南与高频问题
常见错误:无法连接或认证失败
检查点:
- 控制节点能否 SSH 登录被管节点?重新执行
ssh root@IP测试。 - 如果被管节点更改了 SSH 端口,需要在主机清单中设置
ansible_port=2222。 - 首次连接时如果出现
HOST KEY NOT FOUND,可以设置host_key_checking=False(修改/etc/ansible/ansible.cfg或在 Playbook 中添加环境变量)。
模块执行报错:module (yum) is missing arguments
YAML 缩进错误是新手最常犯的。
确保 yum: 下面的行缩进两个空格,且 name 和 state 对齐。
Playbook 运行超时怎么办?
如果任务涉及大量安装或大文件传输,可以在 /etc/ansible/ansible.cfg 中调大超时时间:
[defaults]
timeout = 60
如何验证自动化运维平台是否正常运行?
执行 ansible all -m command -a "uptime",查看所有机器返回的运行时间;
或者重新运行 Playbook 保证幂等性(多次运行结果不变)。
如果想深入学习,可以先掌握常见模块(copy、file、yum、service、user),再结合变量和模板实现更复杂的部署流程。自动化运维平台搭建是一个持续优化的过程,从简单的批量命令开始,逐步积累 Playbook 库,就能构建起适合自己团队的自动化体系。