U盘安装pve虚拟化

概述

Proxmox VE(Virtual Environment)是一个完整的、开源的企业虚拟化服务器管理平台。它将KVM管理程序和Linux Containers (LXC)、软件定义的存储和网络功能紧密集成在一个平台上。通过集成的基于web的用户界面,您可以轻松地管理vm和容器、集群的高可用性或集成的灾难恢复工具。

pve的特点

  • PVE 的虚拟化核心是 QEMU/KVM
  • pve 的软件和社区支持都是免费的,企业用户则可以通过订阅制获得付费商业支持
  • 网络方面,PVE 支持桥接和路由两种方式(默认是桥接)

相对于 VMware Esxi 虚拟化,pve的优势如下

  • pve 是开源项目,可以认为 不存在授权问题,而 VMware Esxi 免费试用60天
  • 对硬件兼容性更好:支持笔记本、台式机、服务器等,且 pve 支持 Intel 和 AMD 的 cpu(vmware不支持AMD)
  • 去中心化:基于Web的管理界面,无需部署独立的vCenter管理节点,每个节点都是Master,可以在任意节点管理集群
  • 多台 PVE 节点可以组成一个集群(cluster)

制作开机启动盘

1、制作开机启动u盘,请参考 制作启动u盘

2、下载最新的 proxmox-ve_7.4-1.iso 并将其拷贝到u盘根目录,示例版本 7.2-1

注:官方下载 https://pve.proxmox.com/wiki/Downloads

开始安装 PVE 系统

第1步,将u盘插入需要安装pve系统的服务器,开机按 DELETE 进入 BIOS,调整USB设备启动

第2步,进入如下界面,选择 Install Proxmox VE

第3步,选择要安装到哪个磁盘设备,并点击下一步

第4步,设置时区,建议设置为 Asia/Shanghai

第5步,设置管理员账号(root)密码和邮箱

第6步,设置网络及IP地址,默认第一片网卡,如果网线接在别的网卡上,请务必修改,否则会访问失败

第7步,确认配置无误后,点击安装

第8步,开始安装中 ...

第9步,安装完成后,重启

第10步,安装完成后,会显示 pve 的 Web管理界面

第11步,在上一步输入 root 及密码后,可以登录后台,执行 cat /etc/os-release 可以看出底层系统是 Debian 11 操作系统

root@node01:/dev/pve# cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

第12步,登录Web管理界面

  • 地址:https://ip:8006
  • 账号:root
  • 密码:安装时设置的密码

注:安装pve会自动化格式化硬盘,无需单独格式化。

常用功能

安装第一台虚拟机

第1步,浏览器访问 https://ip:8006,上传os镜像文件到共享存储中

第2步,创建虚拟机,以虚拟光驱形式挂载该iso镜像到 CD/DVD 设备上,然后开始安装系统

创建模板并通过模板克隆虚拟机

第1步,选中需要设为模板的虚拟机,先关机(不要创建快照),再右键选择 Convert to templage

第2步,设为镜像模板之后,请注意该虚拟机的图标变了

第3步,选中该模板镜像,右键选择 Clone,注意 Mode 改为 Full Clone(默认为 Linked Clone)

注:不建议直接对某虚拟机右键选择 Clone 的方式来克隆虚拟机,如下是错误示范:

配置虚拟机为自启动

修改 nic

  • 假设服务器有3块网卡(enp2s0f0wlp3s0enx2c16dba9a0f3),安装pve的时候网卡选错为 enp2s0f0,需要改为 enx2c16dba9a0f3

    root\@pve:~# cat /etc/network/interfaces auto lo iface lo inet loopback

    iface enp2s0f0 inet manual

    auto vmbr0 iface vmbr0 inet static address 192.168.20.181/22 gateway 192.168.23.254 bridge-ports enp2s0f0 bridge-stp off bridge-fd 0

    iface enx2c16dba9a0f3 inet manual

    iface wlp3s0 inet manual

  • 登录pve的 >_ Shell 控制台,修改如下文件,最后重启网卡服务以生效。

    vi /etc/network/interfaces #.找到 bridge-ports enp2s0f0 #.改为 bridge-ports enx2c16dba9a0f3

    service networking restart

修改 ip

  • 登录pve的 >_ Shell 控制台,修改如下文件,其中 /etc/issue 修改的是欢迎界面的显示地址ip(不配置也不影响使用),最后重启网卡服务以生效。

    oldip=192.168.4.195 newip=192.168.4.196

    sed -i "s/$oldip/$newip/g" /etc/network/interfaces sed -i "s/$oldip/$newip/g" /etc/hosts sed -i "s/$oldip/$newip/g" /etc/issue

    cat /etc/network/interfaces | egrep "(address|gateway)" service networking restart

修改 dns

  • 登录pve的 >_ Shell 控制台,修改如下文件,并重启网卡服务以生效。

    olddns=192.168.3.10 newdns=192.168.3.11

    sed -i "s/$olddns/$newdns/g" /etc/resolv.conf

    cat /etc/resolv.conf service networking restart

修改 hostname

  • 登录pve的 >_ Shell 控制台,修改如下文件,执行 Reboot 以生效。

    oldname=pve01 newname=pve02

    hostnamectl set-hostname $newname sed -i "s/$oldname/$newname/g" /etc/hostname sed -i "s/$oldname/$newname/g" /etc/hosts sed -i "s/$oldname/$newname/g" /etc/postfix/main.cf

    reboot

修改虚机机的 vmid name

登录pve的 >_ Shell 控制台,执行 qm list 找到这台虚机的 vmid(示例将102从 k8s-node2 改为 8s-node2-4.232),然后执行 qm config <vmid> 确认一下老的 vmid name,再执行 qm set <vmid> --name <newname> 来修改 vmid name(亲测有效)。

root@node01:~# qm list
      VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID       
       100 linux-template       stopped    4096              40.00 0         
       101 k8s-node1            running    4096              40.00 4963      
       102 k8s-node2            running    4096              40.00 8673      
       103 win10-4.240          running    4096              32.00 599826    
       104 ubuntu-template      stopped    4096              32.00 0         

root@node01:~# qm config 102 | grep name
name: k8s-node2

root@node01:~# qm set 102 --name k8s-node2-4.232
update VM 102: -name k8s-node2-4.232

root@node01:~# qm list | grep 102
      VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID       
       102 k8s-node2-4.232      running    4096              40.00 8673

注:同样的办法,可以使用 qm set 修改某 的其他参数。

修改虚拟机的 vmid

登录pve的 >_ Shell 控制台,执行 qm list 找到这台虚机的 vmid,示例将 k8s-node4-4.204 从 115 改为 114

root@node01:~# qm list
      VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID       
       113 win10-yu-4.205       stopped    4096              50.00 0         
       115 k8s-node4-4.204      running    4096              40.00 0

先执行 qm stop <vmid> 将该虚拟机关机,然后调整vmid配置文件:

qm stop 115

cd /etc/pve/qemu-server
mv 115.conf 114.conf

快照与恢复

创建快照

  • 选中需要创建快照的虚拟机,依次选择 Snapshots - Take Snapshot,填写快照名称并创建。

恢复快照

  • 选中需要恢复快照的虚拟机,在 Snapshots 标签页,选择需要的快照,点击上面的 Rollback 按钮并恢复。

备份与迁移

有2台PVE服务器,但是没有做集群,现在需要把一个虚拟机从 node01 上迁移到 node02 上。

备份迁移的注意事项

  • 互相迁移的节点,需要虚拟机在同一个储存点。例如一个是local-lvm,那么另一个必须是local-lvm,否则不能迁移。
  • 互相迁移的节点,网卡一定要一样。例如一个是vmbr0,那么另外一个也要是vmbr0。
  • 迁移的虚拟机,挂载了ISO的话,迁移需要另外的虚拟机,在同样位置有同样的iso,否则不能迁移。最好的办法就是卸载iso。
  • 链接克隆的无法迁移。必须是完整克隆才能迁移。
  • 热迁移只适合共享储存。例如SAN/NFS等储存。
  • 迁移后,原虚机的快照将会丢失

操作步骤

  • 第1步,打开 node01 的web页面将虚拟机关机(stop模式提供最强的数据一致性),并在 Backup 标签页,点击上面的 Backup now 按钮并备份

附1:以上操作也可以借助 vzdump 命令行来实现,参考如下:

root@node01:~# qm stop 100

root@node01:~# vzdump 100 --quiet 1 --mode stop --compress zstd --storage local

附2:关于虚拟机的3种备份模式,简单介绍如下:

备份模式 介绍 备注
stop模式 该模式能提供最强的数据一致性保障 代价是备份过程中虚拟机要先关机
suspend模式 提供该模式的唯一原因是兼容性 该模式首先会挂起虚拟机,然后执行snapshot模式
snapshot模式 采用该模式虚拟机停机时间最短 代价是备份数据有可能不一致,实际上采用的是pve在线备份
  • 第2步,登陆 node01 的终端(不是虚拟机),确认目录 /var/lib/vz/dump 下有新的备份文件产生,并转移备份文件到 node02 上

    root\@node01:~# ls -l /var/lib/vz/dump/ total 797288 -rw-r--r-- 1 root root 1790 Feb 3 10:25 vzdump-qemu-100-2023_02_03-10_25_04.log -rw-r--r-- 1 root root 816408657 Feb 3 10:25 vzdump-qemu-100-2023_02_03-10_25_04.vma.zst -rw-r--r-- 1 root root 12 Feb 3 10:25 vzdump-qemu-100-2023_02_03-10_25_04.vma.zst.notes

    root\@node01:~# scp /var/lib/vz/dump/vzdump-qemu-100-2023_02_03-10_25_04.vma.zst root\@192.168.4.202:/root/ vzdump-qemu-100-2023_02_03-10_25_04.vma.zst 100% 779MB 112.0MB/s 00:06

  • 第3步,登陆 node02 的终端,执行 qmrestore 备份文件 200 可指定恢复的虚机 vmid 为 200 (注:新恢复的虚拟机vmid不要与已有的虚拟机id冲突)

    root\@node02:~# qmrestore /root/vzdump-qemu-100-2023_02_03-10_25_04.vma.zst 200 restore vma archive: zstd -q -d -c /root/vzdump-qemu-100-2023_02_03-10_25_04.vma.zst | vma extract -v -r /var/tmp/vzdumptmp195877.fifo - /var/tmp/vzdumptmp195877 CFG: size: 420 name: qemu-server.conf DEV: dev_id=1 size: 42949672960 devname: drive-scsi0 CTIME: Fri Feb 3 10:25:04 2023 Logical volume "vm-200-disk-0" created. new volume ID is 'local-lvm\:vm-200-disk-0' map 'drive-scsi0' to '/dev/pve/vm-200-disk-0' (write zeros = 0) progress 1% (read 429522944 bytes, duration 0 sec) progress 2% (read 859045888 bytes, duration 0 sec) ... progress 99% (read 42520215552 bytes, duration 5 sec) progress 100% (read 42949672960 bytes, duration 5 sec) total bytes read 42949672960, sparse bytes 40431001600 (94.1%) space reduction due to 4K zero blocks 5.36% rescan volumes... root\@node02:~#

  • 第4步,打开 node02 的web页面,可以看到新的虚拟机已经创建,如下图示:

虚机在线迁移

  • 第1步,pve集群内的虚机,支持在线迁移。先找到要迁移的虚机,右键选择 Migrate,然后选择 Target nodeTarget storage 并开始迁移

  • 第2步,迁移完成则可以在新的节点上看到这台虚机,注意 vmid 没有变。

在线迁移的注意事项

  • 迁移的虚拟机,不支持CD/DVD迁移。最好的办法就是卸载 CD/DVD驱动器
  • 迁移的虚拟机,建议先删掉快照和备份

遇到的问题

场景1:安装 windows 无法识别硬盘

报错原因

  • 创建虚拟机,在配置 OS 的时候,Type 默认为 Linux,需要改为 Microsoft Windows
  • 创建虚拟机,在配置 System 的时候,务必指定 TPM StorageEFI Storagelocal-vm

场景2:无法登录 web 页面

症状:2022.11.18,在联想SR558H上装完vpe之后,打不开 https://ip:8006,且登录pve后台,ping 不通网关地址。

解决:后来经过多次尝试才发现,这台机器共2块网卡,每块网卡有4个网口,pve默认使用第一块网卡的第一个网口,后来在配置网络及IP地址的时候,调整绑定正确的网口就好了,调整过程如下:

场景3:无法关闭虚拟机

症状:2023.03.03.有一台windows机器无法关机,在vpe终端对该虚机执行 StopShutdown 都失败。

解决:登录pve的 >_ Shell 控制台,执行 qm list 找到这台虚机的 vmid(比如示例windows的vmid为103),然后执行 qm stop <vmid> 来执行关机(亲测有效)。

root@node01:~# qm list
      VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID       
       100 linux-template       stopped    4096              40.00 0         
       101 k8s-node1            running    4096              40.00 4963      
       102 k8s-node2            running    4096              40.00 8673      
       103 win10-4.240          running    4096              32.00 599826    
       104 ubuntu-template      stopped    4096              32.00 0         
root@node01:~# qm stop 103

场景4:暴露Clickjacking漏洞

症状:2023.03.28.针对pve web暴露的 Web应用程序可能易受Clickjacking 漏洞

针对Apache:在配置文件中添加:Header always append X-Frame-Options SAMEORIGIN
针对Nginx:在 nginx.conf 中 http{} 添加:add_header X-Frame-Options SAMEORIGIN;

解决:实测下来,并未找到配置 X-Frame-Options 的地方。建议通过nginx代理的方式访问pve控制台,在nginx中修复Clickjacking漏洞,并通过iptables封掉源pve端口,具体步骤如下:

  • 第1步,pve服务端:离线安装docker,并拉起一个nginx容器,nginx映射8007:8007

    mkdir -p /data/docker/nginx/www docker pull nginx:1.23.1 cat /data/docker/nginx/nginx.conf docker run -idt -p 8007:8007 -v /data/docker/nginx/nginx.conf:/etc/nginx/nginx.conf -v /data/docker/nginx/www:/data --name nginx nginx:1.23.1

  • 第2步,pve服务端:配置nginx代理,将 https://pve.xxx.com:8007 转发给 https://{ip}:8006,注意在nginx.conf中配置域名+证书、消除tls漏洞、点击劫持漏洞,核心配置如下:

    http { #.修复Clickjacking漏洞 add_header X-Frame-Options SAMEORIGIN;

    server {
        #.配置ssl证书
        listen 8007 ssl;
        server_name pve.xxxx.com;
        ssl_certificate /data/server.crt;
        ssl_certificate_key /data/server.key;
    
        #.修复tls漏洞
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
    
        #.配置nginx代理
        location / {
            root html;
            index index.html index.htm;
            proxy_pass "https://192.168.4.37:8006";
        }
    }
    

    }

  • 第3步,pve服务端:配置iptables限制8006仅本机内网ip访问(比如 192.168.4.37),用于nginx转发。而伪装后的8007则允许本网段访问

    /usr/sbin/iptables -F /usr/sbin/iptables -X /usr/sbin/iptables -Z /usr/sbin/iptables -A INPUT -i lo -j ACCEPT /usr/sbin/iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT /usr/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT /usr/sbin/iptables -A INPUT -p icmp --icmp-type any -j ACCEPT /usr/sbin/iptables -A INPUT -p tcp -s 192.168.4.37 --dport 8006 -j ACCEPT /usr/sbin/iptables -A INPUT -p tcp -s 192.168.4.0/24 --dport 8007 -j ACCEPT /usr/sbin/iptables -A INPUT -p tcp -s 192.168.4.0/24 --dport 22 -j ACCEPT /usr/sbin/iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset /usr/sbin/iptables -A INPUT -j DROP /usr/sbin/iptables -A FORWARD -j DROP

  • 第4步,windows客户端:配置hosts

    修改 C:\Windows\System32\drivers\etc\hosts 添加 192.168.4.37 pve.xxxx.com

  • 第5步,windows客户端:使用浏览器访问 https://pve.xxxx.com:8007,不要再使用 https://{ip}:8006 来访问

参考:https://forum.proxmox.com/threads/how-to-configure-web-interface-internals.56470

参考:https://bugzilla.proxmox.com/show_bug.cgi?id=2307

场景5:调整内存导致启动失败

症状:2023.05.04.将虚拟机内存从4G改为16G后开机启动失败并显示以下错误:

Kernel panic - not syncing : Fatal exception
Shutting down cpus with NMI

注:没有找到解决办法,最后重装了系统,囧。

场景6:恢复快照遇到 VM is locked

症状:2023.07.19.将虚机恢复快照的时候,最后弹出窗口提示 VM is locked (rollback),执行 qm list 看到该节点(示例305)状态已经是 stopped

root@pve27:~# qm list
      VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID       
       100 ubuntu20.04-template stopped    1024              50.00 0         
       101 cnetos79-template    stopped    4096              40.00 0         
       102 kylin-template       stopped    4096              40.00 0         
       305 zhanglu-3.213        stopped    4096              40.00 0         

root@pve27:~# qm unlock 305

解决:执行 qm unlock 305,再次重试ok。

附录

常用的qm命令

qm guest cmd <vmid> <command>
qm guest exec-status <vmid> <pid>
qm guest passwd <vmid> <username> [OPTIONS]
qm guest exec <vmid> [<extra-args>] [OPTIONS]

qm clone <vmid> <newid> [OPTIONS]
qm config <vmid> [OPTIONS]
qm create <vmid> [OPTIONS]
qm delsnapshot <vmid> <snapname> [OPTIONS]
qm destroy <vmid> [OPTIONS]       //删除某个虚机
qm list  [OPTIONS]       //列出所有虚机
qm listsnapshot <vmid>
qm migrate <vmid> <target> [OPTIONS]
qm move_disk <vmid> <disk> <storage> [OPTIONS]
qm pending <vmid>
qm reset <vmid> [OPTIONS]
qm resize <vmid> <disk> <size> [OPTIONS]
qm resume <vmid> [OPTIONS]
qm rollback <vmid> <snapname>
qm sendkey <vmid> <key> [OPTIONS]
qm set <vmid> [OPTIONS]
qm shutdown <vmid> [OPTIONS]
qm snapshot <vmid> <snapname> [OPTIONS]
qm start <vmid> [OPTIONS]       //启动某个虚机
qm stop <vmid> [OPTIONS]        //停止某个虚机
qm suspend <vmid> [OPTIONS]
qm template <vmid> [OPTIONS]
qm monitor <vmid>
qm mtunnel 
qm nbdstop <vmid>
qm rescan  [OPTIONS]
qm showcmd <vmid> [OPTIONS]
qm status <vmid> [OPTIONS]        //查看集群/虚机状态
qm terminal <vmid> [OPTIONS]
qm unlock <vmid>       //取消某个虚机的锁定状态
qm vncproxy <vmid>
qm wait <vmid> [OPTIONS]

qm help [<extra-args>] [OPTIONS]

常用的pve目录

目录 功能 备注
/dev/pve pve虚拟磁盘 -
/etc/network/interfaces 网络配置文件 可修改pve主机ip地址
/etc/pve/qemu-server 存放虚拟机的配置文件 -
/var/lib/vz/template/iso 存放iso文件 -
/var/lib/vz/dump/ 备份路径 -
Copyright © https://yan-jian.com 2023 all right reserved更新时间: 2023-12-08 15:06:55

results matching ""

    No results matching ""