OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  proxmox: 通过 REST API 深度管理 Proxmox VE 虚拟化集群

proxmox: 通过 REST API 深度管理 Proxmox VE 虚拟化集群

 
  repository ·  2026-02-02 11:16:03 · 3 次点击  · 0 条评论  

名称: proxmox
描述: 通过 REST API 管理 Proxmox VE 集群。当用户要求列出、启动、停止、重启虚拟机或 LXC 容器,检查节点状态,创建快照,查看任务或管理 Proxmox 基础设施时使用。需要配置 API 令牌或凭据。


Proxmox VE 管理

配置

设置环境变量或将凭据存储在 ~/.proxmox-credentials 文件中:

# 选项 1: API 令牌(推荐)
export PROXMOX_HOST="https://192.168.1.100:8006"
export PROXMOX_TOKEN_ID="user@pam!tokenname"
export PROXMOX_TOKEN_SECRET="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

# 选项 2: 凭据文件
cat > ~/.proxmox-credentials << 'EOF'
PROXMOX_HOST=https://192.168.1.100:8006
PROXMOX_TOKEN_ID=user@pam!monitoring
PROXMOX_TOKEN_SECRET=your-token-secret
EOF
chmod 600 ~/.proxmox-credentials

在 Proxmox 中创建 API 令牌:数据中心 → 权限 → API 令牌 → 添加

CLI 使用

# 加载凭据
source ~/.proxmox-credentials 2>/dev/null

# API 令牌的认证头
AUTH="Authorization: PVEAPIToken=$PROXMOX_TOKEN_ID=$PROXMOX_TOKEN_SECRET"

常用操作

集群与节点

# 集群状态
curl -ks -H "$AUTH" "$PROXMOX_HOST/api2/json/cluster/status" | jq

# 列出节点
curl -ks -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes" | jq '.data[] | {node, status, cpu, mem: (.mem/.maxmem*100|round)}'

# 节点状态
curl -ks -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/status" | jq

列出虚拟机与容器

# 节点上的所有虚拟机
curl -ks -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/qemu" | jq '.data[] | {vmid, name, status, mem: .mem, cpu: (.cpu*100|round)}'

# 节点上的所有 LXC 容器
curl -ks -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/lxc" | jq '.data[] | {vmid, name, status}'

# 集群范围的资源
curl -ks -H "$AUTH" "$PROXMOX_HOST/api2/json/cluster/resources?type=vm" | jq '.data[] | {node, vmid, name, type, status}'

虚拟机/容器控制

# 启动虚拟机
curl -ks -X POST -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/qemu/{vmid}/status/start"

# 停止虚拟机
curl -ks -X POST -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/qemu/{vmid}/status/stop"

# 关闭虚拟机(优雅方式)
curl -ks -X POST -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/qemu/{vmid}/status/shutdown"

# 重启虚拟机
curl -ks -X POST -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/qemu/{vmid}/status/reboot"

# LXC 容器操作类似:将 /qemu/ 替换为 /lxc/

快照

# 列出快照
curl -ks -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/qemu/{vmid}/snapshot" | jq

# 创建快照
curl -ks -X POST -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/qemu/{vmid}/snapshot" \
  -d "snapname=snap1" -d "description=Before update"

# 回滚
curl -ks -X POST -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/qemu/{vmid}/snapshot/{snapname}/rollback"

# 删除快照
curl -ks -X DELETE -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/qemu/{vmid}/snapshot/{snapname}"

任务与日志

# 最近的任务
curl -ks -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/tasks" | jq '.data[:10] | .[] | {upid, type, status, user}'

# 任务日志
curl -ks -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/tasks/{upid}/log" | jq -r '.data[].t'

存储

# 列出存储
curl -ks -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/storage" | jq '.data[] | {storage, type, active, used_fraction: (.used/.total*100|round|tostring + "%")}'

# 存储内容
curl -ks -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/storage/{storage}/content" | jq

备份

# 列出备份
curl -ks -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/storage/{storage}/content?content=backup" | jq

# 开始备份
curl -ks -X POST -H "$AUTH" "$PROXMOX_HOST/api2/json/nodes/{node}/vzdump" \
  -d "vmid={vmid}" -d "storage={storage}" -d "mode=snapshot"

辅助脚本

使用 scripts/pve.sh 执行常用操作:

./scripts/pve.sh status          # 集群概览
./scripts/pve.sh vms             # 列出所有虚拟机
./scripts/pve.sh start {vmid}    # 启动虚拟机
./scripts/pve.sh stop {vmid}     # 停止虚拟机

注意事项

  • {node}{vmid}{storage}{snapname} 替换为实际值
  • API 令牌进行 POST/PUT/DELETE 操作时不需要 CSRF 令牌
  • 使用 -k 参数可跳过自签名证书的 SSL 验证
  • 任务操作会返回 UPID 用于跟踪异步作业
3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor