第十三天 - Ansible基础架构 - YAML语法与Playbook - 练习:批量配置部署
Ansible自动化运维实战:从入门到批量配置部署
前言:自动化运维的时代选择
在服务器规模呈指数级增长的今天,手工操作已无法满足运维需求。本文将手把手教你使用Ansible这个明星级自动化工具,通过YAML语法和Playbook实现批量配置部署。即使你是零基础的小白,也能在2小时内掌握自动化运维的核心技能!
一、Ansible基础架构解析
1.1 核心组件与工作原理
组件说明:
- Inventory:被管设备清单(IP/域名集合)
- Modules:执行单元(共3500+内置模块)
- Playbook:自动化剧本(YAML格式)
- Plugins:扩展功能(日志、缓存等)
1.2 环境搭建(Ubuntu 20.04示例)
# 安装Ansible
sudo apt update
sudo apt install ansible -y
# 配置SSH免密登录
ssh-keygen -t rsa
ssh-copy-id user@target-server
# 验证安装
ansible --version
二、YAML语法速成课
2.1 基础语法规则
# 列表表示法
packages:
- nginx
- mysql-server
- python3
# 字典结构
server:
name: web01
ip: 192.168.1.100
ports: [80, 443]
# 多行文本
motd: |
欢迎登录生产环境服务器!
操作前请三思!
2.2 Ansible专用语法
# 变量定义
vars:
http_port: 8080
# 任务执行
tasks:
- name: 创建目录
file:
path: /data/logs
state: directory
mode: '0755'
三、Playbook深度解析
3.1 Playbook结构解剖
---
- name: 基础环境配置
hosts: webservers
become: yes
vars:
timezone: Asia/Shanghai
tasks:
- name: 设置时区
timezone:
name: "{{ timezone }}"
handlers:
- name: 重启cron服务
service:
name: cron
state: restarted
3.2 核心元素说明
- hosts:目标主机组
- vars:全局变量
- tasks:执行任务列表
- handlers:触发操作
- tags:任务标签
四、批量配置部署实战
4.1 场景需求
- 为20台Web服务器部署Nginx
- 统一配置防火墙规则
- 设置标准化时区
- 部署后自动检查服务状态
4.2 完整Playbook示例
---
- name: Web服务器标准化部署
hosts: web_cluster
become: yes
vars:
nginx_version: 1.18.0
allowed_ports: [80, 443]
tasks:
- name: 更新软件源
apt:
update_cache: yes
cache_valid_time: 3600
- name: 安装Nginx
apt:
name: nginx={{ nginx_version }}
state: present
- name: 配置防火墙
ufw:
rule: allow
port: "{{ item }}"
loop: "{{ allowed_ports }}"
- name: 拷贝Nginx配置
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: 重启Nginx服务
handlers:
- name: 重启Nginx服务
service:
name: nginx
state: restarted
- name: 验证部署
command: nginx -t
register: result
failed_when: "'syntax is ok' not in result.stdout"
五、Ansible进阶技巧
5.1 角色(Roles)组织
site.yml
roles/
├── common/
│ ├── tasks/
│ ├── handlers/
│ └── vars/
└── webserver/
├── templates/
└── files/
5.2 变量优先级管理
- 命令行参数(-e)
- Playbook变量
- Host变量
- Group变量
- Inventory变量
5.3 动态Inventory
#!/usr/bin/env python
import json
hosts = {
"web": ["192.168.1.101", "192.168.1.102"],
"db": ["10.0.0.101"]
}
print(json.dumps(hosts))
六、生产环境最佳实践
6.1 安全配置建议
# ansible.cfg
[defaults]
host_key_checking = False
private_key_file = ~/.ssh/ops_key
log_path = /var/log/ansible.log
[privilege_escalation]
become=True
become_method=sudo
become_user=root
6.2 性能优化方案
- 开启pipelining
- 使用SSH长连接
- 设置facts缓存
- 并行执行策略
七、调试与排错指南
7.1 常用调试命令
# 语法检查
ansible-playbook --syntax-check deploy.yml
# 试运行(Dry Run)
ansible-playbook -C deploy.yml
# 分步执行
ansible-playbook --step deploy.yml
# 指定标签执行
ansible-playbook --tags "firewall" deploy.yml
7.2 常见错误处理
# 权限问题处理
- name: 修复目录权限
file:
path: /data
owner: www-data
group: www-data
recurse: yes
state: directory
八、学习资源推荐
- Ansible官方文档(https://docs.ansible.com)
- 《Ansible权威指南》
- Ansible Galaxy社区(https://galaxy.ansible.com)
- Red Hat Ansible实验平台
结语:自动化运维的星辰大海
通过本教程,我们完成了:
- Ansible基础架构认知 → YAML语法精通 → 完整Playbook开发
- 实现20台服务器批量部署
- 掌握生产级最佳实践
课后挑战:尝试为数据库服务器编写自动化部署Playbook,要求包含:
- MySQL 8.0安装
- 安全加固配置
- 主从复制配置
- 监控探针部署