Linux

Ansible 快速上手

RHEL 9 搭 Ansible:control 与节点、ansible.cfg、inventory 主机清单,以及 ad-hoc 的 ansible ping 连通性测试。

从这一篇起进入 RHCE / EX294 的主战场:用 Ansible 在一台机器上,批量管很多台机器。先把「架构、配置文件、主机清单、能不能 ping 通」跑通,后面的 Playbook 才有意义。

系列:从 RHCSA 到 RHCE · 第 14 / 17 篇 上一篇:Podman 容器 下一篇:Playbook 与模块 总目录:系列索引

环境说明

  • 系统:RHEL 9
  • 节点角色:
角色干什么示例主机名
控制端 control装 Ansible、写配置、发指令control
被控端 node接受任务执行node1 node2…
  • 身份:考试常用普通用户(如 alice)并 sudo 提权;自学也可 root
  • 网络:control 能 SSH 到各 node
  • 前置:SSH、sudo、基础命令

1. Ansible 是什么

一句话:不用一台台 SSH 手敲,用一份清单 + 一条命令/一个剧本,让多台机器自动完成同样的事。

特点好处
无客户端 agent被控端只需 SSH + Python
模块化装包、建用户、改配置都有现成模块
可重复同样的 playbook 可反复跑
考试核心EX294 基本就是写 Ansible

和手敲 SSH 的对比:

手敲:ssh node1 'useradd tom' → ssh node2 'useradd tom' → ...
Ansible:ansible all -m user -a 'name=tom'

2. 搭实验环境(练习机常见做法)

课堂/模拟环境常用工具一键重置节点(仅练习环境):

rht-vmctl reset control
rht-vmctl reset node1
rht-vmctl reset node2

然后从管理机 SSH 过去(IP/用户以题面为准):

ssh alice@control

练习环境:rht-vmctl、预置用户 alice、免密 sudo 等是课堂机自带;公网自建环境请自己配 SSH 与 sudo。

自学最小拓扑

  • 1 台 control
  • 2 台 node(1 台也能做,多台更像考试)
  • 全部互通,control 能 ssh 用户@nodeIP

3. 安装 Ansible

在 control 上:

sudo dnf -y install ansible-core
ansible --version

能看到版本号即可。被控端 node 一般不用装 Ansible。

4. 配置文件:ansible.cfg

它在哪

Ansible 按这个顺序找配置(找到就用):

0. 环境变量 ANSIBLE_CONFIG(最高优先,考试较少用)
1. 当前目录 ./ansible.cfg
2. 用户家目录 ~/.ansible.cfg
3. 全局 /etc/ansible/ansible.cfg

考试常要求写:

/home/alice/ansible/ansible.cfg

并且之后都 cd 到 /home/alice/ansible 再执行命令——这样才会用到你写的 cfg。

考试常用最小配置

mkdir -p ~/ansible
cd ~/ansible
vim ansible.cfg
[defaults]
inventory = /home/alice/ansible/inventory
roles_path = /home/alice/ansible/roles
collections_paths = /home/alice/ansible/collections
remote_user = alice

[privilege_escalation]
become = True
become_ask_pass = False
become_method = sudo
become_user = root
配置项含义
inventory主机清单文件在哪
roles_path角色目录(后面 role 篇用)
collections_paths集合目录
remote_user用哪个用户 SSH 到节点
become = True是否提权
become_ask_pass = Falsesudo 是否还要输密码(练习常预设免密)
become_method = sudo提权方式
become_user = root提权成谁

易错:cfg 在 /home/alice/ansible/,人却在 /home 执行 ansible,会去读别的配置或空清单。

5. 主机清单:inventory

它是什么

一个文本文件,写清楚「有哪些机器、怎么分组」。

cd ~/ansible
vim inventory

示例:

[test01]
node1

[test02]
node2

[web]
node3
node4

[test05]
node5

[webtest:children]
web
写法含义
[组名]分组,组名自定义
组下面一行一个主机主机名或 IP
[组:children]嵌套组,包含其它组

系统还有一个隐含组 all:清单里所有主机。

考点:inventory 路径要与 cfg 里 inventory= 一致;分组名与题面完全一致。

6. 第一次连通:ansible ping

必须在有 ansible.cfg 的目录执行:

cd /home/alice/ansible
ansible all -m ping

成功示例:

node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

解释:

关键字含义
SUCCESS连上并执行成功
ping: pong模块正常(不是 ICMP ping,是 Ansible 探活)
changed: false没有「改变」系统状态

按组、按主机:

ansible node1 -m ping
ansible web -m ping
ansible test01 -m ping

错误示范:清单是空的

cd
ansible all -m ping
[WARNING]: provided hosts list is empty, only localhost is available. ...

意思:当前目录找不到你的 inventory。回到正确目录:

cd /home/alice/ansible
ls
ansible all -m ping

新手第一坑:不在 ~/ansible 下执行命令。养成 cd ~/ansible 再干活的习惯。

7. ad-hoc 模式(下一阶段的入口)

ansible 主机组 -m 模块名 -a "参数"

刚才的 ping:

ansible all -m ping

后面会大量使用 -m user、-m yum、-m copy 等。本篇先把 目录 + cfg + inventory + ping 稳住即可。

查看有哪些模块:

ansible-doc -l
ansible-doc ping
# 帮助里按空格翻页,q 退出

8. 推荐实验(约 25 分钟)

在 control 上,用户 alice(换成你的用户名):

# 1) 安装
sudo dnf -y install ansible-core
ansible --version

# 2) 目录与配置
mkdir -p /home/alice/ansible
cd /home/alice/ansible
vim ansible.cfg
# 粘贴上文最小配置(路径改成你的家目录)

# 3) 清单
vim inventory
# 至少写入 node1、node2(名称与题面/真实主机一致)

# 4) 连通性
ansible all -m ping
ansible node1 -m ping

# 5) 故意跑错目录
cd /tmp
ansible all -m ping
cd /home/alice/ansible
ansible all -m ping

期望

  • cd ~/ansible && ansible all -m ping 有 SUCCESS / pong
  • 在 /tmp 下执行出现 hosts list is empty(或连错主机)
  • 回到正确目录又恢复正常

9. 速查表

目标做法
装 Ansiblesudo dnf -y install ansible-core
配置查找顺序./ansible.cfg → ~/.ansible.cfg → /etc/ansible/ansible.cfg
考试工作目录/home/用户/ansible(与 cfg、inventory 同级)
主机清单cfg 的 inventory= 指向的文件
分组[组名];嵌套 [组:children]
全部主机all
连通测试ansible all -m ping
查看模块ansible-doc -l

考点与易错

考点:按题面写出 ansible.cfg + inventory,并 ansible all -m ping 全绿。 易错:工作目录不对,没用到自己的 cfg/inventory。 易错:inventory 路径写错;主机名与真实机器不一致。 易错:become=True 但 sudo 未预配免密,卡在密码。 易错:把 ansible ping 当成网络 ICMP ping——它是模块探活。 练习环境:课堂若预装 Ansible 与 alice,只需写 cfg/inventory 并 ping。

小结

  1. 一台 control 管多台 node;被控端只要 SSH + Python。
  2. 三件套:工作目录、ansible.cfg、inventory。
  3. 在 ~/ansible 下执行;ansible all -m ping 出现 pong 即通。
  4. ad-hoc 格式:ansible 主机组 -m 模块 -a "参数"——下一篇用它和 Playbook 干活。

下一篇写 Playbook 与常用模块(user/file/yum/service/copy…)。


系列导航:总目录 · 上一篇:Podman 容器 · 下一篇:Playbook 与模块

相关阅读

全部文章 →
← 返回列表更多「Linux」