Ansible 是一款开源的 IT 自动化工具,核心定位是配置管理(Configuration Management),同时覆盖应用部署、任务编排与临时命令执行。它由 Michael DeHaan 于 2012 年创建,现由 Red Hat 主导社区开发,采用“无代理(agentless)”架构:控制节点仅需安装 Ansible,通过 SSH 协议即可管理成百上千台目标服务器,无需在目标机器上预装任何 Agent 守护进程。这一设计大幅降低了引入门槛,也使其成为当前运维、DevOps、SRE 团队落地“基础设施即代码(IaC)”的首选工具之一。 Ansible 的核心工作方式是编写 YAML 格式的 Playbook(剧本),用人类可读的声明式语法描述服务器的“最终状态”,例如“安装 Nginx 并确保其运行”。Playbook 具备幂等性(idempotency)——同一任务对已满足状态的系统重复执行不会产生副作用,这使配置管理可以安全地纳入 CI/CD 流水线反复运行。工具还内置了丰富的模块体系(Modules)与集合(Collections),覆盖系统包管理、文件操作、云资源、网络设备、容器等场景。 本攻略将带你走通 Ansible 的完整链路:从安装环境、编写第一个 Playbook,到核心能力拆解、生产环境部署策略,再到同类工具选型对比与常见误区辨识。所有步骤均基于官方文档整理,可直接复制运行。

岗位关联

掌握 Ansible,意味着你具备了将基础设施以代码形式版本化、可审计、可重复交付的能力——这是 AI 从业者从事模型服务部署、大规模 GPU 集群调度与平台工程时不可或缺的自动化基本功。

目录
  1. 为什么需要 Ansible:从手工 SSH 到可版本化的配置管理
  2. 安装与环境配置:4 步就绪
  3. 快速上手:15 分钟跑通第一个 Playbook
  4. 核心能力详解:5 大支柱
  5. 生产部署与监控:从上线到运维
  6. 版本迭代
  7. AI 应用场景
  8. 常见误区
  9. 面试题
工具类型
配置管理与 IT 自动化框架(开源)
开发商
Red Hat(Ansible 社区项目)
开源协议
GPL-3.0
GitHub Stars
无
主要语言
Python
当前版本
ansible-core 2.18.x / ansible 社区包 11.x(2024-11)
安装方式
pip install ansible 或 pipx install ansible
官方文档
上手难度
★★☆☆☆(较低)
适合人群
DevOps / SRE / 运维工程师 / 平台工程师
同类工具
Puppet · Chef · SaltStack
托管服务
无

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 Ansible:从手工 SSH 到可版本化的配置管理

在 Ansible 出现之前,服务器配置管理依赖两条路径:一是运维人员手工 SSH 登录每台机器逐一执行命令,在几十台规模下尚可应付,一旦超过百台,重复劳动和人为疏漏会指数级放大,且无法追溯“哪台机器改过什么”;二是自研 Shell 脚本批量推送,但脚本对“目标机器已处于不同状态”的场景无能为力——重复执行同一脚本常常报错或产生不可预期的副作用,也就是所谓的“配置漂移”。

Ansible 用三个设计解决了上述痛点:声明式 Playbook 描述最终状态而非操作过程,模块内置幂等逻辑保证重复执行安全;无代理架构让接入新机器只需满足 SSH 可达,省去 Agent 安装与版本同步的运维负担;控制节点单点管理,配合 SSH 的并行执行机制,可在几分钟内完成上千台机器的配置下发。这使得配置变更从“操作记录”升级为“代码资产”,可以放入 Git 进行版本控制、Code Review 与回滚。

与同类工具相比,Ansible 的气质差异在于“低门槛优先”:不引入独立的客户端-服务端架构,不要求学习专属 DSL(领域特定语言),不强制部署证书体系。它的 YAML 语法几乎零学习成本,而 Puppet 与 Chef 分别要求掌握自定义声明语言和 Ruby,SaltStack 则默认引入 Master/Minion 架构。对大多数从零起步的团队,Ansible 是综合人力成本与功能覆盖最均衡的起点。

安装与环境配置:4 步就绪

Ansible 控制节点要求类 Unix 系统(Linux / macOS / WSL),原生 Windows 不支持作为控制端。控制节点需安装 Python 3.10 以上版本(以 ansible-core 2.18 为准)。我们推荐用虚拟环境或 pipx 安装,避免污染系统 Python。

步骤一:创建虚拟环境并激活

步骤二:通过 pip 安装 ansible 包

这里安装的 ansible 元包会同时拉取 ansible-core 与官方精选的社区集合,适合绝大多数场景;若只需极简核心,可只装 pip install ansible-core,但常用模块(如 community.general)需另行手动安装。

步骤三:验证安装

输出中应显示 ansible-core 版本号与 python 解释器路径。若显示 command not found,检查虚拟环境是否已激活。

步骤四:配置控制节点到目标机的 SSH 免密登录

验证连通性的最短命令如下,ping 模块会 SSH 登录目标机并返回 pong:

bash2 行
python3 -m venv ~/.venvs/ansiblesource ~/.venvs/ansible/bin/activate
bash2 行
pip install --upgrade pippip install ansible
bash1 行
ansible --version
bash2 行
ssh-keygen -t ed25519ssh-copy-id deploy@your-target-host
bash1 行
ansible all -i 'your-target-host,' -m ping -u deploy
bash8 行
# 完整可复制的安装与验证链路python3 -m venv ~/.venvs/ansible && source ~/.venvs/ansible/bin/activatepip install --upgrade pippip install ansibleansible --versionssh-keygen -t ed25519ssh-copy-id deploy@your-target-hostansible all -i 'your-target-host,' -m ping -u deploy

快速上手:15 分钟跑通第一个 Playbook

最小可用流程包含两个文件:一个 Inventory(主机清单)写明“管哪些机器”,一个 Playbook(剧本)写明“怎么管”。下面演示在 Ubuntu 目标机上安装并启动 Nginx。

步骤一:创建 inventory 文件

新建 inventory.ini:

[web] 是主机组名,下面逐行列目标机地址;[web:vars] 定义该组通用的连接变量——使用 deploy 用户登录,并在执行特权任务时自动切换 root(become)。

步骤二:创建 playbook 文件

新建 nginx.yml:

Playbook 顶层是一个列表,每个元素即一个 Play,hosts 指定目标组,tasks 为按序执行的任务列表。ansible.builtin.apt 是模块名,state: present 是声明式目标——若 Nginx 已安装,该任务会直接跳过不改变系统。

步骤三:先试运行再真正执行

--check 进入试运行模式,只输出将发生的变更而不实际修改;--diff 展示配置文件的差异内容。确认无误后去掉 --check 正式执行,最终看到 PLAY RECAP 中两台机器均为 ok=2 changed=1 即为成功。

进阶技巧:对已上线的存量机器,建议先执行 ansible -i inventory.ini web -m setup 采集系统事实(facts),据此为不同发行版(Ubuntu / CentOS)编写条件化任务,而不是假设所有机器环境一致。

ini7 行
[web]web1.example.comweb2.example.com [web:vars]ansible_user=deployansible_become=true
yaml13 行
- name: Ensure nginx is installed and running  hosts: web  tasks:    - name: Install nginx      ansible.builtin.apt:        name: nginx        state: present     - name: Start nginx      ansible.builtin.service:        name: nginx        state: started        enabled: true
bash1 行
ansible-playbook -i inventory.ini nginx.yml --check --diff

核心能力详解:5 大支柱

支柱一:Inventory 主机清单体系。 Inventory 是 Ansible 的寻址系统,既支持 inventory.ini 与 YAML 格式的静态文件,也支持动态插件——从 AWS EC2、Azure、Kubernetes、OpenStack 等云平台 API 实时拉取主机列表。通过 [web:children] 可以构建多层主机组继承关系,配合 host_vars/、group_vars/ 目录按文件路径自动加载变量,实现“主机清单即配置数据源”。在云环境频繁伸缩容的团队应优先采用动态 Inventory 而非维护静态文件。

支柱二:Playbook 执行引擎。 一个 Play 内按顺序执行 tasks,并通过 when 条件、loop 循环、block/rescue/always 异常处理、tags 标签过滤来组织复杂逻辑。notify + handlers 模式是 Playbook 的精髓:任务变更时通知 handler,Play 全部结束后统一执行,例如“配置文件变更后重启服务”,避免每台机器反复重启。strategy 支持从默认的 linear 切换为 free,让不同主机独立推进任务以提升大规模并发效率。

支柱三:Module 与 Collection 模块体系。 模块是 Ansible 的最小执行单元,内置的 ansible.builtin 集合涵盖 command、shell、copy、template、service、user、apt/yum 等核心能力。社区与厂商集合(community.general、amazon.aws、kubernetes.core、cisco.ios)通过 ansible-galaxy collection install 安装,扩展了云资源、容器、网络设备等领域的支持。选模块前先查 ansible-doc -l,优先使用专用模块而非通用 shell 命令,才能保证幂等性。

支柱四:幂等性与执行机制。 Ansible 的幂等建立在模块层:每次执行前探测系统当前状态,仅在状态与目标不一致时执行变更。这也是 --check 模式能准确预测变更的原因。为提高性能,可缓存 fact 采集结果(fact_caching),或对无需 facts 的 Play 设置 gather_facts: false。ansible-pull 模式则反转执行方向,由目标机主动从 Git 仓库拉取 Playbook 定期执行,适合无法由控制端直连的大规模边缘节点。

支柱五:安全与加密。 ansible-vault 可对 Playbook、变量文件甚至整个文件目录进行 AES-256 加密,运行时通过 --ask-vault-pass 或 --vault-password-file 提供密码,杜绝密钥明文入库。become 机制在目标机执行 sudo/su 切换,可精细到用户与命令级别,替代直接使用 root 登录。结合 SSH 的 ControlPersist 长连接复用,既提升执行速度又减少握手暴露面。

生产部署与监控:从上线到运维

部署方式一:AWX / Ansible Automation Platform 集中调度。 生产环境不建议直接用 cron 跑 ansible-playbook。AWX(上游开源版)与商业版 Ansible Automation Platform 提供 Web 界面、RBAC 权限控制、作业模板、调度器与审计日志,所有执行记录落库并可追溯“谁在何时对哪台机器做了什么”。安装 AWX 通常用 docker-compose 或 Helm 部署到 Kubernetes,管控面与执行环境分离,适合多团队共享自动化能力的组织。

部署方式二:接入 CI/CD 流水线。 在 GitLab CI 或 GitHub Actions 中创建一个deploy 作业,从仓库拉取 Playbook,使用 CI Secrets 注入 ANSIBLE_VAULT_PASSWORD_FILE,并仅在打 tag 或合并到 main 分支时触发生产执行。代码评审会在 Playbook 合并前审查其对生产的影响。与 Terraform 的分工应明确:Terraform 负责创建云资源(虚拟机、VPC、负载均衡),Ansible 负责在资源内部完成软件配置与状态收敛,两者通过 inventory 插件或 terraform output 对接。

可观测性与持续校验。 设置 ANSIBLE_STDOUT_CALLBACK=json 可将执行结果以 JSON 结构化输出,接入 ELK/Loki 用于审计与回溯;在 CI 中加一道 ansible-lint 静态检查作为质量门禁,拦截不幂等的写法(如裸 shell 命令替换可用模块的场景)。定期(如每周)全量执行 --check 或 --diff 模式扫描配置漂移,将变更量作为运维健康度指标。

<p class="para-label">避坑清单:</p>

<ul class="dash-list"><li>勿将 ansible 与 ansible-core 混装在同一环境:ansible 元包自带全套社区集合,只装 ansible-core 会导致大量模块缺失报错,避免用系统级 pip 全局安装以防依赖冲突。</li><li>目标节点必须预装 Python(2.7+ 或 3.x):所谓“无代理”不等于“零依赖”,目标机没有 Python 时只能用 raw 模块兜底,Windows 节点则需走 WinRM 而非 SSH。</li><li>secrets 严禁明文入库:inventory 或 playbook 中的密码、密钥必须用 ansible-vault 加密,或在 CI 中通过环境变量注入。</li><li>大规模集群务必启用 fact caching 或按需关闭 gather_facts:数千台机器每轮全量采集 facts 会拖垮控制节点与 SSH 通道。</li><li>handler 默认在 Play 末尾执行且任务失败时不触发:若依赖顺序变更后重启服务,需在关键节点前用 meta: flush_handlers 强制排空。</li></ul>

维度AnsiblePuppetChefSaltStack
定位无代理配置管理 + 应用部署,SSH 驱动、推模式有代理的声明式配置管理,Client-Server 拉模式基于 Ruby 的配置管理与应用自动化,Server-Client 收敛模型高速配置管理与远程执行,Master/Minion 与 SSH 双模式
编排范式命令式 Playbook,顺序 task + 幂等模块声明式 Manifest,持续收敛到目标状态声明式 Recipe(Ruby DSL)+ 收敛模型State 文件声明式 + 支持命令行式远程执行
类型约束YAML + Jinja2 模板,无编程语言要求自研 Puppet DSL(类型、资源、类)完整 Ruby 语言,编程能力强YAML state + Jinja 模板,也支持 Python 扩展
学习曲线低:YAML 即学即用中:需掌握 DSL 与模块层级高:需具备 Ruby 基础中:需理解 Master/Minion 架构与 grains/pillar 概念
生态集成Ansible Galaxy 集合丰富,云/网络/容器覆盖广Puppet Forge 模块,传统企业 IT 沉淀深厚Chef Supermarket,Ruby 生态栈紧密Salt Formulas 齐全,大规模并发性能著称
生产部署控制节点 + SSH,无需在目标机装 Agent每节点需安装 Puppet Agent 并与 Master 通信需部署 Chef Server + Workstation + 每节点 Client通常部署 Salt Master 与每节点 Minion,也可 Salt SSH
LicenseGPL-3.0(免费商用)Apache-2.0Apache-2.0Apache-2.0
适合谁从零起步的 DevOps 团队、云原生环境、多工具链集成场景已有海量存量服务器、需要持续合规收敛的大型企业运维团队精通 Ruby、需要高度可编程配置逻辑的场景追求超大规模高速并发、需要实时远程执行的任务场景

选型建议:多数云原生与初创团队应首选 Ansible——无代理、YAML 低门槛、与 Terraform/Kubernetes 生态配合顺畅。若企业已有大规模存量物理机且需要持续合规收敛,Puppet 的拉模式更稳;团队具备 Ruby 能力并需要复杂逻辑编排时考虑 Chef;对超大规模(万级节点)与实时性要求极高,SaltStack 的并发能力更突出。

版本迭代

Ansible 的版本演进主线是“模块分发方式重构”。自 2.10 引入 Collections 概念、将 ansible-base 从 ansible 包中拆出后,模块开始以集合为单位独立发布;2.12 起 ansible-base 正式更名 ansible-core,确立“core 内核 + collections 外援”的架构;后续版本持续收紧控制节点的 Python 版本要求并增强执行引擎能力。截至训练数据(2025 年初),ansible-core 2.18 为最新稳定版,可能已有更新版本。

版本时间变化提升
Ansible 2.92019-10末代单体核心发布所有模块随主包分发,长期稳定被旧教程广泛引用
Ansible 2.102020-09引入 Collections 概念ansible 包与 ansible-base 分离,模块开始以集合形式分发
ansible-core 2.122021-11ansible-base 更名 ansible-core集合成为唯一模块分发方式,ansible-galaxy 支持 collection 管理
ansible-core 2.142022-11控制节点 Python 要求提升控制端最低 Python 3.9,目标机默认不再支持 Python 2 部署
ansible-core 2.162023-11控制节点 Python 3.10+全面切除 Python 2 目标支持,vault 加密与执行策略改进
ansible-core 2.182024-11最新稳定版(截至数据)控制节点支持至 Python 3.13,fact 缓存与并发执行持续优化
结论

从版本轨迹可清晰看到 Ansible 正在走向“核心精简、生态外置”——内核只保留执行器与基础模块,厂商能力全部通过集合隔离发布,避免核心发行节奏被生态拖累。选型建议:新项目直接使用 ansible(社区包)以保证开箱即用;环境对依赖体积敏感时改装 ansible-core 并按需安装集合。

AI 应用场景

服务器配置基线统一

阶段:配置管理与基础设施即代码

解决的问题:数百台混用发行版的服务器,SSH 端口、NTP 时钟源、防火墙规则、审计 Agent 各自为政,手工逐台核对耗时数天且极易遗漏。Ansible 将基线固化为 Playbook,新机器只需加入 inventory 即可自动获得完整配置。

具体案例:某互联网公司 200 台 CentOS/Ubuntu 混合服务器,通过 playbook 统一配置 SSH 加固、NTP 同步、iptables 规则与监控 Agent,单批次全量执行耗时由手工模式的 2 天压缩至 18 分钟,且 Redis 扩容时新节点加入 inventory 后 3 分钟内自动完成基线接入。

持续交付中的应用部署

阶段:CI/CD 流水线交付

解决的问题:每次发版人工 SSH 拉取版本、更新配置文件、重启服务,容易因环境差异导致发布失败或回滚困难。Ansible 将构建产物分发、配置更新、服务重启编排为幂等 Playbook,纳入 GitLab CI 按金丝雀→滚动批次推进。

具体案例:某金融科技团队在 GitLab CI 中触发 deploy.yml,先对 1 台金丝雀节点执行并校验健康检查端点,通过后按 20%→50%→100% 分批滚动升级 80 台应用服务器,发布耗时从人工 1.5 小时降至 6 分钟,失败回滚仅需执行旧版本 playbook 一条命令。

安全合规与补丁自动化

阶段:合规巡检与漏洞修复自动化

解决的问题:安全团队需要周期性核查全部服务器的补丁级别、敏感文件权限、账户变更,人工巡检无法覆盖全量资产。Ansible 通过每日 --check 扫描与月度补丁 Playbook 闭环处理,并自动生成合规报告。

具体案例:某政务云项目维护 500 台主机,使用 ansible-lint 与自定义审计模块每日扫描 sudoers、SSH 密钥、异常 crontab,月度安全补丁通过 playbook 自动批量安装并重启服务,合规巡检覆盖率从抽样 10% 提升至 100%,整改闭环时间从 2 周缩短至 2 天。

常见误区

误区“Ansible 既然叫无代理架构,那我只要 SSH 能连上目标机器就能直接管,目标机上不用装任何东西。”

正解无代理指的是无需在目标机常驻 Agent 守护进程,但目标机必须具备 Python 解释器(2.7+ 或 3.x),因为模块代码需要通过 Python 在目标端执行。Windows 目标机还需预先配置 WinRM 或 OpenSSH Server。若目标机是精简设备(网络设备或仅有 busybox 的嵌入式系统),只能使用 raw 模块直接发送原始命令,但能力将大打折扣。

为何常见:社区宣传普遍强调“agentless“对标 Puppet/Chef 的 Agent 安装,容易让新人误读为零依赖,实际”无守护进程”才是准确表述。

误区“既然 playbook 是自动化脚本,那我把自己以前的 shell 命令抄进去,用 `shell` 模块一包,照样能用。”

正解shell 与 command 模块不保证幂等——重复执行会重复产生副作用(如重复创建用户、重复追加行)。Ansible 的价值恰恰在于声明式模块(user、copy、lineinfile)会先探测状态再决定是否变更,保证重复执行结果一致。playbook 应尽量用专用模块表达意图,shell 仅在无对应模块时兜底使用。

为何常见:多数人从 Shell 脚本迁移过来,YAML 的声明式思维与命令式脚本的直觉差异需要刻意转变。

误区“我搜安装文档,有人说 `pip install ansible`,有人说 `pip install ansible-core`,这俩应该是一个东西吧?”

正解二者不同。ansible 是一个元包,依赖 ansible-core 并附带精选的官方社区集合(如 community.general);ansible-core 仅包含核心执行器与 ansible.builtin 内置模块。只装 ansible-core 时运行很多 playbook 会报“无法解析模块”错误,需手动 ansible-galaxy collection install 补齐集合。

为何常见:版本号(同为 2.x)与命令入口(同为 ansible-playbook)高度重合,官方文档又常以 ansible-core 代称整个项目,容易造成混淆。

误区“Ansible 支持 Windows,那我把 Linux 上的 playbook 换个 IP 直接跑不就行了?”

正解Windows 节点的连接方式默认是 WinRM(或配置 OpenSSH Server),且模块体系完全不同——Linux 用的是 ansible.builtin.apt/yum 等 POSIX 模块,Windows 必须使用 ansible.windows 集合中的 win_package、win_service、win_file 等专用模块。同一 Play 可以同时包含两组任务,但需用 when: ansible_os_family == "Windows" 之类的条件区分。

为何常见:Ansible 官网宣称“支持 Windows”是针对目标机管理能力,新人忽略了对模块体系差异的要求。

误区“我在 playbook 里写了 `command: echo $HOME`,结果输出是空的,Ansible 为什么不认识系统的环境变量?”

正解Playbook 内部使用 Jinja2 模板语法,引用变量必须写 {{ var_name }};$HOME 是 Shell 语法,仅在 shell 模块启动的会话中由目标机展开。若要读取目标机环境变量,应通过 lookup('env', 'HOME') 或 ansible_env facts 获取。

为何常见:Playbook 中频繁混排命令片段与变量引用,两种语法的边界对新手很不直观。

面试题

Q1. Ansible 默认通过什么协议连接并管理目标节点?

单选题 · easy

  • A.SSH← 正确答案
  • B.HTTPS
  • C.Telnet
  • D.SNMP

答案:A。Ansible 的无代理架构默认基于 SSH 连接目标节点,控制节点通过 SSH 执行模块代码。HTTPS 用于 WinRM 通道或 AWX Web 界面,Telnet 与 SNMP 均非 Ansible 的默认管理通道。

Q2. 下列哪项是 Ansible 幂等性原则的正确体现?

单选题 · easy

  • A.同一任务重复执行,系统保持相同最终状态且无副作用← 正确答案
  • B.任务只能成功执行一次,第二次必然报错
  • C.任务执行时间每次必须完全一致
  • D.任务失败后会自动重试直到成功

答案:A。幂等指重复执行同一操作,系统最终状态一致且不产生额外副作用,如 state: present 在软件已安装时直接跳过。B、C 与幂等无关,D 描述的是重试机制而非幂等。

Q3. 在 Ansible 中,用于声明被管理主机清单的文件被称作?

单选题 · easy

  • A.Playbook
  • B.Inventory← 正确答案
  • C.Role
  • D.Module

答案:B。Inventory(清单)定义管理的主机、主机组与连接变量,支持静态文件或动态插件拉取。Playbook 是任务剧本,Role 是任务的组织复用单元,Module 是单个执行单元。

Q4. 在 Playbook 顶层配置 become: true 的作用是?

单选题 · mid

  • A.目标机执行任务时切换为 root 或指定特权用户← 正确答案
  • B.将任务放到后台异步执行
  • C.开启 SSH 长连接复用
  • D.允许任务在失败后继续

答案:A。become 启用特权升级(默认 sudo 到 root),用于安装软件、修改系统配置等需管理员权限的任务。后台执行对应 async 参数,长连接复用是 SSH 配置项,失败继续是 ignore_errors 的职责。

Q5. 关于 ansible 元包与 ansible-core 的关系,正确的是?

单选题 · mid

  • A.二者完全等价
  • B.ansible 包含 ansible-core 与社区精选集合← 正确答案
  • C.ansible-core 包含 ansible 的全部功能
  • D.二者互不包含、完全独立

答案:B。pip 安装的 ansible 是元包,依赖 ansible-core 内核并附带常用社区集合(community.general 等),实现开箱即用;ansible-core 仅含内置模块,需另装集合才能使用扩展能力。

Q6. 下列哪些做法可以有效提升大批量主机执行 Playbook 的效率?

多选题 · mid

  • A.调大 forks 参数提高并发进程数← 正确答案
  • B.开启 SSH pipelining 减少往返← 正确答案
  • C.启用 fact caching 避免重复采集系统事实← 正确答案
  • D.将所有任务改为 shell 模块批量拼接

答案:ABC。forks 控制并行执行的主机数,pipelining 将模块执行通过单条 SSH 通道完成,fact caching 将 setup 采集结果持久化复用,三者均能显著提速。D 用 shell 拼接会破坏幂等性与错误定位能力,属于反优化。

Q7. 关于 Ansible Vault 的使用,下列说法正确的有?

多选题 · mid

  • A.可用 ansible-vault encrypt 对变量文件加密← 正确答案
  • B.加密文件在运行前必须手动解密才能使用
  • C.可通过 --vault-password-file 指定密码文件避免交互输入← 正确答案
  • D.Vault 密码必须写在 Playbook 的 vars 中

答案:AC。ansible-vault encrypt 以 AES-256 加密文件,运行 playbook 时 Ansible 自动解密,无需手动操作,故 B 错误;--vault-password-file 可在 CI 等非交互场景提供密码。密码写入 Playbook 明文恰恰是 Vault 要避免的,D 错误。

Q8. 动态 Inventory 的核心价值是?

单选题 · hard

  • A.运行时从云平台 API 实时获取主机列表,适应弹性伸缩← 正确答案
  • B.通过 DNS 轮询自动发现所有服务器
  • C.让 inventory 文件支持懒加载以加快解析
  • D.避免编写任何连接变量

答案:A。动态 Inventory 插件(AWS EC2、Azure、Kubernetes 等)在每次执行时调用云 API 拉取最新主机与标签信息,新扩容实例自动纳入管理,缩容节点自动剔除,无需人工维护列表。

Q9. 下列哪些参数或配置与 Ansible 控制节点的执行效率直接相关?

多选题 · hard

  • A.forks 并发数← 正确答案
  • B.host_key_checking 是否开启
  • C.SSH timeout 超时设置← 正确答案
  • D.fact_caching_timeout 缓存有效期← 正确答案

答案:ACD。forks 决定并行度;timeout 影响慢速或故障节点的等待开销;fact_caching_timeout 控制 facts 缓存有效时长,减少重复采集。host_key_checking 是安全校验开关,影响运行时的密钥确认行为而非执行效率。

Q10. 在基础设施编排中,Ansible 与 Terraform 的正确分工是?

单选题 · extreme

  • A.Terraform 负责创建云资源,Ansible 负责实例内部配置收敛← 正确答案
  • B.Ansible 负责创建 VPC 与虚拟机,Terraform 负责安装软件
  • C.二者功能完全重叠,任选其一即可
  • D.Ansible 只能管理物理机,Terraform 只能管理云资源

答案:A。最佳实践是分层协作——Terraform 声明式管理云资源生命周期(创建/销毁 VPC、ECS、负载均衡),Ansible 在资源就绪后通过 SSH 完成软件安装、配置与状态收敛。二者互补而非互替。