Proxmox VE初使用


发布于

|

分类

等了接近4个月,小主机硬酷R1终于发货了。买这个小主机的原因是QNAP 453B Mini负载过重(跑了十几个Docker)在R86S和硬酷R1之间纠结了比较久,最终还是迫于颜值选了R1的顶配版(N6005+16G内存+NVME SSD接口),体积十分小巧,4个2.5G网口,差不多都可以做硬路由器了。

最初规划是将NAS上的所有Docker全部迁移到R1上,让NAS回归存储的功能,同时也可以将NAS作为R1的远程存储使用。既然R1的性能这么强,那么不装个Proxmox VE虚拟机环境跑更多东西压榨一番的话确实有点浪费。于是下面是我的折腾记录。

Proxmox VE(以下简称PVE)是一个虚拟化平台,你可以理解为「整个系统就是为了跑虚拟机而生的」。PVE是基于Debian的封装,相当于在原版Debian上安装了一大堆虚拟机管理相关的私有包。所以之前Debian的使用经验,在这里差不多都可以直接用。

来电自启

一个优秀的小主机一定要有来电自启的功能。这样当发生一些意外断电之后,只要来电,里面跑的服务就能重启,很是方便。

开机按F2进BIOS,在「Chipset->PCH Configuration -> State After G3」,将值改为 「S0 State」就好了。保存退出。吐槽:这BIOS设置项确实不咋友好。

装系统

去官网下载PVE最新版安装包(我下载的是7.3版本),用balenaEtcher制作安装U盘。开机,F2进BIOS,在BIOS里关闭SecurityBoot,使用安装U盘引导启动。进入安装向导后,无脑下一步下一步即可。安装过程中,IP设置比较重要,设置成一个不和当前路由器/网关冲突的又好记的IP即可,然后DNS改为路由器/网关的IP,或者使用一些公共DNS即可。安装系统大概需要3分钟左右。

安装好后,插网线,重新开机,用浏览器进入。主要注意的是,默认的HTTPS端口是8006,也就是说你需要输入 https://IP:8006 才能进入。注意一定是https。用户名是root。

进入系统后,左边是硬件相关。「数据中心」是上帝视角,下面的「pve」是我们的这台主机;下面会有两个节点,一个是「local(pve)」是和「如何创建虚拟机」有关的,比如虚拟机镜像啥的都在这里管理,另一个是「local-lvm(pve)」是和虚拟机的存储有关的,比如各个虚拟机的磁盘都是在这儿管理的。其实改成「文件夹视图」的话,各种概念会更清楚一点。

我这里遇到了点问题:好像是自己的固态硬盘(三星 PM991 NVME)和R1咋的不兼容,如果直接把SSD放在机器里的硬盘位,那么就各种报错(提示 PCIe Bus Error: severity=Uncorrected(NonFatal), type=Transaction Layer (Receiver ID) device [8086:4db8] error status/mask=002000000/00000000 [21]ACSViol (first)),无法正常进入安装程序。不仅仅是PVE,安装Debian也是如此。所以装系统的时候,我先将SSD放在了硬盘盒里,当成移动硬盘来挂载,这样没出啥问题。装好后,想把SSD还安装回机器里,但一装回机器就报错,无法启动……所以只好继续用移动硬盘模式来搞。(后来又在原商家处买了个256G的定制版SSD……

网络相关

看到好多教程都说需要去改文件才能改IP。其实吧,UI上可以完成这个事儿。

点击「数据中心 -> pve」,右边有「系统 -> 网络」,在这里改掉IP即可。

另外,安装过程中会让你填DNS,默认是127.0.0.1。这个设置会导致PVE不能联网。一般来说需要改成路由器/网关的IP。如果你有自己的DNS,或者想用例如 223.5.5.5 的公共DNS ,也可以直接在中间菜单的「系统 -> DNS」里改掉。

软件源

我自己之前被镜像源坑过,自那之后一直都用的是官方源。那有人会问了,如果官方源速度巨慢怎么办?没有什么是一个代理解决不了的事儿。

由于我们没有买PVE的企业版付费订阅,所以 apt update 会一直报错(遇到更新pve相关的源,就报401错误)。我们需要将付费订阅源换成免费无订阅源。

点击「数据中心-pve」,中间菜单有「更新-存储库」。首先在列表里选中 https://enterprise.promox.com/debian/pve,然后点击上方的「禁用」,这样就禁用了需要付费订阅源。再点击旁边的「添加」,在列表里面选「Non-Subscription」就好了。这样,我们既可以收到PVE的安全更新,又不用付费。

然后呢,点击「数据中心 -> pve」,中间菜单有「Shell」,放心大胆地 apt updateapt upgrade -y 吧~

虚拟机

PVE不就是用来跑虚拟机的嘛~

普通虚拟机

首先需要将系统镜像上传到PVE里。点击「数据中心 -> pve -> local」,中间菜单有「ISO镜像」。点击「上传」,可以上传你本机的镜像;如果你网络比较好的话还可以试试「从URL下载」。再或者,你也可以将镜像直接传(或者下载)到 /var/lib/vz/template/iso/ 文件夹里。

然后就是创建虚拟机啦。大大的「创建虚拟机」就在右上方。按照向导来走,没啥坑:选中ISO镜像后,右边「客户机操作系统」最好选与之匹配的信息;磁盘、CPU、内存啥的按照需求来选大小就是了。那还有啥难的?用就是啦~

由于Windows比较耗资源,所以可以找找各种精简版系统。除了国内的那些,最近发现一个叫「AtlasOS」的Win10精简版还不错,2C2G就能流畅跑起来。至于各种Linux嘛,1C1G就能玩出各种花了。

OpenWRT

OpenWRT其实是「导入」。就是说,你下载到的东西,其实是个虚拟机磁盘(而不是安装包),是一个已经做好了的能跑的虚拟机,我们只需要将它跑起来就好了。

我们先新建个虚拟机:「VM id」你随便填一个(例如100),推荐勾选「开机自启」,「操作系统」那里选「不使用任何介质」,「磁盘」那里在左侧全删光,「网络-模型」那里推荐选「半虚拟化」。然后不开机。

然后从OpenWRT官网上下载镜像。「型号」选 Generic x86/64,下方的各种镜像随你选。其中带有 squashfs 的镜像具有「一键恢复出厂设置」 的神奇feature,简直手残党的福音。下载下来后,将.img.gz 文件解压成.img 文件(命令为 gzip -d your_file.gz ,或者你用7z等工具来解压也成),然后将.img 文件上传到PVE里,方式同前述。或者你也可以先进入PVE的节点Shell,然后进入到 /var/lib/vz/template/iso 文件夹,直接将心仪的镜像下载下来,最后用 gzip -d your_file.gz 解压,效果都是一样的。

左侧点击「数据中心 -> pve」,从中间菜单进入PVE的节点Shell,再进到 /var/lib/vz/template/iso 文件夹。然后输入 qm importdisk 你的VMID 你的镜像文件名 local-lvm ,就能将镜像导入到虚拟机里面。或者说,我们给了虚拟机一个装有OpenWRT系统的硬盘了。

下一步,让虚拟机使用这个装有系统的硬盘。点击你创建的虚拟机,菜单中找到「硬件」,会发现果然多了一个「未使用的磁盘」,双击之,然后直接点击「添加」。这时候可以看到磁盘的大小为124M。这124MB磁盘里面有87MB是空闲的,如果你是OpenWRT的重度使用者,那么87MB也凑合够折腾好久了。但如果你说不够用,那么我们可以选中这个磁盘,点击上方的「Disk Action – Resize」来调整磁盘大小。讲真,完全没必要分配超过512MB的磁盘空间,你用不完它的。

最后一步,在「选项」里面找到「引导顺序」,双击之,在对话框内将我们新添加进去的「硬盘」打勾,将这个硬盘拖动到最前面,并去掉其他东西(例如网络、CD)前面的勾。注意要点击「OK」哈,别点成旁边的「Reset」了。

到这里,我们就可以放心大胆去启动这台OpenWRT虚拟机了。但此时,这台OpenWRT的IP地址是192.168.1.1,可能和我们的路由器啊啥的冲突,或者不在我们需要的网段内,导致其他设备(例如你现在在用的这台电脑)连不上这个OpenWRT。那么我们可以 vi /etc/config/network/ ,将里面的 lan 段的 192.168.1.1 改成我们期望的IP地址(比如 192.168.1.10 啥的,反正不要和路由器、网关、PVE的IP地址冲突即可),保存退出,最后使用 /etc/init.d/network restart 重启网络。这样我们在浏览器里就可以访问刚才设定的IP地址,连上这台性能强劲的高端OpenWRT有线路由器,为所欲为了。目前来说,只有一个LAN,没有WLAN。如果需要添加WAN或者添加其他网口,还需要做另外的一些事情。

点击「数据中心->pve」,再中间菜单里找到「系统->网络」,会发现已经有一个 vmbr0 的设备,它在用 enp1s0 ,也就是第一块网卡。我们照虎画猫,依次把 enp2s0~enp4s0 添加为 vmbr1 ~ vmbr3 ,里面的各种设置都和 vmbr0 保持一致。然后回到那个特殊的虚拟机里,在中间菜单里面找到 「硬件」,点击「添加-网络设备」,然后依次把新创建的 vmbr 都添加进来就好了。

什么?直通?不存在的!你觉得我是会在意那点点性能损失的人么?你觉得我是会去折腾直通的人么?另外,「直通」之后,这个网口就只能给这个虚拟机来用了,其他设备都不能再使用这个设备了,我觉得不划算。

PS:对于OpenWRT来说,请尽量使用WebUI(LuCI)进行操作,没事儿不要进ssh里面瞎搞。ssh里面改配置文件能完成的事儿,LuCI里面也几乎都能完成。

Debian?

我们会发现,在EC2或者其他云平台上,重装系统的时候,并没有说让我们走安装流程,而是直接提供了一个「安装好了的」系统镜像给我们用,就像上文OpenWRT那样。这个是怎么实现的呢?找了点资料,发现是通过「Cloud Init」和「Cloud Image」实现的。

首先,去下载Debian的云镜像。按照说明,我们可以下载文件名中带 generic 或者是带 genericcloud 字样的文件。我自己是推荐下载后缀名为 .qcow2 的镜像文件。

下载好后,参照前面OpenWRT的方法,创建不带硬盘的虚拟机,然后在中间菜单的「硬件」里面添加「CloudInit设备」,再去中间菜单的「CloudInit」里面设置用户名、网络等信息,最后将这个云镜像使用 qm importdisk 你的VMID 你的镜像文件名 local-lvm 导入到虚拟机内,并设在中间菜单的「选项->网络」里置好启动顺序即可使用。

CloudInit镜像还有一点好处是可以十分方便地使用 xterm.js。VNC里面复制粘贴都很不方便,但xterm里面就可以。具体方法嘛,在「硬件」里面添加一个「串行接口」就好了。如果不是CloudInit镜像,那么你需要先添加一个串行接口,然后去虚拟机里面编辑 /etc/default/grub 文件,将 GRUB_CMDLINE_LINUX 的值修改为 "console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0" ,然后使用 update-grub 来更新grub,然后重启虚拟机。

用LXC 跑Docker

我买小主机的最初需求是啥?跑Docker啊!关于Docker,我其实蛮纠结的。其实跑Docker有三种方式:

  1. 按理说,PVE是基于Debian的,那么直接在宿主机上安个Docker其实就成了,最多了再来个portainer方便使用
  2. 另一种方法是,自己起个Debian的VM,把所有Docker都跑在这里面
  3. 但是大家都说,在PVE里面使用Docker的最佳方式是用LXC容器。也就是说,新建一个特殊的虚拟机,然后把Docker都跑在这个虚拟机里面

我也不知道为啥大家都选了LXC方案(可能仅仅是因为基础占用比较少,裸系统仅占35MB内存),就是说在PVE里面跑个系统容器(算是一个特殊的Linux虚拟机),然后再在这个特殊的Linux虚拟机里面跑Docker。反正威联通的选择和大家的选择比较类似,不过它是用的LXC的升级版——LDX,并且天天给我说「我们已经放弃LXC啦~用LXD吧!」。但我在PVE的FAQ里面查到了一句话:

If you want to run application containers, for example, Docker images, it is best to run them inside a Proxmox Qemu VM

并且在PVE的LXC的介绍里面查到了这样一段话

If you want to run application containers, for example, Docker images, it is recommended that you run them inside a Proxmox Qemu VM. This will give you all the advantages of application containerization, while also providing the benefits that VMs offer, such as strong isolation from the host and the ability to live-migrate, which otherwise isn’t possible with containers

点击「数据中心-pve-local」,右边有「CT模板」(在PVE里,「CT」好像是「Container/容器」的简称)。点击「模板」,里面列出了一大堆模板,我觉得叫「基础OS」是不是更合适啊……找一个顺眼一点的(例如 debian-11-standard),点击「下载」就完事儿了。

还是由于你懂得的网络问题,在国内下载这些模板似乎并不顺利,几分钟才下载2KB的数据。解决办法么……你看,下载Log窗口里第一句话写的是啥?是不是「将 XXX 下载到 XXX」?哎这就好办了。我们将这个东西复制出来,将下载停掉,回到节点Shell里面,设置好代理,然后进入到目标文件夹(/var/lib/vz/template/cache/ ),直接用wget下载就好了。当然~如果你有旁路由网关,也可以在「系统-网络」那里设置一下网关,走自动代理。好像记得还有办法手动设置走代理来着,写这个文章的时候突然找不到了。

然后就是「新建CT」。步骤其实和新建虚拟机是一模一样的。我尝试后发现,需要不勾选「无特权容器」,新建完成后,在「选项」里面开启「嵌套」就能正常跑Docker了;如果选上「无特权容器」,那么后续不管是在feature里开启「嵌套(nesting)」还是开启「按键(keyctl)」,Docker都报错。

进入系统后,你会得到一个最小化安装的纯净版Linux,我们需要自己安Docker。先 apt update 然后再 apt upgrade -y ,最后再用 apt install docker 安装docker,或者按照Docker的官方教程来走。由于我们自己就是root,所以无需再把自己添加到docker组。如果发现 apt update 疯狂报错,先别急着换源和挂代理,先去这个LCX虚拟机的「网络」设置看看,eth0那地方的IP和网关填了没,没填的话补上,或者选DHCP让自动分配也行。

对于我自己来说,老套路,先安个 docker-compose,再起个portainer。这下爱咋折腾咋折腾吧,应该「我们都一样~」了。

遇到的问题

  1. 如果虚拟机死掉了,比如CPU占100%,或者内存给干爆了,那么这个虚拟机会比较难关机。建议是,在最初折腾的时候,不要把虚拟机的「开机自启」给选上。这样遇到关不了机的问题的时候,可以直接重启主机。
  2. 使用CloudInit镜像,有时候会出现「虚拟机开机就死机」的情况,目前不知道是咋回事儿。
  3. R1的风扇确实比较吵……晚上为了能睡好觉,建议设置个定时开关机。新版散热套装早点出来吧……这样就能24小时开机了。
  4. 我发现晚上关机的话,第二天早上机器是温温的……可能是待机功耗有那么一点点大?但,理论上来说就一个LAN远程启动,功耗不应该有那么大呀?

评论

  1. GW 的头像
    GW

    对酷睿R1 第二代产品,你力推指数是多少,满分五星!!!

    1. 小金鱼儿 的头像
      小金鱼儿

      85分左右吧。具体来说:
      1. 我拿到的版本噪音比较大(不知道这次换了风扇后会不会好点)。
      2. 买来才知道N6005不支持最新的MongoDB(指令集的事儿),对于不更新会死星人的我来说不太能接受。
      3. 网口有点多,用不完。不如多一个HDMI,或者多个Wi-Fi。
      所以现在在纠结下一个小电脑/服务器是MacMini还是NUC。

  2. qiao 的头像
    qiao

    就是看了你这篇我也搞了个PN41

  3. 硬酷R1 开发者 的头像

    来了,感谢老哥对 #硬酷R1 的折腾分享!

  4. molezz 的头像

    linux allinone平台相对于别家的优势就是lxc/lxd容器啦

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注