当前位置: 首页 > article >正文

Ansible 学习指南

Ansible 学习指南一、Ansible 概述1.1 什么是 Ansible自动化运维工具用于配置管理、应用部署、任务自动化无代理架构通过 SSH 或 WinRM 直接管理节点无需在目标机器安装客户端声明式语言使用 YAML 描述系统状态而非具体操作步骤幂等性多次执行同一任务结果保持一致1.2 核心优势简单易学YAML 语法直观学习曲线平缓模块化设计丰富的内置模块支持自定义扩展跨平台支持 Linux、Windows、网络设备等开源免费Red Hat 支持社区活跃二、核心概念2.1 控制节点 vs 受管节点控制节点运行 Ansible 的主机受管节点被管理的主机2.2 主要组件Inventory主机清单定义管理哪些主机Playbook任务剧本YAML 格式的自动化脚本Module执行具体任务的模块Task调用模块执行的操作Role预定义的任务集合可复用Collection模块、插件、角色的分发单元三、安装与配置3.1 安装 Ansible# Ubuntu/Debiansudoaptupdatesudoaptinstallansible# RHEL/CentOSsudoyuminstallansible# macOSbrewinstallansible# Python pip 安装pipinstallansible3.2 基础配置# 配置文件优先级1. ANSIBLE_CONFIG 环境变量指定2. ./ansible.cfg当前目录3. ~/.ansible.cfg用户目录4. /etc/ansible/ansible.cfg系统目录# 最小化配置示例[defaults]inventory./inventory host_key_checkingFalse四、Inventory主机清单4.1 基本格式# inventory 文件示例 [webservers] web1.example.com ansible_ssh_userroot web2.example.com ansible_port2222 [databases] db1.example.com db2.example.com [all:vars] ansible_python_interpreter/usr/bin/python34.2 分组与变量# YAML 格式 inventoryall:hosts:host1:ansible_connection:sshansible_user:adminchildren:webservers:hosts:web[1:3].example.com:databases:hosts:db[1:2].example.com:vars:db_port:5432五、Ad-hoc 命令5.1 基本语法ansiblepattern-mmodule-aarguments# 示例ansible webservers-mpingansible all-mshell-auptimeansible db-mapt-anamenginx statepresent5.2 常用模块# 系统信息ansible all-msetup# 收集事实ansible all-mcommand-adf -h# 执行命令# 软件管理ansible webservers-mapt-anamenginx statelatestansible webservers-myum-anamehttpd statepresent# 文件管理ansible all-mcopy-asrc/local/file dest/remote/fileansible all-mfile-apath/tmp/test statedirectory# 服务管理ansible webservers-mservice-anamenginx statestarted六、Playbook 基础6.1 Playbook 结构----name:配置 Web 服务器hosts:webserversbecome:yesvars:http_port:80max_clients:200tasks:-name:安装 Nginxapt:name:nginxstate:latest-name:复制配置文件template:src:nginx.conf.j2dest:/etc/nginx/nginx.confnotify:重启 Nginxhandlers:-name:重启 Nginxservice:name:nginxstate:restarted6.2 核心指令name: 任务描述hosts: 目标主机become: 是否提权vars: 定义变量tasks: 任务列表handlers: 触发任务when: 条件判断loop: 循环执行七、变量与事实7.1 变量定义# 多种变量定义方式vars:package_name:nginxport:80vars_files:-vars/main.yml# 主机变量# inventory 或 host_vars/ 目录# 组变量# inventory 或 group_vars/ 目录7.2 事实收集# 查看所有事实-debug:var:ansible_facts# 常用事实-debug:var:ansible_distribution-debug:var:ansible_ip_addresses-debug:var:ansible_memory_mb八、条件、循环和错误处理8.1 条件判断tasks:-name:重启服务仅当 CentOSservice:name:httpdstate:restartedwhen:ansible_os_family RedHat-name:多种条件command:/bin/falseregister:resultignore_errors:yes-debug:msg:命令失败when:result.failed8.2 循环tasks:-name:添加多个用户user:name:{{ item }}state:presentloop:-alice-bob-charlie-name:带字典的循环user:name:{{ item.name }}uid:{{ item.uid }}loop:-{name:user1,uid:1001}-{name:user2,uid:1002}九、Roles 和 Collections9.1 Role 结构roles/ └── nginx/ ├── defaults/ │ └── main.yml # 默认变量 ├── tasks/ │ └── main.yml # 主要任务 ├── handlers/ │ └── main.yml # 处理器 ├── templates/ │ └── nginx.conf.j2 # 模板文件 ├── files/ ├── vars/ │ └── main.yml # 变量定义 └── meta/ └── main.yml # 依赖信息9.2 使用 Role# playbook.yml-hosts:webserversroles:-role:nginxvars:nginx_port:8080十、模板和文件管理10.1 Jinja2 模板# nginx.conf.j2 server { listen {{ http_port }}; server_name {{ server_name }}; {% if ssl_enabled %} ssl_certificate {{ ssl_cert }}; ssl_certificate_key {{ ssl_key }}; {% endif %} location / { proxy_pass http://backend; } }10.2 文件操作模块tasks:-name:复制文件copy:src:files/app.confdest:/etc/app.confowner:rootmode:0644-name:创建符号链接file:src:/file/to/linkdest:/path/to/symlinkstate:link-name:获取文件内容slurp:src:/etc/hostsregister:hosts_file十一、实战案例11.1 部署 LAMP 栈----name:部署 LAMP 环境hosts:webserversbecome:yestasks:-name:更新 apt 缓存apt:update_cache:yes-name:安装 Apacheapt:name:apache2state:present-name:安装 MySQLapt:name:mysql-serverstate:present-name:安装 PHPapt:name:{{ item }}state:presentloop:-php-php-mysql-libapache2-mod-php-name:复制网站文件copy:src:files/index.phpdest:/var/www/html/-name:启动服务service:name:{{ item }}state:startedenabled:yesloop:-apache2-mysql11.2 管理 Docker 容器----name:管理 Docker 容器hosts:docker_hostsbecome:yestasks:-name:安装 Dockerapt:name:docker.iostate:present-name:启动 Nginx 容器docker_container:name:my-nginximage:nginx:latestports:-80:80volumes:-/data:/usr/share/nginx/htmlstate:started十二、最佳实践12.1 目录结构建议project/ ├── inventory/ │ ├── production │ ├── staging │ └── dev ├── group_vars/ │ ├── all.yml │ ├── webservers.yml │ └── databases.yml ├── host_vars/ │ └── server1.yml ├── roles/ │ ├── common/ │ ├── nginx/ │ └── mysql/ ├── playbooks/ │ ├── site.yml │ ├── webservers.yml │ └── databases.yml ├── files/ ├── templates/ └── ansible.cfg12.2 性能优化# ansible.cfg [defaults] forks 50 # 并发连接数 host_key_checking False gathering smart # 智能事实收集 fact_caching jsonfile # 事实缓存 [ssh_connection] pipelining True # 管道传输 control_path /tmp/ansible-ssh-%%h-%%p-%%r十三、学习资源13.1 官方资源官方文档Ansible Galaxy角色市场GitHub 仓库13.2 推荐书籍《Ansible 权威指南》《Ansible for DevOps》13.3 练习平台Katacoda Ansible 课程Play-with-Docker十四、常见问题14.1 调试技巧# 详细输出ansible-playbook playbook.yml-vvv# 检查语法ansible-playbook playbook.yml --syntax-check# 测试运行不实际执行ansible-playbook playbook.yml--check# 逐步执行ansible-playbook playbook.yml--step14.2 常见错误权限问题使用become: yes或--become主机不可达检查网络和 SSH 配置模块不存在确认模块名称或安装对应集合语法错误使用 YAML 语法检查工具学习路线建议第一周安装配置 Ad-hoc 命令第二周Playbook 基础语法第三周变量、条件和循环第四周模板和文件管理第五周Roles 和 Collections第六周实际项目练习通过以上内容系统学习你将能够熟练使用 Ansible 进行自动化运维管理。建议结合实际项目练习逐步掌握各项技能。

相关文章:

Ansible 学习指南

Ansible 学习指南 一、Ansible 概述 1.1 什么是 Ansible? 自动化运维工具:用于配置管理、应用部署、任务自动化无代理架构:通过 SSH 或 WinRM 直接管理节点,无需在目标机器安装客户端声明式语言:使用 YAML 描述系统…...

从SPI到QSPI再到OSPI:嵌入式存储接口演进与选型指南(以W25Q64为例)

从SPI到QSPI再到OSPI:嵌入式存储接口演进与选型指南(以W25Q64为例) 在嵌入式系统设计中,存储接口的选择往往决定了整个产品的性能上限和成本结构。十年前,标准SPI接口还能满足大多数应用需求,但如今随着物联…...

Qwen3-VL-WEBUI跨平台访问配置:手机电脑都能用的AI工具

Qwen3-VL-WEBUI跨平台访问配置:手机电脑都能用的AI工具 1. 为什么需要跨平台访问AI工具 1.1 多设备协同的工作需求 在现代工作场景中,我们经常需要在不同设备间切换工作。可能是在办公室用电脑处理文档,回家路上用手机查看进度&#xff0c…...

5块钱的土壤湿度传感器,在Arduino项目里到底靠不靠谱?我的实测与长期使用报告

5元土壤湿度传感器实战评测:Arduino项目的真实表现与长期使用指南 当我在淘宝上看到标价仅5元的土壤湿度传感器时,第一反应是"这玩意儿能用吗?"——毕竟同类进口产品的价格通常在百元以上。出于好奇,我下单了10个不同批…...

【CVE-2023-49103】ownCloud graphapi第三方库敏感信息泄露漏洞深度剖析

1. 漏洞背景与影响范围 ownCloud作为一款广泛使用的开源私有云解决方案,近期曝出的CVE-2023-49103漏洞让不少企业捏了把冷汗。这个高危漏洞的核心在于graphapi组件对第三方库GetPhpInfo.php的调用机制存在设计缺陷。我在实际安全评估中发现,受影响版本会…...

51单片机实战指南:独立按键与LED交互设计(消抖优化篇)

1. 独立按键硬件原理与消抖必要性 当你第一次把手指按在51单片机的独立按键上时,可能会发现LED灯的反应不太"听话"——明明只按了一次,灯却闪烁了好几下。这种现象背后藏着机械按键的一个小秘密:触点抖动。 机械按键内部就像两个会…...

告别复杂配置!用Wan2.2-I2V-A14B镜像,三步搞定图生视频,效果惊艳

告别复杂配置!用Wan2.2-I2V-A14B镜像,三步搞定图生视频,效果惊艳 1. 为什么选择Wan2.2-I2V-A14B镜像 1.1 专业级视频生成能力 Wan2.2-I2V-A14B是一款由通义万相开源的高效视频生成模型,拥有50亿参数的专业级视频生成能力。这个…...

BECKHOFF TwinCAT3 中文字符乱码问题解析与解决方案

1. TwinCAT3中的字符串类型:STRING与WSTRING的本质区别 第一次用TwinCAT3做项目时,我在HMI上显示中文遇到了头疼的乱码问题。折腾了好几天才发现,根本原因是没搞懂STRING和WSTRING的区别。这里我用最直白的语言解释给你听。 STRING就像老式手…...

从‘绝对乘’到向量点积:程序员如何用类比和代码验证数学公式?

从‘绝对乘’到向量点积:程序员如何用类比和代码验证数学公式? 数学公式的推导过程常常让程序员感到头疼——那些抽象符号和严谨证明似乎与我们的工程思维格格不入。但当我第一次听到同事用"绝对乘"这个虚构运算来调侃数学定义时,突…...

SOONet模型MySQL安装配置与数据持久化实战

SOONet模型MySQL安装配置与数据持久化实战 如果你正在部署SOONet这类视频生成或处理模型,可能会遇到一个头疼的问题:模型跑出来的视频、生成的日志、用户的操作记录,这些数据该怎么存?总不能每次都重新生成吧。 没错&#xff0c…...

vLLM-v0.17.1从零开始:多LoRA支持与前缀缓存企业级应用教程

vLLM-v0.17.1从零开始:多LoRA支持与前缀缓存企业级应用教程 1. vLLM框架简介 vLLM是一个专为大语言模型(LLM)设计的高性能推理和服务库,以其卓越的速度和易用性著称。这个项目最初诞生于加州大学伯克利分校的天空计算实验室,如今已经发展成…...

从qrc到可执行文件:CMAKE_AUTORCC的编译内幕与资源嵌入实战

1. Qt资源系统与.qrc文件的前世今生 第一次接触Qt资源系统时,我完全被这个神奇的设计震撼到了。作为一个长期在Windows平台开发的程序员,习惯了使用.rc资源文件来管理图标、字符串等资源,Qt的.qrc文件给我打开了一扇新的大门。记得当时为了给…...

告别爆显存!GLM-4.7-Flash部署优化指南,4卡并行效率提升85%

告别爆显存!GLM-4.7-Flash部署优化指南,4卡并行效率提升85% 1. 模型概述与技术优势 1.1 GLM-4.7-Flash核心特性 GLM-4.7-Flash是智谱AI推出的新一代开源大语言模型,采用创新的MoE(混合专家)架构设计。该模型总参数量…...

CPU也能流畅运行!OpenDataLab MinerU轻量文档解析工具体验

CPU也能流畅运行!OpenDataLab MinerU轻量文档解析工具体验 1. 引言:轻量级文档解析新选择 在日常办公和学术研究中,我们经常需要处理各种文档格式——PDF报告、扫描合同、学术论文、PPT演示稿等。传统OCR工具虽然能提取文字,但面…...

技术选型指南:从OpenGL到Skia,主流绘图引擎的核心特性与适用场景剖析

1. 绘图引擎技术选型的核心考量因素 选择适合项目的绘图引擎就像挑选一辆车——不同场景需要不同的性能配置。在开始对比OpenGL、Vulkan、Cairo等具体技术前,我们需要先明确几个关键决策维度: 性能需求是首要考虑点。实时渲染场景(如游戏、VR…...

手把手教你用Verilog实现一个32位浮点乘法器(附Modelsim仿真与避坑指南)

手把手教你用Verilog实现一个32位浮点乘法器(附Modelsim仿真与避坑指南) 浮点运算在数字信号处理、图形渲染和科学计算等领域无处不在。对于FPGA开发者来说,理解并实现一个符合IEEE 754标准的浮点乘法器是掌握数字设计的重要里程碑。本文将从…...

SAP SRM采购管理平台:从战略寻源到供应商协同的全流程解析

1. SAP SRM采购管理平台的核心价值 第一次接触SAP SRM系统是在2015年,当时我参与一个制造业客户的数字化转型项目。这个客户有300多家供应商,每年采购金额超过50亿,但采购流程完全依赖Excel和邮件,经常出现供应商报价丢失、合同版…...

深度剖析:为什么Android选择了Binder

深度剖析:为什么Android选择了Binder 一、Android 的进程间通信需求 在 Android 系统里,每个应用通常都运行在独立的进程中,就像一个个独立的小世界,拥有自己专属的内存空间和系统资源 。这种进程隔离机制,就像是给每个…...

Modelsim仿真总报错?可能是你的Quartus Testbench生成姿势不对(附问题排查清单)

Modelsim仿真报错全攻略:从Quartus Testbench生成到问题排查 每次看到Modelsim那个鲜红的报错窗口弹出,是不是感觉血压瞬间飙升?作为数字电路设计流程中不可或缺的一环,仿真环节的顺畅与否直接关系到开发效率。但现实往往是&#…...

用C语言在Windows控制台写个飞机大战:从gotoxy到游戏循环的保姆级拆解

用C语言在Windows控制台写个飞机大战:从gotoxy到游戏循环的保姆级拆解 当现代游戏引擎被Unreal和Unity统治的时代,用C语言在控制台窗口实现一个实时交互游戏,听起来像是技术考古。但正是这种"简陋"的环境,能让我们彻底理…...

IntelliJ IDEA 中Maven配置失效:深入解析settings.xml路径之谜

1. 为什么IDEA找不到你的Maven配置? 刚接触Java开发的新手经常会遇到一个诡异现象:明明在本地配置了Maven的settings.xml文件,但在IntelliJ IDEA里死活不生效。这个问题我十年前第一次用IDEA时就遇到过,当时花了整整一个下午才搞…...

【YOLO数据预处理实战】图片尺寸归一化与标签坐标转换的误区与正解

1. 为什么YOLO标签不需要随图片缩放而修改? 很多刚接触YOLO算法的开发者容易陷入一个思维误区:当原始图片尺寸发生变化时,标签文件中的坐标也需要同步调整。这个认知来源于传统图像处理经验,但在YOLO的标准化流程中却是个典型的错…...

Claude Code每日更新速览(v2.1.108)-2026/04/15

目录 更新内容: 分类总结: 一、功能新增 二、体验增强 三、稳定性与安全性 本文小结: 最新版本:v2.1.108 提交时间:2026-04-14 19:12 UTC 更新内容: 添加了“ENABLE_PROMPT_CACHING_1H”环境变量以…...

RV1109与hi3861L SD卡槽WiFi驱动移植实战:内核适配与调试技巧

1. 从零开始的WiFi驱动移植挑战 最近在做一个智能家居网关项目,需要把海思hi3861L WiFi模块移植到瑞芯微RV1109平台上。刚开始接到这个任务时,我整个人都是懵的——两个不同架构的芯片,内核版本还差这么多(hi3861L驱动基于Linux 4…...

MinerU文档理解服务保姆级教程:错误识别案例复盘与提示词优化

MinerU文档理解服务保姆级教程:错误识别案例复盘与提示词优化 1. 引言:为什么你的文档识别总出错? 你是不是也遇到过这种情况:上传一份重要的合同文档,想让AI帮你提取关键条款,结果它却把甲方乙方搞混了&…...

MQ2/MQ7传感器PPM转换公式详解:从原理到代码实现(含校准指南)

MQ2/MQ7传感器PPM转换公式详解:从原理到代码实现(含校准指南) 在智能家居和工业监测领域,气体传感器的精准度直接决定了整个系统的可靠性。MQ系列传感器因其成本优势和广泛适用性,成为众多开发者的首选。但很多初学者在…...

别再死记硬背了!用‘虚短虚断’一招搞定运放放大倍数计算(附四种负反馈电路详解)

运放电路设计的思维革命:用虚短虚断破解四大负反馈迷宫 记得第一次接触运算放大器时,教授在黑板上写满了各种负反馈电路的放大倍数公式,要求我们全部背下来。考试时面对稍作变化的电路,我却大脑一片空白——这种经历恐怕不少电子工…...

Zynq 开发中的工程文件管理

Zynq 开发(Vivado、PetaLinux、Linux、U-Boot、驱动等),基本都会遇到的一个问题: 工程文件越来越多,但真正需要长期保存的东西其实没那么多。如果不把边界划清楚, Git 仓库很容易变成“源码 编译产物 工具…...

Qt 动态属性(Dynamic Property)实战:从概念到UI交互的“标签”艺术

1. 动态属性:Qt界面开发的"智能标签" 第一次接触Qt动态属性时,我把它想象成便利贴。就像我们会在办公桌上给文件贴便利贴做标记一样,动态属性就是给Qt控件贴的"智能标签"。这个标签可以随时贴上、撕下,完全不…...

BERT 架构剖析与参数量计算实战【从零推导模型规模】

1. BERT模型架构全景解析 第一次看到BERT的论文时,我被它优雅的双向Transformer架构深深吸引。与传统的单向语言模型不同,BERT通过Masked Language Model(MLM)实现了真正的上下文理解。想象一下,这就像在做完形填空时,你不仅能看前…...