[1. Ansible 概述与运行机制](#1. Ansible 概述与运行机制)
[1.1 Ansible 简介](#1.1 Ansible 简介)
[1.2 工作机制](#1.2 工作机制)
[1.3 Role(角色)](#1.3 Role(角色))
[2. Ansible 安装与部署](#2. Ansible 安装与部署)
[2.1 环境示例](#2.1 环境示例)
[2.2 安装步骤](#2.2 安装步骤)
[2.3 配置免密登录](#2.3 配置免密登录)
[3. Ansible 常用命令与模块操作](#3. Ansible 常用命令与模块操作)
[3.1 command 模块(默认模块)](#3.1 command 模块(默认模块))
[3.2 shell 模块](#3.2 shell 模块)
[3.3 cron 模块(计划任务)](#3.3 cron 模块(计划任务))
[3.4 user 模块(用户管理)](#3.4 user 模块(用户管理))
[3.5 group 模块(用户组管理)](#3.5 group 模块(用户组管理))
[3.6 copy 模块(文件复制)](#3.6 copy 模块(文件复制))
[3.7 file 模块(文件管理)](#3.7 file 模块(文件管理))
[3.8 hostname 模块(修改主机名)](#3.8 hostname 模块(修改主机名))
[3.9 ping 模块(检测连通性)](#3.9 ping 模块(检测连通性))
[3.10 yum 模块(软件包管理)](#3.10 yum 模块(软件包管理))
[3.11 service/systemd 模块(服务管理)](#3.11 service/systemd 模块(服务管理))
[3.12 script 模块(执行本地脚本)](#3.12 script 模块(执行本地脚本))
[3.13 setup 模块(收集节点信息)](#3.13 setup 模块(收集节点信息))
[4. Inventory 主机清单与变量配置](#4. Inventory 主机清单与变量配置)
[4.1 主机分组](#4.1 主机分组)
[4.2 常用变量](#4.2 常用变量)
[4.3 基础分组与主机变量](#4.3 基础分组与主机变量)
[4.4 组变量](#4.4 组变量)
[4.5 组嵌套(children)](#4.5 组嵌套(children))
[5. 总结](#5. 总结)
前言
在现代运维环境中,自动化已成为提升效率、降低出错率的关键。本文将通过 Ansible 工具,带你了解其概述、安装、常用模块操作及主机清单管理,快速上手自动化运维。
1. Ansible 概述与运行机制
1.1 Ansible 简介
Ansible 是一款面向类 Unix 系统的开源自动化配置与管理工具,由 Python 编写,具有以下特点:
-
轻量级:无需在被管理节点安装客户端
-
安全高效:通过 SSH 与节点通信
-
易扩展:支持 YAML + Jinja2 模板,便于编排复杂任务
-
社区活跃:2015 年被 Red Hat 收购,拥有广泛用户基础
1.2 工作机制
Ansible 通过 SSH 将模块推送到被管理节点执行,执行完成后会自动删除,既安全又高效。它的核心组件包括:
-
Ansible 核心引擎
-
Modules 模块(内置或自定义)
-
Plugins 插件(补充模块功能)
-
Playbooks 剧本(定义多任务操作)
-
Inventory 主机清单(管理主机资源)
1.3 Role(角色)
当 Playbook 规模扩大时,可以用 Role 将任务模块化管理。角色具备以下优势:
-
按目录结构组织任务、变量和模板
-
代码复用性高,可被多次调用
-
易于团队协作和维护
2. Ansible 安装与部署
2.1 环境示例
类型 | IP 地址 |
---|---|
管理端 | 192.168.10.50 |
被管理端1 | 192.168.10.251 |
被管理端2 | 192.168.10.252 |
2.2 安装步骤
# 安装 EPEL 源
yum install -y epel-release
# 安装 Ansible
yum install -y ansible
默认目录结构:
/etc/ansible/
├── ansible.cfg # 配置文件
├── hosts # 主机清单
└── roles/ # 公共角色目录
2.3 配置免密登录
ssh-keygen -t rsa
sshpass -p '123456' ssh-copy-id root@192.168.10.251
sshpass -p '123456' ssh-copy-id root@192.168.10.252
3. Ansible 常用命令与模块操作
Ansible 的命令基本格式:
ansible <组名或主机> -m <模块> -a <参数>
3.1 command 模块(默认模块)
- 用于远程执行命令,不支持管道或重定向
ansible 192.168.10.251 -m command -a 'date'
ansible webservers -a 'ls /'
常用参数:
-
chdir
:执行前进入指定目录 -
creates
:文件存在则跳过执行
3.2 shell 模块
- 支持管道和 shell 特性
ansible dbservers -m shell -a 'echo 123456 | passwd --stdin test'
3.3 cron 模块(计划任务)
ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'
ansible webservers -m cron -a 'name="test crontab" state=absent'
3.4 user 模块(用户管理)
ansible dbservers -m user -a 'name="test01"'
ansible dbservers -m user -a 'name="test01" state=absent'
常用参数:name
、state
、system
、uid
、group
、shell
、password
3.5 group 模块(用户组管理)
ansible dbservers -m group -a 'name=mysql gid=306 system=yes'
3.6 copy 模块(文件复制)
ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'
ansible dbservers -m copy -a 'content="helloworld" dest=/opt/hello.txt'
3.7 file 模块(文件管理)
ansible dbservers -m file -a 'path=/opt/abc.txt state=touch' #创建文件
ansible dbservers -m file -a 'path=/opt/abc.txt state=absent' #删除文件
3.8 hostname 模块(修改主机名)
ansible dbservers -m hostname -a "name=mysql01"
3.9 ping 模块(检测连通性)
ansible all -m ping
3.10 yum 模块(软件包管理)
ansible webservers -m yum -a 'name=httpd'
ansible webservers -m yum -a 'name=httpd state=absent'
3.11 service/systemd 模块(服务管理)
ansible webservers -m service -a 'enabled=true name=httpd state=started'
3.12 script 模块(执行本地脚本)
ansible webservers -m script -a 'test.sh'
3.13 setup 模块(收集节点信息)
ansible dbservers -m setup -a 'filter=*ipv4'
4. Inventory 主机清单与变量配置
4.1 主机分组
在 /etc/ansible/hosts
文件中可以按组管理主机:
[webservers]
192.168.10.251 ansible_port=22 ansible_user=root ansible_password=abc1234
[dbservers]
192.168.10.252
还支持:
-
指定端口:
192.168.10.251:2222
-
列表匹配:
192.168.10.1[2:5]
-
通配符:
db-[a:f].example.org
4.2 常用变量
变量名 | 含义 |
---|---|
ansible_host | 节点 IP |
ansible_port | SSH 端口(默认 22) |
ansible_user | SSH 用户 |
ansible_password | SSH 密码 |
ansible_ssh_private_key_file | 私钥文件 |
ansible_become | 提升权限 |
ansible_become_method | 提升方式(sudo/su) |
4.3 基础分组与主机变量
[webservers]
192.168.10.50 ansible_port=2222 ansible_user=root ansible_password=abc1234
192.168.10.251 ansible_port=22 ansible_user=root ansible_password=abc1234
[dbservers]
192.168.10.252 ansible_user=dbadmin ansible_password=xyz1234
上面每台主机都可以有自己的连接参数。
4.4 组变量
在 [组名:vars]
中定义,整个组共享:
[webservers:vars]
ansible_user=root
ansible_password=abc1234
[dbservers:vars]
ansible_user=dbadmin
ansible_password=xyz1234
4.5 组嵌套(children)
可以把多个组组合成一个大组:
[nginx]
192.168.10.50
192.168.10.251
[apache]
192.168.10.252
[webs:children]
nginx
apache
5. 总结
Ansible 以其轻量、无需客户端和模块丰富的特性,成为自动化运维的热门选择。通过本文的内容,你可以快速搭建 Ansible 环境、熟悉常用模块操作并管理主机清单,助力企业实现高效、可重复的运维自动化。