Ansible 自动化运维:集中化管理服务器实战指南
前言
1. Ansible 概述与运行机制
1.1 Ansible 简介
1.2 工作机制
1.3 Role(角色)
2. Ansible 安装与部署
2.1 环境示例
2.2 安装步骤
2.3 配置免密登录
3. Ansible 常用命令与模块操作
3.1 command 模块(默认模块)
3.2 shell 模块
3.3 cron 模块(计划任务)
3.4 user 模块(用户管理)
3.5 group 模块(用户组管理)
3.6 copy 模块(文件复制)
3.7 file 模块(文件管理)
3.8 hostname 模块(修改主机名)
3.9 ping 模块(检测连通性)
3.10 yum 模块(软件包管理)
3.11 service/systemd 模块(服务管理)
3.12 script 模块(执行本地脚本)
3.13 setup 模块(收集节点信息)
4. Inventory 主机清单与变量配置
4.1 主机分组
4.2 常用变量
4.3 基础分组与主机变量
4.4 组变量
4.5 组嵌套(children)
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 环境、熟悉常用模块操作并管理主机清单,助力企业实现高效、可重复的运维自动化。