Ansible 自动化技术操作指南:从入门到实践

Ansible 自动化技术操作指南:从入门到实践

文章内容涵盖入门概念、安装配置、核心组件、常用命令、Playbook 编写实例,以及在实际项目中的最佳实践。


🧩 Ansible 技术操作指南:从入门到实践

作者: Weekend
发布日期: 2025年10月
实验操作系统: Ubuntu 22.04 LTS
标签: DevOps、自动化运维、Ansible、Linux、CI/CD


一、Ansible 简介

什么是 Ansible?

Ansible 是一个轻量级的 自动化配置管理工具,主要用于:

  • 批量部署应用;
  • 配置服务器环境;
  • 持续交付(CI/CD);
  • 运维自动化脚本执行。

它的最大特点是:

  • 无客户端(Agentless):只需 SSH 即可操作远程节点;
  • 使用 YAML 编写 Playbook:语法简单,易读易维护;
  • 幂等性(Idempotent):多次执行结果一致,不会重复操作。

二、环境准备与安装

1. 安装 Ansible

在 Ubuntu / Debian 系统上:

1
2
sudo apt update
sudo apt install -y ansible

在 CentOS / RHEL 系统上:

1
2
sudo yum install -y epel-release
sudo yum install -y ansible

验证安装是否成功:

1
ansible --version

2. 配置 SSH 免密登录

Ansible 通过 SSH 与目标节点通信,因此需要配置免密访问:

1
2
ssh-keygen -t rsa
ssh-copy-id [email protected]

三、核心概念解析

概念 说明
Inventory 主机清单文件,定义要管理的服务器。
Playbook 自动化任务脚本,使用 YAML 格式编写。
Task 任务,定义在 Playbook 中要执行的操作。
Module 模块,Ansible 的执行单元(如 copy、yum、shell)。
Role 模块化结构,用于组织复杂 Playbook。
Variable 变量,可在不同环境中动态替换参数。

四、Inventory 主机清单示例

一个简单的 inventory.yml 文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
all:
children:
webservers:
hosts:
web1:
ansible_host: 192.168.1.10
web2:
ansible_host: 192.168.1.11
dbservers:
hosts:
db1:
ansible_host: 192.168.1.12
vars:
ansible_user: root

📘 提示
可以通过命令行指定 Inventory 文件:
ansible -i inventory.yml all -m ping


五、常用命令速查表

命令 功能说明
ansible all -m ping 测试所有主机连接情况
ansible webservers -m shell -a "uptime" 在 webservers 组执行命令
ansible all -m copy -a "src=./index.html dest=/var/www/html/" 批量复制文件
ansible all -m yum -a "name=httpd state=present" 安装软件包
ansible-playbook -i inventory.yml site.yml 执行 Playbook

六、Playbook 编写入门

一个基础的 site.yml Playbook 示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
---
- name: 部署 Web 服务
hosts: webservers
become: yes

tasks:
- name: 安装 Nginx
apt:
name: nginx
state: present
when: ansible_os_family == "Ubuntu"

- name: 启动 Nginx
service:
name: nginx
state: started
enabled: yes

- name: 部署首页文件
copy:
src: files/index.html
dest: /var/www/html/index.html

运行命令:

1
ansible-playbook -i inventory.yml site.yml

七、使用 Roles 优化结构

当项目变复杂时,可以使用 ansible-galaxy init 创建 Role 结构:

1
ansible-galaxy init roles/web

生成目录结构如下:

1
2
3
4
5
6
7
roles/
└── web/
├── tasks/main.yml
├── handlers/main.yml
├── templates/
├── files/
└── vars/main.yml

site.yml 中引用:

1
2
3
- hosts: webservers
roles:
- web

八、变量与模板(Jinja2)

vars/main.yml 中定义变量:

1
web_port: 8080

在模板 templates/nginx.conf.j2 中使用:

1
2
3
4
server {
listen {{ web_port }};
root /var/www/html;
}

Playbook 中应用:

1
2
3
4
- name: 部署 Nginx 配置
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/nginx.conf

九、实际案例:一键部署多节点环境

文件结构

1
2
3
4
5
6
7
project/
├── inventory.yml
├── site.yml
└── roles/
└── web/
├── tasks/main.yml
└── files/index.html

一键部署命令

1
ansible-playbook -i inventory.yml site.yml

实现内容:

  • 批量安装 Nginx;
  • 部署统一首页;
  • 启动服务;
  • 自动化完成所有节点配置。

十、最佳实践与技巧

  1. 使用 Roles 管理大型项目结构

  2. 通过 ansible-vault 加密敏感信息

    1
    ansible-vault create secrets.yml
  3. 结合 Git + CI/CD 实现自动化发布

  4. 使用 tags 精确执行部分任务

    1
    ansible-playbook site.yml --tags "deploy"
  5. 保持幂等性与安全性

    • 优先使用模块(如 aptservice)而非 shell
    • 测试 Playbook 时使用 --check 模式。

十一、总结

Ansible 是 DevOps 自动化体系中最优雅的一环。
它轻量、易学、无依赖,几乎适用于所有 Linux 环境。
无论是批量配置服务器、部署集群,还是持续交付流水线中执行配置任务,Ansible 都能让你的运维自动化之路更加高效稳定。


💡 最后总结:
未来的基础架构运维,都是「自动化优先」的。
学会 Ansible,不只是学一门工具,而是掌握「让机器替你干活」的能力。