news 2026/7/1 7:52:43

Ansible入门指南——自动化运维的第一步

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ansible入门指南——自动化运维的第一步

为什么选择Ansible?

想象一下这样的场景:你需要同时在10台服务器上安装Nginx,配置防火墙,部署代码。传统方式是一台台SSH登录操作,耗时且容易出错。Ansible就是为解决这种批量服务器管理而生的自动化工具。

与其他自动化工具相比,Ansible的主要优势:

· 无代理:通过SSH管理,无需在被管理节点安装客户端
· 简单易学:基于YAML语法,接近自然语言
· 幂等性:多次执行同一任务,结果一致
· 模块化设计:丰富的模块满足各种需求

Ansible核心架构

[控制节点]
↓ (SSH)
[被管理节点1] [被管理节点2] [被管理节点3]

控制节点:运行Ansible命令的机器,需要安装Python
被管理节点:被Ansible管理的服务器,只需要支持SSH和Python

环境准备与安装

1. 控制节点安装(Ubuntu示例)

# 更新包索引
sudo apt update

# 安装Ansible
sudo apt install ansible -y

# 验证安装
ansible --version
# 应显示:ansible 2.9.x

# 安装Tree(可选,方便查看目录结构)
sudo apt install tree -y

2.配置SSH免密登录

# 生成SSH密钥(如果还没有)
ssh-keygen -t rsa -b 2048

# 复制公钥到被管理节点(需要输入密码)
ssh-copy-id user@server1
ssh-copy-id user@server2

# 测试连接
ssh server1 "hostname" # 应无密码登录并返回主机名

3.创建Ansible工作目录

mkdir -p ~/ansible-project/{inventory,group_vars,host_vars,playbooks,roles}
cd ~/ansible-project
tree .
# 应显示:
# .
# ├── group_vars
# ├── host_vars
# ├── inventory
# ├── playbooks
# └── roles

基础配置:清单文件详解

Ansible通过清单文件(Inventory) 定义管理哪些主机。创建 inventory/hosts:

# inventory/hosts - 主机清单文件

# 按环境分组
[web_servers]
web1 ansible_host=192.168.1.101 ansible_user=ubuntu
web2 ansible_host=192.168.1.102 ansible_user=ubuntu

[db_servers]
db1 ansible_host=192.168.1.111 ansible_user=ubuntu

# 按地理位置分组
[shanghai:children]
web_servers

[beijing:children]
db_servers

# 所有主机
[all_servers:children]
web_servers
db_servers

# 组变量(也可以在group_vars中定义)
[web_servers:vars]
http_port=80
max_requests_per_child=500

[db_servers:vars]
db_port=3306

重要概念:

· [] 定义主机组
· ansible_host 指定IP地址
· ansible_user 指定连接用户
· :children 创建组嵌套
· :vars 定义组变量

必备的Ad-hoc命令(临时命令)

Ad-hoc命令适合快速执行简单任务,无需编写Playbook。

1. 基础连接测试

# 测试所有主机连通性
ansible all -i inventory/hosts -m ping

# 测试特定组
ansible web_servers -i inventory/hosts -m ping

# 测试单个主机
ansible web1 -i inventory/hosts -m ping

# 使用别名文件简化(创建ansible.cfg)
echo -e "[defaults]\ninventory = ./inventory/hosts" > ansible.cfg
# 之后可以省略 -i 参数
ansible all -m ping

2.常用模块示例

# 1. 执行shell命令
ansible web_servers -m shell -a "uptime && whoami"

# 2. 管理服务
ansible web_servers -m service -a "name=nginx state=started"
ansible web_servers -m service -a "name=nginx state=restarted"
ansible web_servers -m service -a "name=nginx state=stopped"

# 3. 管理软件包
ansible web_servers -m apt -a "name=nginx state=present" # Ubuntu
ansible web_servers -m yum -a "name=nginx state=present" # CentOS

# 4. 文件操作
ansible web_servers -m file -a "path=/tmp/test mode=755 state=directory"
ansible web_servers -m file -a "path=/tmp/test.txt state=touch"
ansible web_servers -m file -a "path=/tmp/test state=absent" # 删除

# 5. 复制文件
ansible web_servers -m copy -a "src=./config.txt dest=/tmp/config.txt owner=root mode=644"

# 6. 获取主机信息
ansible web_servers -m setup # 收集所有facts
ansible web_servers -m setup -a "filter=ansible_distribution*" # 过滤显示

3.高级Ad-hoc用法

# 并行执行(默认5个并行)
ansible all -m ping -f 10 # 10个并行

# 以特定用户执行
ansible all -m shell -a "whoami" --become --become-user=root

# 限制执行主机
ansible all -m ping --limit "web1"
ansible all -m ping --limit "web_servers:&shanghai"

# 查看模块帮助
ansible-doc ping
ansible-doc -l | grep -i service # 查找模块

Ansible配置优化

创建ansible.cfg配置文件:

# ansible.cfg - 主配置文件
[defaults]
# 清单文件路径
inventory = ./inventory/hosts

# SSH连接设置
host_key_checking = False # 禁用密钥检查(测试环境)
timeout = 10
retries = 3

# 并行设置
forks = 20 # 并发数

# 日志记录
log_path = ./ansible.log

# 性能优化
gathering = smart # 智能收集facts
fact_caching = jsonfile
fact_caching_connection = ./facts_cache
fact_caching_timeout = 3600

# 安全设置
sudo_user = root
allow_world_readable_tmpfiles = False

[ssh_connection]
# SSH优化
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o Compression=yes
pipelining = True # 提高执行速度
control_path = %(directory)s/ansible-ssh-%%h-%%p-%%r

速查表:20个最常用命令

# 连接测试
ansible all -m ping

# 执行命令
ansible all -m shell -a "命令"

# 文件管理
ansible all -m file -a "path=路径 state=directory/file/absent"
ansible all -m copy -a "src=源文件 dest=目标文件"

# 包管理
ansible all -m apt -a "name=包名 state=present/absent/latest" # Ubuntu
ansible all -m yum -a "name=包名 state=present/absent/latest" # CentOS

# 服务管理
ansible all -m service -a "name=服务名 state=started/stopped/restarted"

# 用户管理
ansible all -m user -a "name=用户名 state=present/absent"

# 权限提升
ansible all -m shell -a "需要root的命令" --become

总结

Ansible的Ad-hoc命令是你的自动化瑞士军刀。记住这些要点:

1. 从简单开始:先用Ad-hoc命令自动化重复任务
2. 测试为先:使用--check和--diff预览更改
3. 逐步复杂:当Ad-hoc命令变得复杂时,就是时候写Playbook了

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 13:51:31

从入门到精通:大模型赋能千行百业的百万元级AI解决方案价值图谱

本文基于《百万元级AI解决方案价值图谱》,系统梳理了大模型在通信、政务、医疗、教育等九大行业的落地场景与核心价值。分析表明,大模型应用已从"试验田"走向"生产力",主要带来降本增效、办公提质、安全稳定和提升客户感…

作者头像 李华
网站建设 2026/7/1 22:36:58

【C2000系列DSP的Bootloader详解】如何利用脚本自动合并hex文件

【C2000系列DSP的Bootloader详解】如何利用脚本自动合并hex文件 在C2000系列微控制器开发中,Bootloader(启动引导程序)和UserApp(用户应用程序)是嵌入式系统的核心组成部分。Bootloader负责芯片上电后初始化硬件、加载用户程序,UserApp则是实际的业务逻辑代码。本文将详…

作者头像 李华
网站建设 2026/7/1 19:40:37

文件上传php知识和理解

为什么要学真实黑客攻击:找目标网站——上传恶意文件——猜网站的漏洞——上传木马文件——成功然后可以走两个方式1.蚁剑连接测试连接——成功,这里的连接其实就是上传的一句话木马文件的POST里面你写的“密码”,蚁剑叫它密码,但…

作者头像 李华
网站建设 2026/7/1 22:27:42

微观交通流仿真软件:AIMSUN_(15).用户界面与操作

用户界面与操作 1. AIMSUN用户界面概述 AIMSUN 是一款强大的微观交通流仿真软件,用户界面设计直观且功能丰富,旨在帮助用户高效地进行交通网络建模、仿真和分析。本节将详细介绍 AIMSUN 用户界面的主要组成部分和基本操作方法,帮助用户快速…

作者头像 李华
网站建设 2026/7/1 13:51:37

微观交通流仿真软件:Paramics_(1).Paramics软件基础与安装

Paramics软件基础与安装 1. Paramics软件简介 Paramics是一款强大的微观交通流仿真软件,广泛应用于交通规划、道路设计、交通管理和研究等领域。它通过模拟交通系统中的车辆、驾驶员、交通设施等微观元素的行为,提供详细的交通数据和分析结果。Paramics不…

作者头像 李华
网站建设 2026/7/1 3:26:44

mac m3上使用vscode + platformio开发esp32

前言 之前使用过arduino ide去开发esp32。但是感觉有两个问题,一是arduino上面那个esp32的插件不太好下载,二是本人习惯使用vscode的了,想用vscode去开发。所以这次使用vscode platformio arduino库去做开发。 环境介绍 电脑&#xff1a…

作者头像 李华