Ansible 自动化运维:批量管理服务器的命令速查
分类:Ansible
标签: Ansible、自动化、playbook、inventory、批量运维、ad-hoc
摘要: 一台台手动配太累,Ansible 就是”写一次配置,一键推到多台服务器”。本文从搭建三台测试机讲起,把 inventory、ad-hoc 命令、playbook 剧本的用法和实验环境说清,附踩坑记录。
一、Ansible 是什么
Ansible 是一套”批量执行”的工具:你在控制端写一份配置/命令,它用 SSH 一键推送到多台目标机器执行。
三种玩法:
– ad-hoc:临时敲一条命令,批量跑(如每台看下内存)。
– playbook:写成一个剧本 xxx.yml,定义一系列操作,可重复执行。
– inventory:清单文件,就是”要管哪些机器”的名单。
二、环境搭建(三台测试机)
我搭了三台 Ubuntu 虚拟机来做实验:
– 控制端:装 Ansible 的机器。
– 目标端:ans1 / ans2 等要管理的机器,需配好 SSH 免密登录。
常见坑:配置目标机 50-cloud-init.yaml 时网卡名字写错,导致断连后连不上——改网络配置前先 ip addr 确认真实网卡名。
三、inventory 清单(管哪些机器)
/etc/ansible/hosts(或项目内 inventory 文件):
[web]
192.168.47.11
192.168.47.12
[db]
192.168.47.13
分组的价值:可以对 web 组统一操作、对 db 组单独操作。
四、ad-hoc 命令(临时批量执行)
# 测试连通
ansible web -m ping -i inventory
# 批量执行命令(看内存)
ansible web -a "free -h" -i inventory
# 批量执行命令(看磁盘)
ansible all -a "df -h" -i inventory
-m 指定模块(ping / copy / shell 等),-a 传命令参数,-i 指定清单。
五、playbook 剧本(一键配多台)
写一个剧本 nginx.yml,让它自动在一组机器上装并启动 nginx:
---
- name: 安装并启动 nginx
hosts: web
become: yes
tasks:
- name: 安装 nginx
apt:
name: nginx
state: present
- name: 启动 nginx
service:
name: nginx
state: started
enabled: yes
运行:
ansible-playbook nginx.yml -i inventory
playbook 的好处:可重复执行、结果幂等——跑多少遍结果一致,不会重复装坏。
核心模块速记:
| 模块 | 作用 | 例子 |
|——|——|——|
| ping | 测连通 |-m ping|
| command/shell | 执行命令 |-a "free -h"|
| copy | 分发文件 |-m copy -a "src=a dest=/tmp/"|
| apt/yum | 装包 |apt: name=nginx state=present|
| service | 管理服务 |service: name=nginx state=started|
| file | 建目录/权限 |file: path=/data state=directory|
六、踩坑速记
| 坑 | 现象 | 解决 |
|---|---|---|
| 网卡名写错 | 断连连不上 | 改配置前 ip addr 确认真实网卡 |
| 免密失败 | Permission denied | 配好 SSH 密钥/authorized_keys |
| 批量超时 | 部分机器失败 | 看 -v 详细输出定位 |
| 没权限 | permission denied | play 里加 become: yes |