1. 它是个啥?
-
无代理 :它不像其他软件要在被控制的电脑上装东西。只要被控电脑能联网、能用SSH (Linux)或WinRM (Windows),Ansible 就能通过SSH远程过去干活。
-
傻瓜式 :写的是
YAML格式的剧本,长得像配置文件,没有编程基础也能看懂。
2. 核心概念
-
控制节点:就是你手里那台装了 Ansible 的电脑,负责发号施令。
-
Inventory :通讯录 。一个文本文件,里面写着你管哪些机器,比如
[webserver]组里放着 192.168.1.1 和 192.168.1.2。 -
Module :工具箱里的工具 。Ansible 自带几百个工具,比如
copy是拷贝文件,yum是装软件,service是重启服务。你只需要说"用 copy 模块",它就知道怎么干活。 -
Playbook :剧本/菜谱 。就是一系列操作的步骤文档。比如"先装 Nginx,再把配置文件拷过去,最后启动服务"。剧本里的每一步叫 Task。
-
Idempotence :不管执行多少次,结果都一样。比如你写了"确保 Nginx 是安装状态"。如果没装,它就装;如果已经装了,它就略过。这保证了你可以反复执行剧本而不会把系统搞乱。
3. 常用命令
-
ansible :临时执行一条命令。比如
ansible all -m ping就是测试通讯录里所有机器通不通。 -
ansible-playbook :执行写好的剧本。比如
ansible-playbook install_nginx.yml。
4. 执行过程
-
你敲下命令。
-
Ansible 读取 Inventory(看看要操作谁)。
-
通过 SSH 连上去。
-
把你的指令(模块)翻译成 Python 脚本,通过 SSH 推送到远程机器上执行。
-
执行完了自动销毁脚本,不留痕迹。
5. 常用模块(工具)
-
ping:测机器是否活着。 -
command/shell:远程跑命令(shell 能识别|和>,command 更安全但功能少)。 -
copy/fetch:往机器传文件 / 从机器取文件。 -
yum/apt/pip:装软件包。 -
template:传文件的高级版,支持变量替换(比如根据不同的机器,把配置里的 IP 改成它自己的)。 -
file:管理文件、目录的权限和状态。
6. 变量与事实
-
Variables :变量 。比如写剧本时不用写死端口,写成
{``{ http_port }},实际执行时传进去。 -
Facts :自动采集的机器信息。Ansible 在执行前会先偷看一下机器的 IP、CPU、内存、操作系统版本,把这些信息存起来,你在剧本里可以直接用。
7. 怎么组织项目
通常一个项目长这样:
text
site.yml # 总入口剧本
webservers.yml # 专门给 web 服务器用的剧本
dbservers.yml # 给数据库用的
group_vars/ # 组变量,比如 webserver 组都安装哪个目录
host_vars/ # 某台机器的私密变量(比如密码)
roles/ # 高级用法,把装nginx、装mysql拆成独立的“角色”
8. 高级点
-
Roles :标准化组件。把一堆任务、文件、变量打包成一个文件夹,像搭积木一样复用。比如"nginx_role",以后装 Nginx 直接调用它就行,不用再写一遍步骤。
-
Ansible Vault :密码保管箱。用来加密 yml 文件里的密码,避免把密码明文写在代码里。
-
Handlers :触发器。只有在任务发生改变时才执行。比如改了配置文件,才去重启服务;如果没改,就不重启,避免不必要的重启。
总结(三句话)
-
SSH 是通道 ,你只要能在终端里
ssh通那台机器,Ansible 就能管。 -
YAML 是语言,把操作步骤像写菜谱一样写下来,就是自动化。
-
幂等性是灵魂,不管跑多少遍,系统状态都是你期望的那个样子。