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 deniedplay 里加 become: yes
分类: Ansible