Ansible 自动化运维

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,实现运维即代码。