Ansible

自动化运维工具 Ansible:集中化管理服务器完全指南

一、Ansible 概述和运行机制

1.1 Ansible 是什么?

Ansible 是一款面向类 Unix 系统的自由开源配置和自动化工具,使用 Python 编写。与 SaltStack、Puppet、Chef 等工具类似,但具备以下独特优势:

  • 无需客户端:被管理节点无需安装额外软件
  • 基于 SSH:通过 SSH 协议进行通信,安全可靠
  • YAML + Jinja2:使用简洁的 YAML 配置文件和 Jinja2 模板语言

官方网站https://www.ansible.com/

行业背景

  • 2015 年 10 月,红帽(Red Hat)以约 1-1.5 亿美元收购 Ansible
  • 成立于 2013 年,总部位于北卡罗来纳州达勒姆

1.2 Ansible 核心特点

  1. 部署简单:只需在管理端安装,被控端零配置
  2. SSH 协议:默认使用 SSH 管理设备
  3. 集中化管理:支持主从管理模式
  4. 配置简洁:功能强大且扩展性高
  5. 支持 API:可通过 Python 自定义模块
  6. Playbook:实现复杂任务配置和状态管理
  7. 云平台支持:对云计算和大数据平台支持良好

1.3 Ansible 工作机制

Ansible 通过 SSH 将模块推送到被管理节点执行,执行完毕后自动删除。核心组件包括:

  • Host Inventory:主机清单
  • Playbooks:任务剧本
  • Core Modules:核心模块
  • Custom Modules:自定义模块
  • Plugins:插件系统(邮件、日志等)

1.4 Ansible 核心架构

核心组成:

  1. Ansible:核心引擎
  2. Modules:内置核心模块和自定义模块
  3. Plugins:功能补充插件
  4. Playbooks:定义多任务操作
  5. Inventory:主机清单管理

1.5 Ansible 角色(Role)

随着环境复杂化,Playbook 可能变得庞大难维护。Role 提供了模块化管理方案:

  • 将任务组织为独立、可复用的单元
  • 支持外部加载任务、处理程序和变量
  • 可关联静态文件和模板
  • 严格的目标结构要求,便于复用

二、Ansible 环境安装部署

2.1 环境准备示例

类型 IP地址
管理端 192.168.10.23
被管理端 192.168.10.14
被管理端 192.168.10.15

2.2 管理端安装步骤

bash 复制代码
# 安装 EPEL 源
yum install -y epel-release

# 安装 Ansible
yum install -y ansible

2.3 目录结构说明

复制代码
/etc/ansible/
    ├── ansible.cfg    # 配置文件(一般无需修改)
    ├── hosts          # 主机清单文件
    └── roles/         # 公共角色目录

2.4 配置主机清单

编辑 /etc/ansible/hosts

ini 复制代码
[webservers]
192.168.10.14

[dbservers]
192.168.10.15

2.5 配置 SSH 免密登录

bash 复制代码
# 生成密钥对
ssh-keygen -t rsa

# 复制公钥到被管理端
sshpass -p '123456' ssh-copy-id root@192.168.10.14
sshpass -p '123456' ssh-copy-id root@192.168.10.15

三、Ansible 基础命令及模块操作

3.1 命令基本格式

bash 复制代码
ansible <组名> -m <模块名> -a <参数>

3.2 常用模块详解

3.2.1 command 模块

远程执行命令(不支持管道/重定向)

bash 复制代码
ansible-doc -s command    # 查看模块说明

ansible webservers -m command -a 'date'    # 执行 date 命令
ansible all -m command -a 'ls /'           # 所有主机执行 ls

常用参数

  • chdir:执行前切换目录
  • creates:文件存在则不执行
  • removes:文件存在则执行
3.2.2 shell 模块

支持管道和 shell 特性

bash 复制代码
ansible observers -m shell -a 'echo 123456 | passwd --stdin test'
3.2.3 cron 模块

管理计划任务

bash 复制代码
# 添加计划任务
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.2.4 user 模块

用户管理

bash 复制代码
# 创建用户
ansible observers -m user -a 'name="test01"'

# 删除用户
ansible observers -m user -a 'name="test01" state=absent'
3.2.5 group 模块

用户组管理

bash 复制代码
# 创建组
ansible observers -m group -a 'name=mysql gid=306 system=yes'

# 用户加组
ansible observers -m user -a 'name=test01 uid=306 system=yes group=mysql'
3.2.6 copy 模块

文件复制

bash 复制代码
# 复制文件
ansible observers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'

# 写入内容
ansible observers -m copy -a 'content="helloworld" dest=/opt/hello.txt'
3.2.7 file 模块

文件属性管理

bash 复制代码
# 修改属性
ansible observers -m file -a 'owner=test01 group=mysql mode=644 path=/opt/fstab.bak'

# 创建链接
ansible observers -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link'

# 创建文件
ansible observers -m file -a "path=/opt/abc.txt state=touch"
3.2.8 hostname 模块

修改主机名

bash 复制代码
ansible observers -m hostname -a "name=mysql01"
3.2.9 ping 模块

连通性测试

bash 复制代码
ansible all -m ping
3.2.10 yum 模块

软件包管理

bash 复制代码
# 安装软件
ansible webservers -m yum -a 'name=httpd'

# 卸载软件
ansible webservers -m yum -a 'name=httpd state=absent'
3.2.11 service 模块

服务管理

bash 复制代码
# 启动服务并设置开机自启
ansible webservers -m service -a 'enabled=true name=httpd state=started'
3.2.12 script 模块

执行本地脚本

bash 复制代码
# 编写测试脚本
vim test.sh
#!/bin/bash
echo "hello ansible from script" > /opt/script.txt

# 执行脚本
ansible webservers -m script -a 'test.sh'
3.2.13 setup 模块

收集节点信息

bash 复制代码
# 获取所有信息
ansible webservers -m setup

# 筛选特定信息
ansible observers -m setup -a 'filter=*ipv4'

四、Inventory 主机清单与变量配置

4.1 主机分组配置

ini 复制代码
[webservers]
192.168.10.14:2222    # 自定义 SSH 端口
192.168.10.1[2:5]     # 范围匹配

[dbservers]
db-[a:f].example.org   # 模式匹配

4.2 常用 Inventory 变量

变量名 含义
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/runas)
ansible_become_user 提升为目标用户
ansible_become_password 提升密码

4.3 变量配置示例

主机变量
ini 复制代码
[webservers]
192.168.10.14 ansible_port=22 ansible_user=root ansible_password=abc1234
组变量
ini 复制代码
[webservers:vars]
ansible_user=root
ansible_password=abc1234

[all:vars]
ansible_port=22
组嵌套
ini 复制代码
[nginx]
192.168.10.20
192.168.10.21

[apache]
192.168.10.30
192.168.10.31

[webs:children]
nginx
apache

总结

Ansible 作为一款轻量级、功能强大的自动化运维工具,通过 SSH 协议和 YAML 配置语言,实现了对服务器的集中化管理和自动化操作。本文详细介绍了 Ansible 的基础概念、安装配置、常用模块和主机清单管理,为初学者提供了完整的学习路径。

掌握 Ansible 可以帮助运维人员提高工作效率,实现基础设施的代码化管理,是现代 DevOps 实践中不可或缺的重要工具。

相关推荐
祺风挽楠8 天前
ansible编辑
网络·ansible
芳心粽伙饭8 天前
Ansible课后作业
ansible
烁3479 天前
Ansible初识
ansible
烁3479 天前
Ansible安装部署调试
ansible
烁3479 天前
Ansible命令
ansible
小义_10 天前
【Ansible】(三)基础配置与连接设置
云原生·ansible
炸炸鱼.14 天前
Ansible 企业级实战:Playbook 与 Roles 完全指南
网络·ansible
风曦Kisaki15 天前
# 自动化运维Day03:Ansible模块进阶(setup,debug),四种常用变量,进阶语法;Ansible Roles(角色)
运维·自动化·ansible
炸炸鱼.17 天前
Ansible 部署应用:从入门到精通
ansible
Peace17 天前
【Ansible】
linux·运维·ansible