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 实践中不可或缺的重要工具。

相关推荐
小白不想白a3 小时前
【ansible/K8s】K8s的自动化部署源码分享
kubernetes·自动化·ansible
三坛海会大神5551 天前
Ansible详解(一)Ansible简介和基础命令及操作
运维·ansible
東雪蓮☆1 天前
Ansible Playbook 编写与模块详解
linux·运维·网络·ansible
苦逼IT运维1 天前
Windows 作为 Ansible 节点的完整部署流程(含 Docker 部署 Ansible)
windows·docker·ansible
Freed&2 天前
Ansible 生产级自动化指南:Playbook、Handlers、Jinja2 全解析
运维·自动化·ansible
m0_464608262 天前
Ansible实现自动化运维
运维·自动化·ansible
✎﹏赤子·墨筱晗♪2 天前
Ansible Playbook 入门指南:从基础到实战
linux·服务器·ansible
小白不想白a2 天前
【Ansible】使用ansible部署k8s集群前的准备工作脚本
容器·kubernetes·ansible
m0_464608262 天前
Ansible Playbook:自动化配置管理的利器
运维·自动化·ansible