Ansible

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. 执行过程

  1. 你敲下命令。

  2. Ansible 读取 Inventory(看看要操作谁)。

  3. 通过 SSH 连上去。

  4. 把你的指令(模块)翻译成 Python 脚本,通过 SSH 推送到远程机器上执行。

  5. 执行完了自动销毁脚本,不留痕迹。

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触发器。只有在任务发生改变时才执行。比如改了配置文件,才去重启服务;如果没改,就不重启,避免不必要的重启。

总结(三句话)

  1. SSH 是通道 ,你只要能在终端里 ssh 通那台机器,Ansible 就能管。

  2. YAML 是语言,把操作步骤像写菜谱一样写下来,就是自动化。

  3. 幂等性是灵魂,不管跑多少遍,系统状态都是你期望的那个样子。

相关推荐
2301_8135995535 分钟前
HTML图片怎么用UnoCSS对齐_UnoCSS原子化CSS图片对齐实战
jvm·数据库·python
m0_3776182337 分钟前
c++怎么在不加载整个大文件的情况下获取其SHA256校验值【进阶】
jvm·数据库·python
LN花开富贵39 分钟前
【ROS】鱼香ROS2学习笔记二
linux·笔记·python·学习·嵌入式
qq_1898070344 分钟前
CSS如何实现纯CSS树状目录结构_利用-checked与递归思维构建交互节点
jvm·数据库·python
Micr0671 小时前
利用Werkzeug-Debug实现本地权限提升
python·web安全·网络安全
yanghuashuiyue1 小时前
langchain AI应用框架研究【开发部署-篇四】
python·langchain
无敌昊哥战神1 小时前
【保姆级题解】力扣17. 电话号码的字母组合 (回溯算法经典入门) | Python/C/C++多语言详解
c语言·c++·python·算法·leetcode
2301_777599371 小时前
Go语言如何做HTTP连接池_Go语言HTTP连接池教程【最新】
jvm·数据库·python
坐吃山猪1 小时前
Python27_协程游戏理解
开发语言·python·游戏
Polar__Star1 小时前
Redis如何利用位图快速判断数据存在性
jvm·数据库·python