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

运维自动化工具 Ansible

运维自动化工具 Ansible环境Ubuntu 24.04 / Rocky Linux 10目录Ansible 概述安装与配置主机清单 Inventory常用模块详解Playbook 基础Playbook 进阶Roles 角色最佳实践与总结综合实践案例1. Ansible 概述开发语言Python架构无代理agentless基于 SSH 通信核心组件控制节点安装 Ansible 的主机被管节点通过 SSH 管理主机清单Inventory模块ModulesPlaybookYAML 格式的任务编排Roles角色用于代码复用优势无需在被管节点安装额外软件学习曲线低YAML 语法简单幂等性多次执行结果一致丰富的内置模块劣势大规模节点1000时 SSH 效率较低需优化如开启 pipelining、使用更快的连接方式2. 安装与配置2.1 环境准备以 Ubuntu 24.04 为例# 设置主机名解析cat/etc/hostsEOF 10.0.0.13 ubuntu24-13 10.0.0.12 rocky10-12 10.0.0.16 ubuntu24-16 EOF# Ubuntu 更换阿里源可选sed-is/archive.ubuntu.com/mirrors.aliyun.com/g/etc/apt/sources.listaptupdate2.2 安装 AnsibleUbuntu二进制安装aptinstall-ysoftware-properties-common add-apt-repository--yes--updateppa:ansible/ansibleaptinstall-yansible ansible--versionRocky LinuxEPEL 源yuminstallepel-release-yyuminstallansible-yansible--version其他安装方式pip 安装推荐虚拟环境源码安装从 GitHub 克隆2.3 配置文件优先级环境变量ANSIBLE_CONFIG指定的文件当前目录下的ansible.cfg用户家目录下的~/.ansible.cfg系统默认/etc/ansible/ansible.cfg生成基础配置文件ansible-config init--disabledansible.cfg关键配置项示例ansible.cfg[defaults] inventory /etc/ansible/hosts remote_tmp ~/.ansible/tmp forks 5 host_key_checking False log_path /var/log/ansible.log module_name command interpreter_python /usr/bin/python3 [privilege_escalation] become False become_method sudo become_user root [ssh_connection] pipelining True # 提高大规模执行效率3. 主机清单 Inventory3.1 文件格式INI / YAML# INI 格式示例 [web] 10.0.0.12 10.0.0.13 [db] 10.0.0.16 [all:vars] ansible_userroot ansible_ssh_private_key_file~/.ssh/id_rsa [web:vars] http_port803.2 常用连接参数参数说明ansible_host目标主机地址ansible_portSSH 端口默认22ansible_user连接用户ansible_ssh_passSSH 密码不安全建议使用密钥ansible_ssh_private_key_file私钥路径ansible_python_interpreterPython 解释器路径ansible_connection连接类型ssh / local / paramiko3.3 主机匹配模式ansible all-mpingansibleweb:db-mping# 并集ansibleweb:db-mping# 交集ansibleweb:!db-mping# 差集ansible all-l10.0.0.13-mping# 限制单台3.4 配置 SSH 免密认证ssh-keygen-trsa-P-f~/.ssh/id_rsa ssh-copy-id root10.0.0.12 ssh-copy-id root10.0.0.13 ssh-copy-id root10.0.0.164. 常用模块详解查询模块帮助ansible-doc -l列出所有模块ansible-doc 模块名查看详细用法。4.1 命令执行类模块说明示例command默认模块不支持管道、重定向ansible all -a uptimeshell支持 shell 特性ansible all -m shell -a echo $HOSTNAMEscript在远程执行本地脚本ansible all -m script -a /tmp/test.sh4.2 文件操作类模块说明示例copy复制文件到远程ansible all -m copy -a src/etc/hosts dest/tmp/fetch从远程拉取文件到本地ansible all -m fetch -a src/var/log/syslog dest./logs/file管理文件属性、创建软链接、删除ansible all -m file -a path/tmp/test statedirectorylineinfile确保文件中某行存在/不存在ansible all -m lineinfile -a path/etc/profile regexp^export HISTSIZE lineexport HISTSIZE1000replace正则替换文件内容ansible all -m replace -a path/etc/fstab regexp^(.*) replace#\14.3 系统管理类模块说明示例user管理用户ansible all -m user -a nameapp statepresent groupswheelgroup管理组ansible all -m group -a nameapp systemyeshostname设置主机名ansible all -m hostname -a namenode1cron管理定时任务ansible all -m cron -a namesync time minute*/5 job/usr/sbin/ntpdate time1.aliyun.comsetup收集主机 factsansible all -m setup -a filteransible_default_ipv44.4 软件包管理模块适用系统示例aptDebian/Ubuntuansible ubuntu -m apt -a namenginx statepresent update_cacheyesyumRHEL/CentOS/Rockyansible rocky -m yum -a namenginx statelatestservice管理服务ansible all -m service -a namenginx statestarted enabledyes4.5 解压缩模块说明示例unarchive解压文件到远程ansible all -m unarchive -a src/tmp/pkg.tar.gz dest/opt/ copyno4.6 调试模块说明示例debug打印变量或消息ansible all -m debug -a msgHello World5. Playbook 基础5.1 YAML 语法要点缩进使用空格通常2个禁止使用 Tab键值对key: value列表- item1前导空格 短横 空格文件开头可选---5.2 Playbook 基本结构----hosts:webremote_user:rootgather_facts:yesvars:package:nginxtasks:-name:install nginxapt:name:{{ package }}state:present-name:start nginxservice:name:nginxstate:startedhandlers:-name:restart nginxservice:name:nginxstate:restarted5.3 执行 Playbook# 语法检查ansible-playbook site.yml --syntax-check# 模拟执行dry runansible-playbook site.yml-C# 实际执行ansible-playbook site.yml# 查看主机/任务列表ansible-playbook site.yml --list-hosts ansible-playbook site.yml --list-tasks# 指定 tagsansible-playbook site.yml--tagsinstall# 从特定任务开始ansible-playbook site.yml --start-at-taskstart nginx5.4 异常处理-name:可能失败的命令shell:/bin/falseignore_errors:yes5.5 Handlers任务触发仅在被 notify 时执行且只执行一次即使被多个任务 notifytasks:-name:update configcopy:src:nginx.confdest:/etc/nginx/nginx.confnotify:restart nginxhandlers:-name:restart nginxservice:name:nginxstate:restarted5.6 Tags标签tasks:-name:install packageapt:name:nginxtags:[install,web]-name:configure nginxtemplate:src:nginx.conf.j2dest:/etc/nginx/nginx.conftags:configure执行指定标签ansible-playbook site.yml --tags install6. Playbook 进阶6.1 变量变量定义位置优先级从低到高facts自动收集的主机信息inventory 主机变量inventory 组变量playbook 中vars定义的变量vars_files引入的变量文件命令行-e传入的变量最高示例# playbook 内定义vars:http_port:80# 变量文件 vars.yml---db_host:10.0.0.16db_port:3306# 引入变量文件vars_files:-vars.yml# 命令行覆盖ansible-playbook site.yml-e http_port8080注册变量register-name:get datecommand:dateregister:date_output-name:show datedebug:msg:{{ date_output.stdout }}6.2 模板Template使用 Jinja2 语法文件后缀.j2通过template模块渲染并复制到远程# nginx.conf.j2 server { listen {{ http_port }}; server_name {{ ansible_fqdn }}; root /var/www/html; }-name:deploy nginx configtemplate:src:nginx.conf.j2dest:/etc/nginx/nginx.conf6.3 条件判断when-name:install nginx on Debianapt:name:nginxwhen:ansible_os_family Debian-name:install nginx on RedHatyum:name:nginxwhen:ansible_os_family RedHat# 多条件when:-ansible_distribution CentOS-ansible_distribution_major_version 76.4 循环loop-name:create usersuser:name:{{ item }}state:presentloop:-alice-bob# 循环字典列表-name:add users with groupsuser:name:{{ item.name }}group:{{ item.group }}loop:-{name:alice,group:developers}-{name:bob,group:ops}6.5 并发控制serial-hosts:webserversserial:2# 每次只更新2台tasks:-name:rolling updateshell:systemctl restart nginx7. Roles 角色7.1 Role 目录结构roles/ └── role_name/ # 角色名 ├── tasks/ # 必须主任务文件 main.yml ├── handlers/ # 处理器main.yml ├── templates/ # Jinja2 模板 ├── files/ # 静态文件 ├── vars/ # 高优先级变量main.yml ├── defaults/ # 默认变量最低优先级main.yml ├── meta/ # 依赖关系main.yml └── README.md7.2 创建角色ansible-galaxy init roles/role_name7.3 使用角色# playbook.yml-hosts:webroles:-role:nginxnginx_port:8080-role:phpwhen:ansible_os_family Debian7.4 角色任务拆分示例# roles/nginx/tasks/main.yml----include_tasks:install.yml-include_tasks:config.yml-include_tasks:service.yml8. 最佳实践与总结8.1 核心原则幂等性多次执行结果一致模块应设计为幂等使用变量避免硬编码提高复用性模板化配置利用 Jinja2 动态生成配置Role 化将功能封装成角色便于复用版本控制所有 Playbook 和 Roles 应纳入 Git8.2 调试技巧-v、-vv、-vvv增加输出详细程度--check模拟运行--diff显示文件变更差异debug模块打印变量8.3 安全建议使用 SSH 密钥而非密码敏感信息使用 Ansible Vault 加密ansible-vault create secret.yml ansible-playbook --ask-vault-pass site.yml9. 综合实践案例案例1Nginx 自动化部署基础 Playbook----hosts:webbecome:yesvars:nginx_port:80tasks:-name:install nginxapt:name:nginxstate:presentwhen:ansible_os_family Debian-name:ensure nginx startedservice:name:nginxstate:startedenabled:yes案例2多虚拟主机Template 循环# vars:vhosts:-server_name:www.example.comroot:/var/www/example-server_name:api.example.comroot:/var/www/api# template vhost.conf.j2{% for vhost in vhosts %}server{listen 80; server_name{{vhost.server_name}}; root{{vhost.root}};}{% endfor %}案例3LNMP 环境 Role 化目录结构lnmp/ ├── site.yml └── roles/ ├── nginx/ ├── php/ ├── mysql/ └── wordpress/site.yml内容-hosts:webroles:-nginx-php-hosts:dbroles:-mysql-hosts:webroles:-wordpress

相关文章:

运维自动化工具 Ansible

运维自动化工具 Ansible 环境:Ubuntu 24.04 / Rocky Linux 10 目录 Ansible 概述安装与配置主机清单 Inventory常用模块详解Playbook 基础Playbook 进阶Roles 角色最佳实践与总结综合实践案例 1. Ansible 概述 开发语言:Python 架构:无代理…...

某雷赛86闭环步进驱动方案 HBS86H 86闭环电机驱动器/混合伺服驱动器。 原理图+PCB...

某雷赛86闭环步进驱动方案 HBS86H 86闭环电机驱动器/混合伺服驱动器。原理图PCB代码。整体方案打包。代码无错误无警告。一、方案概述 雷赛HBS86闭环步进驱动方案基于TI的DSP2803x系列芯片构建,该方案整合了原理图、PCB设计以及配套代码,形成一套完整的…...

蝌蚪论文查重:查重率降不下来?这款工具可能是你的“救星”

蝌蚪论文-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 蝌蚪论文查重AI官网入口:https://www.kedoupaper.com/ 毕业季最怕什么?不是论文写不出来,而是写出来了,查重率却怎么都降不下去。 一遍遍改,一…...

Oracle PDB 迁移与重定位

Oracle PDB 迁移与重定位概述 PDB 重定位(Relocate)是将 PDB 从一个 CDB 移动到另一个 CDB 的最快方式,源 PDB 在整个过程中保持读写状态,业务基本不中断。迁移方式对比方式停机时间说明重定位(Relocate)最…...

AI+医疗落地:数据清洗、标签噪声、患者级划分为什么比模型更重要?

AI医疗落地:数据清洗、标签噪声、患者级划分为什么比模型更重要?很多 AI医疗项目一开始最兴奋的部分,往往是模型。选什么 backbone,用不用大模型,多模态怎么融合,loss 怎么设计,能不能把 AUC 再…...

毕业季论文求生指南:从开题到答辩,如何用百考通AI高效通关?

在图书馆通宵修改论文格式的研究生小王,突然看到屏幕上跳出“参考文献格式错误”的红色标记,这是本周第七次了。与此同时,他的同学小李已经用智能工具完成查重降重,正准备提交终稿——毕业季的论文战场,效率和工具正重…...

三相VIENNA整流器仿真:一种综合控制的实践

三相VIENNA整流器仿真(三相维也纳整流器) MATLAB/simulink仿真 2018a+参考文献+组合答辩PPT 双PI控制 中点电位平衡控制 锁相环PLL 功率因数计算 包含三种消除过零畸变的方法,如图1,更换数字即可更换方法 1. 无功电流注入法 2. 使…...

从零开始学嵌入式之STM32——27.基于STM32F103C8T6MCU的寄存器方式实现按键调整PWM占空比,调整输出功率

前言 本文以项目的角度出发实现了一个简单的PWM占空比调整的功能。 目录 一、需求 二、逻辑分析 1.基础调节功能 2. 调节规则定义 3. 边界行为规则 4. 暂不支持的功能 三、功能模块与接口汇总 四、硬件分析 1.LED硬件电路 2.独立按键电路 五、代码实现 1.PWM输出部…...

项目文章 | Nat Commun四川农业大学发现增强水稻的雄蕊外露和杂种种子产量的机制

杂交水稻可大幅增产,但制种效率受限于不育系的低异交率。柱头外露率是决定异交率的关键性状,然而其遗传调控机制,特别是独立于粒形调控的直接通路,尚不明确。近期,四川大学水稻研究所团队在国际知名期刊Nature Communi…...

投影仪液晶片检测专用软件|三色重合调试工具|偏色故障诊断利器

温馨提示:文末有联系方式投影仪液晶组件智能诊断软件 本款专业级测试工具专为投影仪维修场景设计,聚焦液晶片(LCD/LCoS)及配套偏光组件的性能评估,可替代传统目测与经验判断,大幅提升故障初筛效率。偏色问一…...

商业数据分析到底在分析什么?一文讲清商业数据分析的核心逻辑

在很多公司里,几乎每天都会听到一个词:商业数据分析。很多岗位招聘都会写:需要具备商业数据分析能力。 很多企业也在建设数据平台,希望通过商业数据分析提升经营效率。但如果认真问一句:商业数据分析到底是什么&#x…...

非饱和非均质土坡三维稳定性极限分析MATLAB程序功能说明

Matlab代码源码实现:复杂条件下非饱和非均质土坡三维稳定性极限分析概述 本MATLAB程序集实现了复杂条件下非饱和非均质土坡的三维稳定性极限分析,采用极限分析上限定理结合优化算法,能够准确评估考虑毛细作用、非均质特性和地震荷载的边坡稳定…...

【安卓工具实测】影视仓更新!追剧党狂喜!影视仓无广告版太香了!

影视仓v3.2.8/TVv6.1.9:跨端影视播放工具的高效体验方案 影视仓作为一款跨Android/TV端的影视播放工具,凭借轻量化设计和丰富功能成为玩机圈热门选择。 迅雷网盘 百度网盘点击链接自取! 夸克网盘点击链接自取! 核心优势体现在…...

第二篇:Xilinx 7系列FPGA详解——从Spartan到Virtex

引言Xilinx的7系列FPGA采用统一的28nm架构,覆盖了从低功耗、低成本到超高带宽、高逻辑密度的广阔应用范围。无论是工业控制、消费电子,还是通信基础设施、航空航天,7系列都能提供合适的解决方案。本文将详细介绍该系列的四个成员:…...

实测SpeedAI等三个平台的降论文AI率效果!哪个工具网站更好用性价比更高?

实测零感AI 、嘎嘎降AI和比话AI的降论文AI率效果!哪个工具网站更好用性价比更高? 最近后台快被私信炸毁了,清一色都是同一个问题:“论文AI率90%,学校用知网查,有没有靠谱的降AI工具?”作为一个帮…...

西门子S7系列PLC C#上位机通信系统功能说明文档

C#编写西门子S7系列PLC上位机通信,ⅤS2017编写,涵盖读写寄存器,中间继电器,外部IO读写。 数据采集好帮手。 无密码,无使用时间限制。一、系统概述 西门子S7系列PLC C#上位机通信系统是基于Visual Studio 2017开发环境&…...

二进制枚举算法 cpp

3.2 二进制枚举 用一个数的二进制表示中的0/1表示两种状态,从而达到枚举的各种情况 涉及位运算知识0/1表示状态的方法,动态规划中的状态压缩dp中会继续使用二进制枚举也可使用递归实现位运算优先级不确定 加括号 3.2.1 子集 [!力扣] 78. 子集 中等 给你…...

PS 抠图干货:5 种高效方法,一键把白色背景转为透明

抠图去白底是每个PS新手必学的基础技巧,很多初学者在一开始会遇到各种问题:比如抠图不干净、边缘有锯齿、耗时半天还达不到效果"。无论是制作商品主图、设计海报素材,还是处理证件照,掌握这一技巧都能大幅提升工作效率。那么…...

Spring Boot 实现事件监听(监听器+自定义事件)完整指南

Spring Boot 实现事件监听(监听器自定义事件)完整指南 Spring Boot 的事件监听机制基于 观察者模式,核心是「自定义事件 事件发布者 事件监听器」,可实现业务解耦(如订单创建后触发库存扣减、日志记录、消息推送等&a…...

如何看待AI Agent(智能体)的伪效率问题

对 **AI Agent 的“伪效率提升”**(或者说很多场景下的假性/虚幻生产力增长)有几个比较清晰的观察角度,目前(2026年3月)整个行业其实已经开始从“狂热宣传期”进入“冷静复盘期”,很多早期吹得天花乱坠的效…...

小白验证:打破“小白”偏见,重塑软件安全新标杆

小白网络验证:打破“小白”偏见,重塑软件安全新标杆在软件保护领域,"小白"二字常被误解为技术门槛低、安全性不足的代名词。然而,小白网络验证平台凭借其企业级安全架构、全语言兼容能力和智能防护体系,彻底…...

0基础学测试:入门第三课(实战篇)| 需求评审:测试人的“第一次亮剑”,如何优雅地“怼”出高质量?

👋 欢迎回到《0基础开展软件测试》系列!上一章我们学会了如何独自“吃透”需求文档。 今天,我们要进入实战第一战——需求评审会(Requirement Review)。🛑 新手常见心态: “我是新人&#xff0c…...

蓄电池超级电容混合储能系统Simulink能量管理仿真模型与光伏发电+电池储能仿真

蓄电池超级电容混合储能系统simulink能量管理仿真模型 光伏发电电池储能仿真 simulink仿真,MPPT(增量导纳法),双向buck/boost 电路 【含笔记+建模参考】 包含相关参考文献及原理介绍文档 采用扰动观察法实现光能最大功…...

解码CCL17/TARC:QuantiCyto® ELISA助力靶点深度探索

CC趋化因子配体17(CCL17)也称为胸腺活化调节趋化因子(Thymus and Activation-Regulated Chemokine, TARC),属于Cys-Cys(CC)趋化因子家族的小细胞因子。CCL17可由多种细胞产生,包括树突状细胞、单核细胞、巨噬细胞、嗜酸性粒细胞、上皮细胞、朗格汉斯细胞…...

程序员进阶教程:大模型微调原理深度剖析,一篇搞懂

大模型微调,简单来说,就是在一个已经训练好的通用的大模型(比如qwen3、deepseek等)的基础上,再给它“补课”,让它更擅长处理特定任务或领域的需求。 想象一下,大模型就像一个全能学霸&#xff…...

02-大模型部署之Kubernetes+vLLM安装大模型和容器调度

02-大模型部署之KubernetesvLLM安装大模型和容器调度 1. Kubernetes基础与vLLM集成概述 1.1 为什么使用Kubernetes部署vLLM Kubernetes提供了企业级的容器编排能力,特别适合vLLM部署的以下场景: 弹性伸缩:根据负载自动调整vLLM实例数量高可用…...

Linux系统基础安全总结

只开放必要端口 80、443、SSH 等 禁用或删除无用账号 禁止使用 root 直接登录清理多余系统账号、测试账号启用防火墙强化密码策略◦密码长度 ≥8 位,字母 数字 符号◦ 定期更换、禁止使用历史密码 关闭无用端口与服务 用 ss -tulnp 查看监听端口停止并禁用无用…...

传统企业每一次招聘,本质都是一次“盲选”

传统企业招聘确实常陷入"盲选困局"。据统计,超过60%的企业因招聘失误导致人才流失,平均每位错误招聘造成损失达入职薪资的30%以上。究其根源,在于三大痛点:面试主观性强、评价标准模糊、缺乏系统化人才甄别工具。HR往往…...

计算机毕业设计之基于SpringBoot的自驾游出行一站式物资商城

随着社会的发展,系统的管理形势越来越严峻。越来越多的用户利用互联网获得信息,但各种信息鱼龙混杂,信息真假难以辨别。为了方便用户更好的获得自驾游出行物资信息,因此,设计一种安全高效的基于SpringBoot的自驾游出行…...

191.Vue3 + OpenLayers 实战:可控化版权信息(Attribution)详解与完整示例

🧩 一、效果目标我们要实现以下效果:✅ 自定义版权内容(HTML)✅ 内置版权(右下角,可折叠)✅ 外部版权(自定义位置展示)✅ 自定义按钮样式✅ 控制是否折叠🧠 二…...