一、为什么要用Ansible

IDC运维每天面对几十上百台服务器:改个NTP配置要一台台登上去敲命令,升级个软件包要重复操作N遍,既慢又容易出错。Ansible就是来解决这个问题的——它基于SSH,无需在被管理端安装任何Agent,一条命令就能在几百台机器上同时执行任务,是批量运维的事实标准。

二、Ansible核心概念速览

Ansible采用主控端/被管端模型,主控端只需要Python环境,被管端只需要能SSH登录。三个核心概念:

# 1. Inventory(清单):定义要管理的主机
[web]
192.168.1.11
192.168.1.12

[database]
db01.example.com

# 2. Playbook(剧本):用YAML写任务流程
# 3. Module(模块):具体的操作单元,如yum、copy、service

理解这三个概念,就等于拿到了Ansible的钥匙:Inventory告诉它管哪些机器,Playbook告诉它做什么,Module告诉它具体怎么做。

三、快速部署Ansible环境

# 主控端安装(CentOS/RHEL系)
yum install -y epel-release
yum install -y ansible

# Ubuntu/Debian系
apt install -y ansible

# 配置SSH免密(批量运维必备)
ssh-keygen -t rsa -b 4096
ssh-copy-id root@192.168.1.11
ssh-copy-id root@192.168.1.12

# 验证连通性:对所有主机执行ping模块
ansible all -m ping

看到每台主机返回 pong,说明控制通道已经打通。生产环境建议使用专用运维账号+sudo提权,不要直接用root。

四、Ad-Hoc命令:一条命令干完一件事

# 批量检查磁盘使用率
ansible all -m shell -a "df -h | grep -E '^/dev'"

# 批量查看负载
ansible all -m shell -a "uptime"

# 批量安装软件包
ansible web -m yum -a "name=nginx state=present"

# 批量分发配置文件
ansible web -m copy -a "src=/etc/nginx/nginx.conf dest=/etc/nginx/nginx.conf owner=root group=root mode=0644"

# 批量重启服务
ansible web -m service -a "name=nginx state=restarted"

Ad-Hoc适合临时性、一次性的操作。日常巡检脚本、临时维护命令都可以用它一把梭。

五、Playbook:把运维流程固化成剧本

临时命令做不了复杂流程,这时候就要写Playbook。下面是一个完整的Nginx部署剧本:

---
- name: 部署Nginx并配置站点
  hosts: web
  become: yes
  tasks:
    - name: 安装Nginx
      yum:
        name: nginx
        state: present
    - name: 分发站点配置
      copy:
        src: files/example.conf
        dest: /etc/nginx/conf.d/example.conf
      notify: reload nginx
    - name: 启动并设置开机自启
      service:
        name: nginx
        state: started
        enabled: yes
  handlers:
    - name: reload nginx
      service:
        name: nginx
        state: reloaded

执行剧本:ansible-playbook deploy_nginx.yml。Playbook具有幂等性——重复执行不会产生副作用,这是它比手工操作最大的优势。

六、生产常用技巧与注意事项

# 1. 分批滚动执行,避免全部机器同时重启
ansible-playbook upgrade.yml --limit web1
ansible-playbook upgrade.yml --limit web2

# 2. 只看执行结果不真正执行(预演)
ansible-playbook deploy.yml --check

# 3. 指定某台机器执行
ansible-playbook deploy.yml --limit 192.168.1.11

# 4. 提高并发
ansible-playbook deploy.yml -f 20

几个生产实践要点:一是重要变更先在一台机器验证再批量;二是敏感信息用ansible-vault加密;三是配合版本管理工具(Git)管理Playbook,每次变更留痕可回溯;四是对外网SSH端口建议改成非默认端口并限制来源IP。

七、总结

Ansible的价值在于把重复劳动变成可复用的剧本:新服务器上线,跑一遍初始化剧本,装监控、配NTP、加固SSH、建账号全部自动完成;日常巡检,一条命令收集所有机器的磁盘、内存、负载状态。从今天开始,把第一条重复操作写成Playbook,运维效率的提升立竿见影。