Ansible 是轻量级无代理的 Linux 自动化工具,依赖 SSH 和 Python,通过 Inventory、Module、Playbook、Role 等组件实现幂等性批量运维。

Ansible 是 Linux 系统运维自动化中最轻量、最易上手的批量管理工具之一,无需在被控端安装代理(agentless),仅依赖 SSH 和 Python 即可完成配置部署、服务管理、应用发布等任务。
Ansible 核心组件与运行逻辑
理解 Ansible 的工作方式是实战的前提。它由控制节点(Control Node)发起操作,通过 SSH 连接目标主机(Managed Nodes),执行模块(Module)或 Playbook 中定义的任务。所有操作基于 YAML 语法编写,强调可读性与幂等性——即多次执行结果一致,不会重复创建或覆盖已存在的配置。
关键组件包括:
- Inventory(主机清单):定义要管理的服务器列表,支持分组、变量嵌套、动态发现;
- Module(模块):如 copy、yum、systemd、user 等,是 Ansible 执行具体操作的最小单元;
- Playbook(剧本):YAML 文件,将多个任务按顺序组织,支持条件判断、循环、错误处理;
- Role(角色):标准化的目录结构,用于复用和共享功能模块,如 nginx 部署、MySQL 初始化等。
快速搭建 Ansible 控制环境
在 CentOS/RHEL 或 Ubuntu 上安装 Ansible 很简单:
- CentOS 8+:运行 dnf install ansible-core -y;
- Ubuntu:执行 apt update && apt install ansible -y;
- 建议配置免密 SSH 登录到所有目标主机,使用 ssh-copy-id user@host 分发公钥;
- 编辑 /etc/ansible/hosts 或自定义 inventory 文件,例如:
[web]
192.168.1.10
192.168.1.11
[db]
192.168.1.20
从命令行到 Playbook 的进阶实践
先用 ad-hoc 命令验证连通性和基础操作:
- ansible all -m ping 检查所有主机是否可达;
- ansible web -m copy -a "src=./nginx.conf dest=/etc/nginx/nginx.conf" 批量推送配置文件;
- ansible db -m yum -a "name=mariadb-server state=present" 统一安装软件包。
当任务变多时,改用 Playbook 提升可维护性。例如一个简单的 Web 服务部署剧本 deploy_nginx.yml:
---
- hosts: web
become: true
tasks:
- name: Install nginx
yum:
name: nginx
state: present
- name: Copy config file
copy:
src: files/nginx.conf
dest: /etc/nginx/nginx.conf
- name: Start and enable nginx
systemd:
name: nginx
state: started
enabled: true
执行命令:ansible-playbook deploy_nginx.yml
提升效率的实用技巧
真实运维中常需处理差异配置、敏感信息和执行安全:
- 用 vars_files 或 group_vars/ 目录分离变量,实现不同环境(dev/staging/prod)差异化部署;
- 敏感数据如密码、密钥用 ansible-vault 加密,避免明文暴露;
- 加入 ignore_errors: yes 或 failed_when 控制任务失败逻辑;
- 结合 --limit 参数临时限制执行范围,比如只更新某几台机器做灰度发布。
不复杂但容易忽略。










