PVE安装以及简单设置教程
一、PVE(Proxmox VE) 下载地址:
二、制作安装U盘
找个U盘制作PVE安装U盘 制作工具很多自行选择,例如Rufus、balenaEtche、Ventoy、UltralISO等。
注意:7.4版本使用Ventoy安装正常,但是8.x版本安装就无法加载ISO,启动失败,其他程序未测试。以下均为7.4版本的系统操作的。
三、安装PVE
按照系统提示认真填写信息即可
四、登录web管理
安装完成后按照系统提示登录web管理
选择语言为简体中文
https://ip:8006
登录账号root密码就是自己设置的root密码。
五、设置PVE
修改软件源为中科大:
在web管理的-pve-shell 或者ssh登录服务器输入以下命令
PVE换源
XML/HTML代码
- wget https://mirrors.ustc.edu.cn/proxmox/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
- echo "#deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise" > /etc/apt/sources.list.d/pve-enterprise.list
- echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bullseye pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
Debian换源
XML/HTML代码
- mv /etc/apt/sources.list /etc/apt/sources.list.bak
- vi /etc/apt/sources.list
粘贴下面内容保存退出
XML/HTML代码
- deb http://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free
- deb-src http://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free
- deb http://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free
- deb-src http://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free
- deb http://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free
- deb-src http://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free
- deb http://mirrors.ustc.edu.cn/debian-security/ bullseye-security main contrib non-free
- deb-src http://mirrors.ustc.edu.cn/debian-security/ bullseye-security main contrib non-free
输入 apt update && apt upgrade -y 更新
使用脚本更新PVE源和修改PVE--pvetools
这是一个为proxmox ve写的工具脚本(理论上debian9+可以用)。包括配置邮件,samba,NFS,zfs,嵌套虚拟化,docker,硬盘直通等功能。
方式一:命令行安装
需要用root账号来运行
在终端中按行分别执行以下内容:
强烈建议先删除企业源:rm /etc/apt/sources.list.d/pve-enterprise.list
XML/HTML代码
- export LC_ALL=en_US.UTF-8
- apt update && apt -y install git && git clone https://mirror.ghproxy.com/https://github.com/ivanhao/pvetools.git
- cd pvetools
- ./pvetools.sh
一键无脑安装:
XML/HTML代码
- echo "nameserver 8.8.8.8" >> /etc/resolv.conf && rm -rf pvetools && rm -rf /etc/apt/sources.list.d/pve-enterprise.list && export LC_ALL=en_US.UTF-8 && apt update && apt -y install git && git clone https://mirror.ghproxy.com/https://github.com/ivanhao/pvetools.git && echo "cd /root/pvetools && ./pvetools.sh" > pvetools/pvetools && chmod +x pvetools/pvetools* && ln -s /root/pvetools/pvetools /usr/local/bin/pvetools && pvetools
方式二:wget离线下载安装(或者下载后ssh传到PVE服务器)
XML/HTML代码
- wget --no-check-certificate https://mirror.ghproxy.com/https://github.com/ivanhao/pvetools/releases/download/pve8/pvetools-pve8.0.3.zip
- unzip pvetools-pve8.0.3.zip
- cd pvetools-pve8.0.3
- ./pvetools.sh
如果提示没有权限,输入chmod +x ./*.sh
五、其他
修改 CT模板 为中科大镜像源
如果需要使用 Proxmox 网页端下载 CT Templates,可以替换 CT Templates 的源为 http://mirrors.ustc.edu.cn。
具体方法:将 /usr/share/perl5/PVE/APLInfo.pm 文件中默认的源地址 http://download.proxmox.com 替换为 https://mirrors.ustc.edu.cn/proxmox 即可。
可以使用如下命令:
XML/HTML代码
- cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_bak
- sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
针对 /usr/share/perl5/PVE/APLInfo.pm 文件的修改,执行 systemctl restart pvedaemon 后生效。
模板自带的镜像如果不全,可以手动添加镜像,只需要选择 从URL下载 ,添加需要的系统URL地址,点查询网址,然后点下载即可,此时可以关闭窗口,系统后台下载。
常见的系统镜像见下面地址:
六、经验
PVE其实就是在Debian系统上安装了一个web管理程序,管理KVM和LXC。kvm是linux平台原生虚拟化平台,docker是程序的容器化,而lxc则是介于两者之间的系统的容器化,属于半虚拟化。
真正的虚拟化是全硬件的虚拟化,有 XEN,KVM,VMware、Hyper-V这几个,其中kvm是免费的,可玩性高,VMware的是商业的,稳定,设置简单,这两个用的最多。
LXC虽然是轻量级的内核虚拟化技术,但是对于个人学习Linux技术,测试程序也是够用了,操作简单,一键搭建,可建立快照,简单易用,可以快速搭建自己需要的环境,部署应用程序。
另外KVM部分,网上教程太多了,可自行搜索。
附常用磁盘转换以及导入命令:
PVE使用qemu-img转换磁盘格式
命令用法
qemu-img convert -f <原格式> -O <目标格式> <原文件路径> <目标文件路径>
这里 -f <原格式>可以忽略。qemu-img会自动识别
XML/HTML代码
- vmdk转qcow2
- qemu-img convert -O qcow2 test.vmdk test.qcow2
- #qcow2转vmdk
- qemu-img convert -O vmdk test.qcow2 test.vmdk
- vdi转qcow2
- qemu-img convert -O qcow2 test.vdi test.qcow2
- vhd&vhdx转qcow2
- qemu-img convert -O qcow2 test.vhdx test.qcow2
- RAW转qcow2
- qemu-img convert -O qcow2 test.raw test.qcow2
- img转qcow2
- qemu-img convert -O qcow2 test.img test.qcow2
使用qm importdisk命令导入
qm importdisk <vmid> <images-name> <storage pool> --format=<disk-fs>
vmid:vm的id 例如102
images-name:磁盘镜像的名字
storage pool: 存储磁盘镜像的位置,如lvm-thin local
disk-fs: 磁盘镜像格式 raw/vmdk/qcow2
例如将黑群晖引导 DS3617xs_DSM6.1_Broadwell.img 导入到ID为 103 的虚拟机
XML/HTML代码
- qemu-img convert -f raw -O qcow2 DS3617xs_DSM6.1_Broadwell.img vm-103-disk-2.qcow2
- qm importdisk 103 vm-103-disk-2.qcow2 local
注意:LXC中安装docker时候必须勾选 无特权的容器 ,否则会安装失败。
制作LXC使⽤的openwrt模板
⼀、制作rootfs.tar.gz压缩包
1.下载模板
⾸先下载openwrt-x86-64-generic-squashfs-rootfs.img.gz 。 也可以选择其他版本。
2.安装解包软件
apt install squashfs-tools
3.解压
gzip -d openwrt-x86-64-generic-squashfs-rootfs.img.gz
4.对得到的img进⾏解包
unsquashfs openwrt-x86-64-generic-squashfs-rootfs.img
5.进⼊⽬录,重新打包为pve的CT模板
cd squashfs-root/
tar -czf ../openwrt-x86-64-generic-squashfs-rootfs.tar.gz *
6.上传或复制到PVE对应⽬录,⼀般为/var/lib/vz/template/cache
cd ..
cp openwrt-x86-64-generic-squashfs-rootfs.tar.gz /var/lib/vz/template/cache/
7.【可选】⾃⾏编译
rootfs包的来源,可以⾃⾏在⽹上编译其它⼈的op,在make meunconfig 后, targert images --> 找到 rootfs 勾上tar.gz
⼆、进⼊PVE shell中,创建LXC,web中创建CT⽅式不可⽤
1.命令创建CT【注意标注的内容】
XML/HTML代码
- pct create 203 local:vztmpl/openwrt-x86-64-generic-squashfs-rootfs.tar.gz --rootfs local-lvm:1 --ostype unmanaged --hostname OpenWrt --arch amd64 --cores 2 --memory 1024 --swap 0 -net0 bridge=vmbr0,name=eth0
命令注释:
创建LXC,2线程,内存1024,local-lvm:0.5 = LXC安装OP空间⼤⼩相当于512M ,如果要跑其它可以改为1或者2,或者执⾏后直接界⾯增加空间。
2. op的lxc配置⽂件 /etc/pve/lxc/lxcid.conf
lxcid为你容器id,上⾯脚本是203请⾃⾏修改
vim /etc/pve/lxc/203.conf
添加
XML/HTML代码
- lxc.mount.auto: cgroup:rw
- lxc.mount.auto: proc:rw
- lxc.mount.auto: sys:rw
- lxc.include: /usr/share/lxc/config/openwrt.common.conf
- lxc.cap.drop: sys_admin
- lxc.apparmor.profile: unconfined
- lxc.cgroup.devices.allow: c 108:0 rwm
- lxc.autodev: 1
- lxc.cgroup.devices.allow: c 10:200 rwm
- lxc.hook.autodev: /var/lib/lxc/203/device_hook.sh
- lxc.mount.entry: tmp tmp tmpfs rw,nodev,relatime,mode=1777 0 0
3. 将下载压缩包中的 device_hook.sh 复制到/var/lib/lxc/lxcid/
/var/lib/lxc/lxcid/需要修改为上⾯的203
cp device_hook.sh /var/lib/lxc/203/device_hook.sh
chmod +x /var/lib/lxc/203/device_hook.sh
4. 进⼊203容器
这时候,可以直接去pve的管理界⾯看到刚才创建的lxc,可以在上⾯添加⽹卡,启停等在pve的控制台启动Op。
进到op命令⾏ mv /sbin/modprobe sbin/mde 因为在lxc⾥⾯不能调起modprobe的,⼀般应⽤会判断有没有这个,没有就会⽤insmod
修正主页显⽰ 以下去掉lan⼝显⽰报错
vim /usr/lib/lua/luci/view/admin_status/index.htm
找到 local eth_info = luci.sys.exec("ethinfo") 修改为 local eth_info = nil
改完后不再显⽰lan⼝,⽇志也不会出现报错
以下修改最⼤连接数因为在lxc⾥⾯是获取不到那个参数 找到 local conn_max = xxx 修改为下⾯
local conn_max = tonumber(luci.sys.exec(
"sysctl -n -e net.netfilter.nf_conntrack_max net.ipv4.netfilter.ip_conntrack_max"
):match("%d+")) or 4096
5. (待验证)解决断线不能重拔的问题
修改hotplug的firewall事件
vim /etc/hotplug.d/iface/20-firewall
找到 fw3 -q reload 改为 fw3 -q restart
如果下载的是 openwrt-x86-64-generic-squashfs-combined.img.gz 文件,上传到服务器。 1-5步骤可以改成如下操作:
XML/HTML代码
- mkdir openwrt && cd openwrt
- cp ~/openwrt-x86-64-generic-squashfs-combined.img.gz .
- gunzip openwrt-x86-64-generic-squashfs-combined.img.gz
- Total_size=$((`fdisk -l openwrt-x86-64-generic-squashfs-combined.img|grep .img2|awk '{print $2}'` * 512))
- mkdir op
- mount -o loop,offset=$Total_size openwrt-x86-64-generic-squashfs-combined.img ./op
- tar czf openwrt-rootfs.tar.gz -C ./op .
- 然后把制作好的模板上传或复制到PVE的CT模板目录/var/lib/vz/template/cache
- cp ./openwrt-rootfs.tar.gz /var/lib/vz/template/cache/
LXC和docker中的openwrt一样,能正常使用,但是无法和正常openwrt一样web升级。作为科学用旁路由是没任何问题的,不需要上面修改配置过程都可以正常使用。
注意:LXC的openwrt启动后dnsmasq无法启动,造成ip正常但是无法解析域名,解决方法是修改 /etc/init.d/dnsmasq 启动脚本中的代码,将dnsmasq_start()函数末尾中 procd_add_jail 开头的几行代码注释掉, 然后重启dnsmasq服务或者重启系统,DNS即可恢复正常工作。
lxc开启tun-br
1、修改PVE宿主机中对应LXC容器的配置文件
对于PVE来说,要启用TUN接口,我们需要向LXC配置文件中添加一些配置信息
LXC配置文件位置(xxx为容器的id,如100等):
临时生效(由永久地址在LXC容器开机时,映射过去,关机后失效)
/var/lib/lxc/xxxx/config
永久生效(建议修改此处,毕竟我们是需要长期开启tun-br)
/etc/pve/lxc/xxxx.conf
2、为LXC容器配置文件底部新增如下行:
【建议】创建有特权的容器,来开启tun-br,否则可能由于权限问题,面临报错等,太折腾了。
vi /etc/pve/lxc/2001.conf
XML/HTML代码
- lxc.cgroup.devices.allow = c 10:200 rwm
- lxc.hook.autodev = sh -c "modprobe tun; cd ${LXC_ROOTFS_MOUNT}/dev; mkdir net; mknod net/tun c 10 200; chmod 0666 net/tun"
XML/HTML代码
- root@cxt-test:~# cat /etc/pve/lxc/2001.conf
- arch: amd64
- cores: 2
- hostname: ODC-SyncServer-CNGD1
- memory: 2048
- net0: name=eth0,bridge=vmbr0,hwaddr=BE:16:E2:EE:CE:51,ip=dhcp,type=veth
- onboot: 1
- ostype: ubuntu
- rootfs: local-zfs:subvol-2001-disk-0,size=200G
- swap: 2048
- lxc.cgroup.devices.allow: c 10:200 rwm
- lxc.hook.autodev: sh -c "modprobe tun; cd ${LXC_ROOTFS_MOUNT}/dev; mkdir net; mknod net/tun c 10 200; chmod 0666 net/tun"
- root@cxt-test:~#
XML/HTML代码
- cd /dev
- mkdir net
- mknod net/tun c 10 200
- chmod 0666 net/tun
如果有小报错,不影响结果,执行完重启即可。(需要为有特权root的容器)
重启容器后,tun-br已经开启,可以安装和正常使用需要tun接口的软件了。
PROXMOX中的LXC容器上启用TUN端口,解决ZeroTier和OpenVPN等需要tun-br的问题
我们可以看到,ip addr 已经出现了zerotier的网卡接口,在本地以通过ssh连接内网地址,连接成功,说明lxc容器的tun已经正确开启。参考
注意:在Proxmox ve 8.2 或者更新版本中,通过在LXC容器--资源--添加--Device Passthrough--Device Path 写入 /dev/net/tun 添加,就可以实现快速直通宿主机tun虚拟网卡。
PVE基础知识:
pve模板下载地址:
XML/HTML代码
- 中科大 https://mirrors.ustc.edu.cn/proxmox/images/system/
- 清华源 https://mirrors.tuna.tsinghua.edu.cn/proxmox/images/system/
XML/HTML代码
- /etc/pve/ha/resources.cfg #ha相关的资源配置(请求状态包含四种:started、stoped、ignored、disabled最后这个是将故障vm移除ha群组)
- /etc/pve/storage.cfg #pve存储的相关配置(支持的类型很多dir: local、lvmthin: local-lvm等等)
- /etc/vzdump.conf #虚拟机配置程序配置文件(可以决定自动备份保留的份数)
- /etc/pve/vzdump.cron #pve备份程序的定时任务
XML/HTML代码
- /var/lib/vz/template/iso #pve默认iso镜像上传目录
- /var/lib/vz/template/cache #pve默认lxc模板的保存路径
- /var/lib/vz/dump #pve的备份镜像 存放路径
XML/HTML代码
- /etc/pve/firewall/cluster.fw
- /etc/pve/nodes/node_name/host.fw
- /etc/pve/firewall/vm_id.fw
pve命令行工具介绍
创建pve集群
XML/HTML代码
- 第一:在其中一台上创建集群
- pvecm create pve-cluster01
- pvecm status
- 第二:集群中添加节点(不能有虚拟机在上面跑,最好是干干净净的新节点)
- pvecm add 192.168.0.2 #这个地址是集群的地址,需要在具体要加入集群的pve节点上执行
- #pvecm add 192.168.0.2 -f #有时可能会出现莫名的东西,可以使用-f强制添加
- #/etc/hosts #这个文件在pve中很重要,不正确可能导致 无法加入集群等问题
- #hostname --ip-address #该命令检查本机ip是否正确(与/etc/hosts中指定的进行比较)
- 其他命令
- pvecm nodes #查看集群节点
- pvecm delnode 192.168.0.2 #删除集群节点
- pvecm help #查看帮助
- 分布式防火墙
- pve-firewall start/stop/restart/status
XML/HTML代码
- #qemu-img convert -p $INPUTDISK -c -O $FORMAT $NEWDISK #-p 表示输入,-c压缩
- #qemu-img convert -p $INPUTDISK -c -O $FORMAT -o subformat=streamOptimized $NEWDISK #如果需要esxi导入则需要加水-o参数
- qemu-img convert -p /dev/pve/vm-107-disk-0 -c -O qcow2 kvm107-system.qcow2
XML/HTML代码
- #qm importdisk <vmid> <source_disk> <storage_id>
- qm importdisk 109 kvm107-system.qcow2 local-lvm #将磁盘导入109虚拟机中(109要事先创建,并且导入后会创建一个磁盘),存储形式是lvm,local-lvm是存储ID
PVE使用CLI备份和还原虚拟机
为KVM和LXC虚拟机提交备份的命令是相同的
XML/HTML代码
- 查看存储ID
- root@pve:~# cat /etc/pve/storage.cfg
- dir: local #其实存储就是这个 local
- path /var/lib/vz
- content iso,vztmpl,backup
- zfspool: local-zfs
- pool rpool/data
- sparse
- content images,rootdir
- 备份(不区分KVM和LXC)
- vzdump 102 --storage local #102是虚拟机id;不指定--mode,默认是 "停止虚拟机进行备份"
- 还原KVM
- qmrestore /var/lib/vz/dump/vzdump-qemu-104-2019_08_21-15_23_32.vma.gz 108 #路径 新ID(这个ID要不存在才行)
- 还原LXC
- pct restore new_id /var/lib/vz/dump/vzdump-qemu-104-2019_08_21-15_23_32.vma.gz
- 将某硬件直通(没测试过)
- qm set 100 -sata0 /dev/disk/by-id/ata-Colorful_xxxxxxxxxxxxxxxxxxx
XML/HTML代码
- pve迁移虚拟机过程中,操作失败如何解除锁定(命令如下)
- qm unlock <vmid>
- pveversion -V #查看pve各个组件的版本。(包括novnc-pve、qemu-server、corosync等等)
- pveversion #查看pve的版本
给ID为301的LXC硬盘扩容,增加40G(适用于raw和qcow2格式)
以上命令按需灵活使用。XML/HTML代码
- #进入301的LXC虚拟机磁盘目录
- cd /var/lib/vz/images/301
- #查看磁盘名称
- ls
- #查看磁盘的信息
- qemu-img info vm-301-disk-1.raw
- #给此磁盘增加40G空间
- qemu-img resize vm-301-disk-1.raw +40G
- #查看扩容后磁盘的信息
- qemu-img info vm-301-disk-1.raw
- #检查该磁盘有无问题
- e2fsck -f vm-301-disk-1.raw
- #resize2fs指令扩容实际大小
- resize2fs vm-301-disk-1.raw
ROS导入PVE虚拟机
1、上传OVA文件
注意下文中的 ros.ova、ROS7-6G.ovf 都应使用你实际文件名代替
将 ros.ova文件上传至任意目录并解压OVA文件
SSH进入PVE命令行
XML/HTML代码
- tar -xvf ros.ova
解压已授权文件会得到以下4个文件
XML/HTML代码
- ROS7-6G.ovf
- ROS7-6G.mf
- ROS7-6G-disk1.vmdk
- ROS7-6G-file1.nvram
我们这里只需要 ROS7-6G.ovf 导入虚拟机
XML/HTML代码
- qm importovf 106 ROS7-6G.ovf local --format qcow2
106为虚拟机ID,必须选择一个未被占用的ID,ovf文件包含了虚拟机配置
2、修改虚拟机配置
导入的固件如果是UEFI版,需将bios改为OVMF
修改 /etc/pve/qemu-server/106.conf
XML/HTML代码
- ,model=VMware%20Virtual%20IDE%20Hard%20Drive,serial=00000000000000000001
将其粘贴在 ide0: local:666m-666-disk-0.qcow 后,无空格间隔,直接粘在后面。然后保存退出就可以了。
注意:
1、新虚拟机内硬盘ide0不要动,会丢授权
2、cpu、内存、pcie设备、新增硬盘都是可以的
3、本地用WinRAR或者7zip等解压工具一样可以得到OVA文件,直接上传导入也一样。
在PVE终端运行如下命令创建Openwrt LXC(加载tun虚拟网卡)详细步骤:
1、将openwrt-x86-64-generic-squashfs-rootfs.tar.gz上传至PVE存储,web上传或者ssh传到到 /var/lib/vz/template/cache ,将下方默认 local:vztmpl 改为自己的存储目录。
2、在PVE终端运行如下命令创建Openwrt LXC
XML/HTML代码
- pct create 101 \
- local:vztmpl/openwrt-x86-64-generic-squashfs-rootfs.tar.gz \
- --rootfs local-lvm:1 \
- --ostype unmanaged \
- --hostname OpenWrt \
- --arch amd64 \
- --cores 2 \
- --memory 512 \
- --onboot 1 \
- --swap 0 \
- --features nesting=1 \
- --net0 bridge=vmbr0,name=eth0,ip=dhcp,ip6=dhcp \
- --net1 bridge=vmbr1,name=eth1,ip=dhcp,ip6=dhcp \
- --mp10 /mnt/sda1/share/cert,mp=/etc/acme,size=1
--net0 建议接入PVE的LAN网络如 我的vmbr0
--net1 建议接入PVE的WAN网络如 我的vmbr1
--mp10 需要让openwrt访问的PVE目录,/mnt/sda1/share/cert为PVE目录,/etc/acme为openwrt内目录,示例用来实现openwrt的ACME获取到的证书共享给PVE实现PVE下所有系统都使用这个证书。
3、编辑openwrt LXC的配置文件加载tun网卡
XML/HTML代码
- nano /etc/pve/lxc/101.conf
文件最后添加如下内容
XML/HTML代码
- lxc.cgroup2.devices.allow: c 10:200 rwm
- lxc.hook.autodev = sh -c "modprobe tun; cd ${LXC_ROOTFS_MOUNT}/dev; mkdir net; mknod net/tun c 10 200; chmod 0666 net/tun"