Ansible 自动化运维实战指南
Ansible是目前最流行的开源自动化运维工具之一,无需在被管理节点安装Agent,通过SSH连接即可执行任务,极大简化了批量服务器管理工作。
一、Ansible核心概念
- Inventory:主机清单,定义被管理的服务器列表和分组
- Playbook:剧本,YAML格式定义自动化任务流程
- Module:模块,Ansible内置数千个功能模块(如copy、yum、service、template)
- Role:角色,将相关任务、变量、文件打包复用
- Task:任务,Playbook中的单个操作步骤
二、安装与初始配置
pip3 install ansible # 在控制节点安装 # 配置Inventory文件(/etc/ansible/hosts) [webservers] 192.168.1.10 ansible_user=deploy ansible_ssh_private_key_file=~/.ssh/id_rsa 192.168.1.11 [databases] 192.168.1.20 [production:children] webservers databases # 测试连通性 ansible all -m ping ansible webservers -m command -a "uptime"
三、Playbook基础示例
--- # deploy-nginx.yml
- name: Deploy Nginx Web Server
hosts: webservers
become: yes # sudo权限
vars:
nginx_port: 80
tasks:
- name: Install Nginx
yum:
name: nginx
state: present
- name: Copy Nginx config
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Reload Nginx
- name: Start Nginx service
service:
name: nginx
state: started
enabled: yes
handlers:
- name: Reload Nginx
service:
name: nginx
state: reloaded
# 执行Playbook
ansible-playbook deploy-nginx.yml --check # 演习模式
ansible-playbook deploy-nginx.yml # 实际执行
四、变量与模板(Jinja2)
# group_vars/webservers.yml(组变量)
nginx_worker_processes: "{{ ansible_processor_vcpus }}"
nginx_worker_connections: 10000
# templates/nginx.conf.j2
worker_processes {{ nginx_worker_processes }};
events {
worker_connections {{ nginx_worker_connections }};
}
# 密码等敏感变量使用ansible-vault加密
ansible-vault create secrets.yml
ansible-vault view secrets.yml
ansible-playbook site.yml --ask-vault-pass
五、Role组织复杂任务
ansible-galaxy init roles/nginx # 创建Role目录结构 # 生成的目录结构: # roles/nginx/ # tasks/main.yml 主任务文件 # handlers/main.yml 处理器 # templates/ Jinja2模板 # files/ 静态文件 # vars/main.yml 变量 # defaults/main.yml 默认变量 # meta/main.yml 元信息
六、实用运维场景
批量部署应用:拉取代码、安装依赖、重启服务一条命令完成;滚动更新:serial参数控制每次更新几台,实现蓝绿发布;批量执行命令:ansible all -a “df -h” 一键查看所有服务器磁盘;收集系统信息:ansible all -m setup 收集所有主机的系统信息;定时巡检:结合cron定时运行健康检查Playbook。
七、最佳实践
- 所有Playbook和配置文件纳入Git版本控制
- 使用ansible-lint检查Playbook语法和最佳实践
- 使用ansible-vault加密所有敏感变量
- 任何变更先在测试环境执行,验证后再在生产执行
- 为Playbook编写README,说明用途和变量含义
八、总结
Ansible以其无Agent、YAML配置、幂等执行等特性,成为中小规模基础设施自动化的首选工具。从简单的批量命令执行到复杂的应用部署流程,Ansible都能胜任。建议从日常重复操作开始,逐步将运维工作转化为可版本控制的Playbook,实现运维即代码。