Ansible简介
Ansible 是什么?
Ansible 是一个开源的 自动化运维和配置管理工具,主要用于:
-
配置管理:自动化安装软件、配置系统、修改配置文件等
-
应用部署:在多台服务器上同时部署应用
-
任务执行:批量执行命令或脚本
-
编排 Orchestration:跨多台主机协调任务,比如启动依赖服务、顺序执行任务
Ansible 的特点
- 控制端执行
- 只需要在自己的电脑(控制节点) 写剧本(Playbook)或执行命令, 不需要登录每台服务器逐一操作。
- 通过 SSH 连接受管节点
- Ansible 会自动通过 SSH 登录目标服务器(受管节点),执行你写的任务。
- 不需要在目标服务器上安装客户端软件(Ansible 是 agentless,无代理)。
- 自动化执行
- Ansible所有命令都是远程执行的,不用在服务器上手写命令。
Ansible 的安装
一、准备控制端(Ubuntu 子系统)
1. 安装 WSL 和 Ubuntu
在 PowerShell(管理员模式)里运行:
wsl --install -d Ubuntu
安装完后设置用户名和密码
检查 WSL 版本:
wsl -l -v
确保 Ubuntu 在 VERSION 2(WSL2)。
2. 在 Ubuntu 里安装 Ansible
进入 Ubuntu 子系统,执行:
sudo apt update
sudo apt install -y ansible sshpass
验证:
ansible --version
二、准备受管节点
至少需要一个 Linux 节点作为被控端,可以有三种选择:
-
在本机再装一个虚拟机(比如 VirtualBox/VMware 装个 Ubuntu/CentOS)。
-
用云主机(阿里云、腾讯云、AWS、Azure 都行)。
-
直接用你自己的另一台 Linux 设备(如果有的话)。
受管节点必须能被 控制端(WSL Ubuntu) 通过网络访问。
也可以使用Docker 容器模拟受管节点, 比较方便:
- 轻量化:不用额外启动完整虚拟机,节省资源
- 快速搭建:几条命令就能启动多台 Linux 容器
- 易于重置:容器出了问题可以直接删除重建
- 隔离性好:每个容器相当于一台独立的 Linux 主机
参考我的另一篇博客(在 WSL Ubuntu 上使用 Docker 搭建可被 Ansible 控制的受控节点环境-CSDN博客) 学习如何使用docker搭建受控节点
3. 确认受管节点安装了 SSH 和 Python3
在受管节点上:
sudo apt update
sudo apt install -y openssh-server python3
保证 SSH 服务在运行:
systemctl status ssh
4. 配置 SSH 免密登录
在 控制端 (WSL Ubuntu):
ssh-keygen -t rsa -b 4096
一路回车即可。然后复制公钥到受管节点:
ssh-copy-id user@192.0.2.50
(user
换成受管节点的用户名,192.0.2.50
换成受管节点的 IP)
测试能否免密 SSH:
ssh user@192.0.2.50
如果直接登录成功(不用密码),说明配置好了。
🛠️ 三、写 Ansible 清单文件
在 控制端 (WSL Ubuntu) 创建目录:
mkdir -p ~/ansible_quickstart
cd ~/ansible_quickstart
创建 inventory.ini
:
nano inventory.ini
内容:
[myhosts]
192.0.2.50 ansible_user=user
把 192.0.2.50
换成你的受管节点 IP,user
换成用户名。
🛠️ 四、测试 Ansible
- 验证清单文件:
ansible-inventory -i inventory.ini --list
- Ping 受管节点:
ansible myhosts -m ping -i inventory.ini
如果返回 pong
,说明环境成功跑通 🎉
WSL(Ubuntu 子系统)和 Windows 磁盘的映射关系
在 WSL 里,Windows 的每个盘符都会挂载到 /mnt/
目录下:
Windows 盘符 | WSL 对应路径 |
---|---|
C: | /mnt/c/ |
D: | /mnt/d/ |
E: | /mnt/e/ |
… | … |
所以 Windows 上的文件路径:
D:\ansible\ansible_quickstart\inventory.ini
在 WSL 里就是:
/mnt/d/ansible/ansible_quickstart/inventory.ini
路径书写规则
-
盘符小写:
D:
→/mnt/d/
-
反斜杠换成正斜杠:
\
→/
-
大小写敏感:WSL 目录名和文件名大小写敏感
-
空格处理:如果路径有空格,需要用引号或者转义,例如:
cd "/mnt/d/My Files/ansible_quickstart"
或者
cd /mnt/d/My\ Files/ansible_quickstart
一些概念:
概念 | 作用 / 含义 | 通俗理解 / 类比 |
---|---|---|
控制节点 (Control Node) | 执行 Ansible 命令和剧本的机器 | 开发者的电脑,你在这里写 Playbook、运行命令 |
受管节点 (Managed Node) | 被 Ansible 管理的服务器 | 目标服务器,Ansible 会远程 SSH 登录执行操作 |
Inventory (清单/主机列表) | 配置哪些主机、登录用户等信息 | 配置文件,告诉程序目标机器是谁、登录用户是谁 |
变量 (Variables) | 存储主机或组的参数,如 IP、端口、用户名 | 可复用参数,不用在剧本里写死具体值 |
模块 (Modules) | 执行具体操作的插件 | 功能函数,每条模块就是一行可执行操作,如安装软件、复制文件、重启服务 |
剧本 (Playbook) | 多条任务的集合,按顺序执行 | 方法或流程,把任务按顺序写好自动在目标主机执行 |
Roles (角色) | 任务、变量、文件、模板的组织方式 | 包/模块化,把相关剧本、变量、文件打包成可重用单元 |