feat: 优化虚拟机列表,支持多主机聚合显示
- 新增 /vm/list-all API 聚合所有主机虚拟机 - parse_vm_info 支持 include_ip 参数控制IP获取 - VMList 添加主机选择器,显示宿主机列 - 修复 API 路径 /host/list -> /hosts/list - 新增启动脚本 scripts/start.sh - 新增 Guest Agent 安装脚本 scripts/install-guest-agent.sh - 更新 README 文档
This commit is contained in:
@@ -1,22 +1,25 @@
|
||||
# KVM 虚拟化管理平台
|
||||
|
||||
基于 FastAPI + Vue 3 + Element Plus 的 KVM 虚拟机管理平台,通过 libvirt API 管理虚拟机。
|
||||
基于 FastAPI + Vue 3 + Element Plus 的 KVM 虚拟机管理平台,通过 libvirt API 管理虚拟机,支持多主机纳管。
|
||||
|
||||
## 技术栈
|
||||
|
||||
- **后端**: FastAPI + libvirt Python API
|
||||
- **前端**: Vue 3 + Element Plus + Vite
|
||||
- **前端**: Vue 3 + Element Plus + Vite + noVNC
|
||||
- **虚拟化**: QEMU/KVM + libvirt
|
||||
- **认证**: JWT Token
|
||||
|
||||
## 功能
|
||||
|
||||
- 🖥️ 虚拟机管理(创建/启动/停止/删除/快照)
|
||||
- 🖥️ 虚拟机管理(创建/启动/停止/删除/克隆/迁移)
|
||||
- 📊 资源监控(CPU/内存/磁盘/网络)
|
||||
- 💾 存储池管理
|
||||
- 🌐 网络管理
|
||||
- 📋 控制台访问(noVNC)
|
||||
- 💾 存储池管理(支持多种存储类型)
|
||||
- 🌐 网络管理(桥接/NAT/独立网络)
|
||||
- 📋 控制台访问(WebSocket VNC)
|
||||
- 📸 快照管理
|
||||
- 🔐 用户认证
|
||||
- 🔐 用户认证(JWT)
|
||||
- 🖧 多主机纳管(支持 SSH/TCP 连接远程 KVM)
|
||||
- 📡 IP 地址自动获取(需要配置 QEMU Guest Agent)
|
||||
|
||||
## 项目结构
|
||||
|
||||
@@ -24,42 +27,142 @@
|
||||
kvm-manager/
|
||||
├── backend/
|
||||
│ ├── app/
|
||||
│ │ ├── main.py
|
||||
│ │ ├── config.py
|
||||
│ │ ├── database.py
|
||||
│ │ ├── models.py
|
||||
│ │ ├── auth.py
|
||||
│ │ └── routers/
|
||||
│ │ ├── vm.py
|
||||
│ │ ├── storage.py
|
||||
│ │ ├── network.py
|
||||
│ │ ├── snapshot.py
|
||||
│ │ └── monitor.py
|
||||
│ │ ├── main.py # FastAPI 应用入口
|
||||
│ │ ├── config.py # 配置
|
||||
│ │ ├── libvirt_conn.py # libvirt 连接池
|
||||
│ │ ├── hosts.py # 主机注册表
|
||||
│ │ ├── utils.py # 工具函数
|
||||
│ │ └── routers/ # API 路由
|
||||
│ │ ├── vm.py # 虚拟机管理
|
||||
│ │ ├── storage.py # 存储管理
|
||||
│ │ ├── network.py # 网络管理
|
||||
│ │ ├── snapshot.py # 快照管理
|
||||
│ │ ├── monitor.py # 资源监控
|
||||
│ │ └── host.py # 主机管理
|
||||
│ ├── requirements.txt
|
||||
│ └── Dockerfile
|
||||
├── frontend/
|
||||
│ ├── src/
|
||||
│ │ ├── views/
|
||||
│ │ ├── components/
|
||||
│ │ ├── api/
|
||||
│ │ ├── router/
|
||||
│ │ ├── views/ # 页面组件
|
||||
│ │ ├── components/ # 通用组件
|
||||
│ │ ├── api/ # API 调用
|
||||
│ │ ├── router/ # 路由配置
|
||||
│ │ └── App.vue
|
||||
│ ├── package.json
|
||||
│ └── vite.config.js
|
||||
├── scripts/ # 工具脚本
|
||||
│ ├── start.sh # 服务启动脚本
|
||||
│ └── install-guest-agent.sh # Guest Agent 安装脚本
|
||||
├── docker-compose.yml
|
||||
└── README.md
|
||||
```
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 方式一:使用启动脚本(推荐)
|
||||
|
||||
```bash
|
||||
cd kvm-manager/scripts
|
||||
|
||||
# 启动所有服务
|
||||
./start.sh
|
||||
|
||||
# 查看服务状态
|
||||
./start.sh status
|
||||
|
||||
# 停止服务
|
||||
./start.sh -s
|
||||
```
|
||||
|
||||
### 方式二:手动启动
|
||||
|
||||
```bash
|
||||
# 后端
|
||||
cd backend
|
||||
python -m venv venv
|
||||
source venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
uvicorn app.main:app --host 0.0.0.0 --port 8004
|
||||
|
||||
# 前端
|
||||
# 前端(另开终端)
|
||||
cd frontend
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### 方式三:Docker 部署
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 访问地址
|
||||
|
||||
- 前端界面:http://localhost:8005
|
||||
- API 接口:http://localhost:8004
|
||||
- API 文档:http://localhost:8004/docs
|
||||
|
||||
## 多主机纳管
|
||||
|
||||
在「主机管理」页面添加远程 KVM 主机,支持以下连接方式:
|
||||
|
||||
- **本地连接**:`qemu:///system`
|
||||
- **SSH 连接**:`qemu+ssh://user@host/system`
|
||||
- **TCP 连接**:`qemu+tcp://host/system`
|
||||
|
||||
## QEMU Guest Agent
|
||||
|
||||
用于自动获取虚拟机 IP 地址。
|
||||
|
||||
### 安装脚本
|
||||
|
||||
```bash
|
||||
# 单个虚拟机
|
||||
./scripts/install-guest-agent.sh VM_NAME
|
||||
|
||||
# 所有虚拟机
|
||||
./scripts/install-guest-agent.sh --all
|
||||
```
|
||||
|
||||
### 手动配置
|
||||
|
||||
1. 关机虚拟机
|
||||
2. 编辑配置:`virsh edit VM_NAME`
|
||||
3. 在 `<devices>` 中添加:
|
||||
|
||||
```xml
|
||||
<controller type='virtio-serial' index='0'/>
|
||||
<channel type='unix'>
|
||||
<source mode='bind'/>
|
||||
<target type='virtio' name='org.qemu.guest_agent.0'/>
|
||||
</channel>
|
||||
```
|
||||
|
||||
4. 开机后安装 Agent:
|
||||
|
||||
```bash
|
||||
# CentOS/RHEL
|
||||
yum install qemu-guest-agent
|
||||
systemctl enable qemu-guest-agent
|
||||
|
||||
# Ubuntu/Debian
|
||||
apt install qemu-guest-agent
|
||||
systemctl enable qemu-guest-agent
|
||||
```
|
||||
|
||||
5. 验证:`virsh qemu-agent-command VM_NAME '{"execute":"guest-info"}'`
|
||||
|
||||
## 配置说明
|
||||
|
||||
| 配置项 | 说明 | 默认值 |
|
||||
|--------|------|--------|
|
||||
| `LIBVIRT_URI` | 本地 libvirt 连接 URI | `qemu:///system` |
|
||||
| `API_PREFIX` | API 路径前缀 | `/api` |
|
||||
| `SECRET_KEY` | JWT 密钥 | 自动生成 |
|
||||
| `KVM_DATA_DIR` | 主机数据存储目录 | `/var/lib/kvm-manager` |
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 远程主机 VNC 需要监听 `0.0.0.0` 才能被代理访问
|
||||
- SSH 模式需要配置无密码 SSH 登录
|
||||
- Guest Agent 需要虚拟机内部安装并运行才能获取 IP
|
||||
|
||||
Fai riferimento in un nuovo problema
Block a user