记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

PVE安装以及简单设置教程

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代码
  1. wget https://mirrors.ustc.edu.cn/proxmox/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
  2. echo "#deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise" > /etc/apt/sources.list.d/pve-enterprise.list
  3. 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代码
  1. mv /etc/apt/sources.list /etc/apt/sources.list.bak
  2. vi /etc/apt/sources.list
粘贴下面内容保存退出
XML/HTML代码
  1. deb http://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free
  2. deb-src http://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free
  3. deb http://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free
  4. deb-src http://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free
  5. deb http://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free
  6. deb-src http://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free
  7. deb http://mirrors.ustc.edu.cn/debian-security/ bullseye-security main contrib non-free
  8. 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代码
  1. export LC_ALL=en_US.UTF-8
  2. apt update && apt -y install git && git clone https://mirror.ghproxy.com/https://github.com/ivanhao/pvetools.git
  3. cd pvetools
  4. ./pvetools.sh
一键无脑安装:
XML/HTML代码
  1. 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代码
  1. wget --no-check-certificate https://mirror.ghproxy.com/https://github.com/ivanhao/pvetools/releases/download/pve8/pvetools-pve8.0.3.zip
  2. unzip pvetools-pve8.0.3.zip
  3. cd pvetools-pve8.0.3
  4. ./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代码
  1. cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_bak
  2. 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代码
  1. vmdk转qcow2
  2. qemu-img convert -O qcow2 test.vmdk test.qcow2
  3. #qcow2转vmdk
  4. qemu-img convert -O vmdk test.qcow2 test.vmdk
  5. vdi转qcow2
  6. qemu-img convert -O qcow2 test.vdi test.qcow2
  7. vhd&vhdx转qcow2
  8. qemu-img convert -O qcow2 test.vhdx test.qcow2
  9. RAW转qcow2
  10. qemu-img convert -O qcow2 test.raw test.qcow2
  11. img转qcow2
  12. qemu-img convert -O qcow2 test.img test.qcow2
PVE为vm导入已有的磁盘镜像/qcow2/vmdk
使用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代码
  1. qemu-img convert -f raw -O qcow2 DS3617xs_DSM6.1_Broadwell.img vm-103-disk-2.qcow2
  2. 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【注意标注的内容】
pct create 203 local:vztmpl/openwrt-x86-64-generic-squashfs-rootfs.tar.gz --rootfs local-lvm:1 --ostype unmanaged
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代码
  1. lxc.mount.auto: cgroup:rw
  2. lxc.mount.auto: proc:rw
  3. lxc.mount.auto: sys:rw
  4. lxc.include: /usr/share/lxc/config/openwrt.common.conf
  5. lxc.cap.drop: sys_admin
  6. lxc.apparmor.profile: unconfined
  7. lxc.cgroup.devices.allow: c 108:0 rwm
  8. lxc.autodev: 1
  9. lxc.cgroup.devices.allow: c 10:200 rwm
  10. lxc.hook.autodev: /var/lib/lxc/203/device_hook.sh
  11. 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代码
  1. mkdir openwrt && cd openwrt
  2. cp ~/openwrt-x86-64-generic-squashfs-combined.img.gz .
  3. gunzip openwrt-x86-64-generic-squashfs-combined.img.gz
  4. Total_size=$((`fdisk -l openwrt-x86-64-generic-squashfs-combined.img|grep .img2|awk '{print $2}'` * 512))
  5.  
  6. mkdir op
  7. mount -o loop,offset=$Total_size openwrt-x86-64-generic-squashfs-combined.img ./op
  8. tar czf openwrt-rootfs.tar.gz -C ./op .
  9.  
  10. 然后把制作好的模板上传或复制到PVE的CT模板目录/var/lib/vz/template/cache
  11. cp ./openwrt-rootfs.tar.gz   /var/lib/vz/template/cache/
其实不管那种格式和方法,原理都是将得到的openwrt解压并挂载磁盘文件,然后压缩成模板文件,其他系统或者dd镜像也可以使用相同方法制作成模板。
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代码
  1. lxc.cgroup.devices.allow = c 10:200 rwm
  2. lxc.hook.autodev = sh -c "modprobe tun; cd ${LXC_ROOTFS_MOUNT}/dev; mkdir net; mknod net/tun c 10 200; chmod 0666 net/tun"
最终完整的lxc配置如下(略有不同):
XML/HTML代码
  1. root@cxt-test:~# cat /etc/pve/lxc/2001.conf
  2. arch: amd64
  3. cores: 2
  4. hostname: ODC-SyncServer-CNGD1
  5. memory: 2048
  6. net0: name=eth0,bridge=vmbr0,hwaddr=BE:16:E2:EE:CE:51,ip=dhcp,type=veth
  7. onboot: 1
  8. ostype: ubuntu
  9. rootfs: local-zfs:subvol-2001-disk-0,size=200G
  10. swap: 2048
  11. lxc.cgroup.devices.allow: c 10:200 rwm
  12. lxc.hook.autodev: sh -c "modprobe tun; cd ${LXC_ROOTFS_MOUNT}/dev; mkdir net; mknod net/tun c 10 200; chmod 0666 net/tun"
  13. root@cxt-test:~#
3、开机进入容器,执行以下命令,并重启容器
XML/HTML代码
  1. cd /dev
  2. mkdir net
  3. mknod net/tun c 10 200
  4. chmod 0666 net/tun
如果有小报错,不影响结果,执行完重启即可。(需要为有特权root的容器)
重启容器后,tun-br已经开启,可以安装和正常使用需要tun接口的软件了。
PROXMOX中的LXC容器上启用TUN端口,解决ZeroTier和OpenVPN等需要tun-br的问题
我们可以看到,ip addr 已经出现了zerotier的网卡接口,在本地以通过ssh连接内网地址,连接成功,说明lxc容器的tun已经正确开启。参考
PVE基础知识:
pve模板下载地址:
XML/HTML代码
  1. 中科大     https://mirrors.ustc.edu.cn/proxmox/images/system/
  2. 清华源     https://mirrors.tuna.tsinghua.edu.cn/proxmox/images/system/
功能配置文件路径:
XML/HTML代码
  1. /etc/pve/ha/resources.cfg  #ha相关的资源配置(请求状态包含四种:started、stoped、ignored、disabled最后这个是将故障vm移除ha群组)
  2. /etc/pve/storage.cfg       #pve存储的相关配置(支持的类型很多dir: local、lvmthin: local-lvm等等)
  3. /etc/vzdump.conf           #虚拟机配置程序配置文件(可以决定自动备份保留的份数)
  4. /etc/pve/vzdump.cron       #pve备份程序的定时任务
镜像和模板路径:
XML/HTML代码
  1. /var/lib/vz/template/iso    #pve默认iso镜像上传目录
  2. /var/lib/vz/template/cache  #pve默认lxc模板的保存路径
  3. /var/lib/vz/dump            #pve的备份镜像 存放路径
分布式防火墙配置文件:
XML/HTML代码
  1. /etc/pve/firewall/cluster.fw
  2. /etc/pve/nodes/node_name/host.fw
  3. /etc/pve/firewall/vm_id.fw
pve命令行工具介绍
创建pve集群
XML/HTML代码
  1. 第一:在其中一台上创建集群
  2. pvecm create pve-cluster01
  3. pvecm status
  4. 第二:集群中添加节点(不能有虚拟机在上面跑,最好是干干净净的新节点)
  5. pvecm add 192.168.0.2       #这个地址是集群的地址,需要在具体要加入集群的pve节点上执行
  6. #pvecm add 192.168.0.2 -f       #有时可能会出现莫名的东西,可以使用-f强制添加
  7. #/etc/hosts     #这个文件在pve中很重要,不正确可能导致 无法加入集群等问题
  8. #hostname --ip-address      #该命令检查本机ip是否正确(与/etc/hosts中指定的进行比较)
  9. 其他命令
  10. pvecm nodes                     #查看集群节点
  11. pvecm delnode 192.168.0.2       #删除集群节点
  12. pvecm help                      #查看帮助
  13. 分布式防火墙
  14. pve-firewall start/stop/restart/status
将lvm格式磁盘转换为qcow2磁盘(用虚拟机的ID:107来演示)
XML/HTML代码
  1. #qemu-img convert -p $INPUTDISK -c -O $FORMAT $NEWDISK     #-p 表示输入,-c压缩
  2. #qemu-img convert -p $INPUTDISK -c -O $FORMAT -o subformat=streamOptimized $NEWDISK   #如果需要esxi导入则需要加水-o参数
  3. qemu-img convert -p /dev/pve/vm-107-disk-0 -c -O qcow2 kvm107-system.qcow2
如何将镜像导入虚拟机
XML/HTML代码
  1. #qm importdisk <vmid> <source_disk> <storage_id>
  2. qm importdisk 109 kvm107-system.qcow2 local-lvm     #将磁盘导入109虚拟机中(109要事先创建,并且导入后会创建一个磁盘),存储形式是lvm,local-lvm是存储ID
PVE使用CLI备份和还原虚拟机
为KVM和LXC虚拟机提交备份的命令是相同的
XML/HTML代码
  1. 查看存储ID
  2. root@pve:~# cat /etc/pve/storage.cfg
  3. dir: local                      #其实存储就是这个  local
  4.     path /var/lib/vz
  5.     content iso,vztmpl,backup
  6. zfspool: local-zfs
  7.     pool rpool/data
  8.     sparse
  9.     content images,rootdir
  10. 备份(不区分KVM和LXC)
  11.  vzdump 102 --storage local      #102是虚拟机id;不指定--mode,默认是 "停止虚拟机进行备份"
  12. 还原KVM
  13. qmrestore /var/lib/vz/dump/vzdump-qemu-104-2019_08_21-15_23_32.vma.gz 108   #路径 新ID(这个ID要不存在才行)
  14. 还原LXC
  15. pct restore new_id /var/lib/vz/dump/vzdump-qemu-104-2019_08_21-15_23_32.vma.gz
  16. 将某硬件直通(没测试过)
  17. qm set 100 -sata0 /dev/disk/by-id/ata-Colorful_xxxxxxxxxxxxxxxxxxx
XML/HTML代码
  1. pve迁移虚拟机过程中,操作失败如何解除锁定(命令如下)
  2. qm unlock <vmid> 
  3. pveversion -V       #查看pve各个组件的版本。(包括novnc-pve、qemu-server、corosync等等)
  4. pveversion          #查看pve的版本
以上命令按需灵活使用。

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):