Loading... # Proxmox VE 无法创建新虚拟机问题排查与修复 # 一、事件概述 ## 1. 事件背景 某台 Proxmox VE(PVE)宿主机(IP:192.168.124.253)在运维中发现无法通过 Web 界面或预期流程创建新的虚拟机,需远程 SSH 登录排查根因并完成修复。 ## 2. 影响范围 ### A. 影响对象 - 单台 PVE 节点:192.168.124.253(主机名 olab-iaas-pve253) - 集群名:pve-zkzj(单节点集群) ### B. 影响功能 - 通过 Web UI 或依赖集群节点列表的流程创建新 VM 时可能失败或异常 - pvedaemon 每分钟尝试拉取节点 pve3 的指标,因证书路径不存在而持续报错 ### C. 影响时长 - 从配置不一致产生到排查修复前,错误日志持续存在;修复后恢复正常 ## 3. 严重程度 - 单节点 PVE 运维受阻,无法可靠创建新 VM,属运维类故障,修复后无数据丢失 # 二、事件时间线 ## 1. 现象与发现 ### A. 现象描述 - 用户反馈在该 PVE 上「无法创建新 VM」 - 日志中反复出现:could not fetch metrics from pve3: '/etc/pve/nodes/pve3/pve-ssl.pem' does not exist! ### B. 排查入口 - 通过 SSH 登录 root@192.168.124.253,按存储、服务、集群、配置、复现步骤逐项检查 ## 2. 诊断过程(时间线概括) ### A. 环境与存储 - 确认 PVE 版本:pve-manager/8.4.1,kernel 6.8.12-11-pve - 确认 local、local-lvm、local-nvme 均有可用空间,无 ZFS - 结论:存储空间非根因 ### B. 服务与集群 - pve-cluster、pvedaemon、pveproxy、pvestatd 均为 active - pvecm status 显示单节点、Quorate: Yes - 结论:服务与 quorum 正常 ### C. 配置不一致 - 查看 /etc/pve/corosync.conf:nodelist 中节点名为 pve3 - 实际主机名为 olab-iaas-pve253,/etc/pve/nodes/ 下仅有目录 olab-iaas-pve253 - 不存在 /etc/pve/nodes/pve3/ 及 pve-ssl.pem,导致 pvedaemon 按节点名 pve3 拉取指标时失败 ## 3. 根因与修复 ### A. 根本原因 - 集群配置中节点名(corosync name)为 pve3,与当前主机名及 pmxcfs 节点目录名 olab-iaas-pve253 不一致,API/指标采集逻辑仍按 pve3 查找证书与节点目录导致报错,进而可能影响创建 VM 的流程。 ### B. 修复操作 - 将 /etc/pve/corosync.conf 中 nodelist.node.name 从 pve3 改为 olab-iaas-pve253 - 执行 systemctl restart pve-cluster 使配置生效 - 重启后日志出现 resolved node name 'olab-iaas-pve253' to '192.168.124.253',不再出现 pve3 相关错误 # 三、问题分析 ## 1. 直接原因 - pvedaemon 根据 corosync 的 nodelist 枚举节点并拉取各节点指标,对节点 pve3 会访问 /etc/pve/nodes/pve3/pve-ssl.pem;该路径不存在,导致持续报错。 ## 2. 根本原因(5 Whys 简述) ### A. 为何会出现「pve3」与「olab-iaas-pve253」不一致? - 集群或节点曾以 pve3 命名(或从模板/克隆得来),后续主机名改为 olab-iaas-pve253,但 corosync.conf 未同步修改,或仅在一侧修改导致不一致。 ### B. 为何会影响创建 VM? - Web UI 或后端在创建 VM 时可能依赖集群节点列表或节点状态;对不存在的 pve3 的访问失败会导致接口报错或行为异常,表现为「无法创建新 VM」。 ### C. 为何 CLI 创建 VM 可成功? - qm create 等命令在本机执行,不依赖对「pve3」节点的远程指标拉取,因此不受该配置错误影响。 ## 3. 深层反思 - 单节点 PVE 上节点名应与主机名一致,并确保 /etc/pve/nodes/<节点名> 与 corosync 中 name 一致,避免「幽灵节点」导致监控与 API 异常。 - 变更主机名或迁移节点时,应同步检查并更新 /etc/pve/corosync.conf 中的节点名。 # 四、解决方案 ## 1. 已实施的永久方案 ### A. 修改集群节点名 - 编辑 /etc/pve/corosync.conf,将 nodelist 中 node.name 从 pve3 改为 olab-iaas-pve253,与当前主机名及节点目录一致。 ### B. 使配置生效 - 执行 systemctl restart pve-cluster,确认 pve-cluster 与 pvedaemon 正常,且日志中不再出现 pve3 或 pve-ssl.pem 不存在错误。 ## 2. 预防措施 ### A. 主机名与集群节点名一致 - 安装或加入集群时,确保 corosync.conf 中的 name 与 hostname 一致;若后续修改 hostname,需同步修改 corosync 并重启 pve-cluster。 ### B. 变更检查清单 - 修改 PVE 主机名、迁移节点或恢复集群配置时,检查:/etc/hostname、/etc/pve/corosync.conf 的 nodelist、/etc/pve/nodes/ 下目录名是否一致。 # 五、经验总结 ## 1. 做得好的地方 - 按存储、服务、集群、配置、复现的步骤系统排查,快速定位到配置不一致。 - 仅修改配置并重启服务即修复,无需重建集群或迁移数据。 ## 2. 可复用经验 - PVE 单节点或集群中,节点名(corosync name)与 /etc/pve/nodes/<name> 必须一一对应;name 与主机名一致可减少此类问题。 - 出现「could not fetch metrics from <节点名>」「pve-ssl.pem does not exist」时,优先检查该节点名是否在 nodes 下存在、是否与 hostname/corosync 一致。 ## 3. 诊断命令速查 | 目的 | 命令示例 | |--------------|----------| | 存储与空间 | pvesm status;df -h | | 服务状态 | systemctl status pve-cluster pvedaemon | | 集群与 quorum | pvecm status | | 节点名与配置 | cat /etc/pve/corosync.conf;ls /etc/pve/nodes/ | | 复现创建 VM | qm create 9999 --memory 512 --name test-vm --net0 virtio,bridge=vmbr0 | # 六、流程图(诊断与修复) ```mermaid flowchart LR A[无法创建新VM] --> B[检查存储] B --> C[检查服务与集群] C --> D[检查节点名与目录] D --> E[corosync name 与 nodes 目录不一致] E --> F[修改 name 为主机名] F --> G[重启 pve-cluster] G --> H[恢复正常] ```  # 七、参考资料 - Proxmox VE 官方文档:Cluster 与 Corosync 配置说明 - 本复盘基于 2026 年 3 月对单台 PVE 节点 192.168.124.253 的远程排查与修复实践整理 最后修改:2026 年 03 月 04 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏