垃圾佬的 Homelab 折腾记录

捡垃圾

来自 @awpak78 的图👇

20200801_150112

作为一名运维工程师,白天在工地上搬砖养家糊口,晚上下班回家后就开始折腾一堆破铜烂铁自娱自乐😂。最近东拼西凑花了 2000 来块钱捡垃圾整了台 HomeLab 玩玩,折腾一些没用的东西🙃

其实很早之前就想搞一台低功耗的 HomeLab 主机玩儿了,最早开始选择的是 Dell T1700 SFF + E3-1271V3 +32GB DDR3,但是呢,E3 V3 系列是 Intel 第四代 CPU ,1150 芯片组无法从 M.2 启动,磁盘速度只能达到 SATA III 也就是顶多 600 MB/s 的读写速度,而目前随便一块支持 PCI-e M.2 NVMe 的主板普遍都能达到 3000MB/s 了。所以这一点来讲 E3 V3 已经不值得捡了。而且我想把我台式机上 SN750 500GB 换到这台机器上,所以还是要选择一个支持 PCI-e M.2 NVMe 的主板。

硬件 配置 价格
CPU Intel(R) Core(TM) i5-6600T CPU @ 2.70GHz 35w 480
主板 Dell OptiPlex 7040 准系统:Intel ®Q170 400
内存 镁光 DDR4 16GB 2666MHz 310
显卡 英特尔® 核芯显卡 530 0
机箱 Dell OptiPlex 7040 准系统 0
电源 Dell OptiPlex 7040 准系统:290W 开关电源 0
UPS 某杂牌 UPS 650VA360W 160
固态 三星 970PRO 512GB 820
总价 2170

CPU

至于 6600T 的性能,在 500 块钱的价位内 35W低功耗的 6600T 还算可以能接受,为什么不买 7200U 这种低压 U 呢?,一是低压 U 的装机成本太高,而且性价比很低,我还要在上面跑一堆虚拟机,低压 U 恐怕扛不住,所以一开始就放弃了低压 U 的装机方案。

主板

由于 Dell SFF 系列的机箱是定制的,和普通的主板不太一样,也只有这样才能塞进这么小的空间,对于 MFF 系列的则更小一点。对于这种小机箱而言,拥有 2个 PCI-e*4 和一个 PIC-e*16 是相当不错了,PCI-e*4可以装一个阵列卡个一个四网口的网卡,PIC-e*16又可以装一个低功耗的刀卡显卡。等到以后台式机升级的硬件的时候再把台式机上的 GT1030 亮机卡放上去。三个 SATA 一个 M.2 有点捉襟见肘,机箱空间就那么点,口子多了硬盘也塞不下呀😂。

Model: Dell OptiPlex 7040 SFF
Form factor: Small Form Factor
CPU options: Intel Gen6 i3/i5/i7
Chipset: Intel Q170
RAM slots: (4x) DIMM DDR4-2133
Max RAM: 64 GB
USB Ports: (6x) USB3.0; (4x) USB2.0;
Video Ports: (2x) Display Port 1.2; HDMI 1.4;
Other Ports: Serial; (2x) PS2; RJ45; Headset; Line-Out;
Optional Ports: VGA; Media Card Reader;
SATA: (3x) SATA 3.0*
PCIe: PCIe 3.0 x16 (low profile); PCIe 3.0 x4 (low profile);
M.2 slots: M.2 2280 M-key (PCIe 3.0 x4, SATA 3.0)
Drive bays: 3.5-inch/(2x)2.5-inch; 5.25-inch (slim);
Hard Drive: max 2TB; RAID 0 & 1;
PSU: 180 W
Weight: 6.00 kg (13.22 lb)

img

内存

两条 8GB DDR4 内从从我台式机上拆下来的,又花了 300 块钱买了个镁光的 16GB DDR4 装了上去,迫于 我的台式机 B350M-K 的缩水板只有两个内存插槽而且支持到 32GB,暂时装一个 16GB 的吧,能以后再装一个上去。

固态

其实本来的预算三星 970PRO 512GB没打算买,是我在找 Dell OptiPlex 7040 时意外碰到的一个老哥,而且这块固态是德亚的,还算靠谱一些,于是剁手买了这个块固态。970PRO 系列的都是 MLC 的颗粒的固态硬盘,通 SM961 一样是属于传家宝系列😂,但是 SM961 淘宝上水太深,清零盘占据多数,所以不建议买。

正好把这块 970PRO 换到我的台式机上,把台式机上的 SN750 512GB 换到 HomeLab 机器上,给 ESXi 上的虚拟机用。在玩儿虚拟化的时候深有感触,宿主机的磁盘是机械硬盘的话,上面的虚拟机达到一定数量时,虚拟机会很卡,所以玩 ESXi 虚拟化,有块固态的体验是非常爽滴😋。

装机

其实装机很快,由于是买的 Dell OptiPlex 7040 准系统,所以只需要把 CPU 、内存、硬盘装上去就完事儿了。

收到准系统后发现没有带 M.2 螺丝,只能临时拿胶带粘糊上去,勉强撑了两天,后来买了个螺丝和散热片完美地解决了。

从以前旧笔记本淘汰下来的 2TB 5400RPM 的石头盘,已经出现坏道了,临时当个下载盘吧,在它还没彻底崩盘之前再压榨一下它吧😂。后面打算再添加一块12TB的氦气盘当仓库盘和备份数据使用,有了 UPS 和这台主机 7*24 小时开机也没啥问题了。

后面那台是我的台式机,也是去年这时候买的,两者比较起来 SFF 的型号确实小很多。Dell 的这种主机还有一种 MFF 型号的,那种更小一些,差不多比路由器大一些而已,不过扩展性不好,而且还需要外置电源,也就没考虑,不过现在想想有点后悔了,当初应该多加点钱买 SFF 的,不过还好也能接受,只不过体积大了些,搬家的时候不太方便。

ESXi

装完机器之后就开始装 ESXi ,对于虚拟化,ESXi 算是比较熟悉的了,听说 Proxmox VE 也不错🤔,等到后面硬盘到了再折腾一下 Proxmox VE。看到隔壁 Proxmox VE:优秀的自建虚拟化方案 愈发想玩玩了。

贯彻「不重复造轮子」的原则,当前版本的 PVE 基于成熟稳定的 Debian 9 “Stretch” 构建。在熟悉和使用 PVE 的过程中,我越发喜欢它「不重复造轮子」的特性。相较之前用过的其他虚拟化方案,PVE 的内部构造和工作原理对我来说不再是一个黑盒,我可以清晰地观测到它在干什么——比如要迁移一台虚拟机到另一个节点,我就可以通过 ps 观察到它启动了一个 dd 进程,对接 ssh 管道,将磁盘数据通过网络复制到目标机器——这种仿佛透明手表一样能看到内部工作原理的感觉真是太棒了!

从 VMware 家下载好 VMware-VMvisor-Installer-7.0.0-15843807.x86_64.iso 镜像,找了两个 U 盘,一个用于 ESXi 的安装盘,一个用于 ESXi 的系统盘,其中一个 U 盘还是我用读卡器+16GB内存卡拼凑而成的,目的是为了把 ESXi 装到 U 盘里方便迁移数据之类的,之后在网上找一个神 KEY 激活一下(🤫小声

Ubuntu 20.04

当作网关机使用,和我所有的 云主机打通网络,使用 WireGuard 组成一个小内网,关于 WireGuard 的使用建议阅读大佬写得博客 WireGuard 教程:WireGuard 的搭建使用与配置详解 以及 WireGuard 教程:WireGuard 的工作原理

顺带用 ZBench 测了一下虚拟机的磁盘性能,还算勉强说的过去,实际上 SN750 512GB 只有 2GB 左右的缓存,写满换粗之后,写入的性能会直线下降到 800MB/s,读的性能倒是可以达到 3200MB/s 以上,或许是主板的限制,没能达到理想的读写性能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
--------------------------------------------------------------------------
CPU model : Intel(R) Core(TM) i5-6600T CPU @ 2.70GHz
Number of cores : 4
CPU frequency : 2712.000 MHz
Total size of Disk : 33.3 GB (7.7 GB Used)
Total amount of Mem : 3935 MB (306 MB Used)
Total amount of Swap : 3934 MB (0 MB Used)
System uptime : 4 days, 19 hour 47 min
Load average : 0.13, 0.08, 0.03
OS : Ubuntu 20.04 LTS
Arch : x86_64 (64 Bit)
Kernel : 5.4.0-42-generic
Virt : vmware
--------------------------------------------------------------------------
I/O speed(1st run) :1.3 GB/s
I/O speed(2nd run) :1.3 GB/s
I/O speed(3rd run) :1.3 GB/s

PhotonOS

这个是系统在我另一篇博客 Container Linux OS 从入坑到爬出来 里提到过,Photon OS™ 是针对 VMware vSphere® 虚拟化平台进行内核优化的容器专用操作系统,就和 CoreOS 一样。十分适合专门用来运行容器,当作 Kubernetes 集群中的工作负载来使用。

  • 系统初始化启动之后内存仅仅使用了 45Mi
1
2
3
4
[email protected] [ ~ ]# free -h
total used free shared buff/cache available
Mem: 2.0Gi 45Mi 1.8Gi 0.0Ki 93Mi 1.8Gi
Swap: 0B 0B 0B
  • 启动 docker 进程之后的占用情况,也仅仅 109Mi
1
2
3
4
[email protected] [ ~ ]# free -h
total used free shared buff/cache available
Mem: 2.0Gi 109Mi 1.6Gi 0.0Ki 238Mi 1.8Gi
Swap: 0B 0B 0B
  • 使用 OVA 虚拟机模板启动后的虚拟机,磁盘仅仅占用了 515MB ,确实是相当轻量化,这还是包含了 docker。
1
2
3
4
5
6
7
8
9
10
[email protected] [ ~ ]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 16G 515M 15G 4% /
devtmpfs 998M 0 998M 0% /dev
tmpfs 1000M 0 1000M 0% /dev/shm
tmpfs 1000M 532K 999M 1% /run
tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
tmpfs 1000M 0 1000M 0% /tmp
/dev/sda2 10M 2.2M 7.9M 22% /boot/efi
tmpfs 200M 0 200M 0% /run/user/0

总之,PhotonOS 是个很轻量的 OS ,适合专门用来运行一些容器化的服务,这正好符合我的需求。别问我为什么不用 CoreOS ,CoreOS 已经凉了。

Alpine NFS

把我一块磁盘直通给这个虚拟机,主要用来给 k8s 集群中的 Pod 挂载 PVC 持久化存储使用。

Debian

主要是用来运行 K8s 集群,目前只有一个 master 和一个 node 玩玩儿,跑了一些自用的服务。

Windows

当下载机使用,外加运行一些不得不使用的国产毒瘤软件😡

额外硬件

捡垃圾的乐趣就在于越折腾越好玩,于是又开始打算折腾一些

UPS

由于最近房东家里经常断电,有时一天断电八九次,每次断电我都担心着硬盘里的老婆们会不会挂掉,索性还是买了 UPS ,在马云家看了看,带给 NAS 自动断电的 UPS 普遍在 400块钱以上,而且我这个还是个假的 NAS ,UPS 上的 USB 口不一定支持我的主机。最后为了节省一下预算花儿 160 块钱买了个不支持 USB 的 UPS ,但是又不能没有这个功能,因为家里的 220V 市电断电之后,UPS 的电量只能给主机续命 10~20min 左右,UPS 的电量用完之后就嗝屁了,照阳还是断电。所以在 UPS 用尽电量还是没有来电之前,一定要想办法把主机通过 poweroff 的方式安全优雅滴关机。

首先要考虑的是怎么知道 220V 市电断电了,起初想有没有个 220V 的传感器,我去,有点难度还是算了吧。最后一想,可以通过 ping 房东家光猫的方式。我的路由器和主机等设备连接 UPS ,房东家的光猫并没有连接 UPS ,我在路由器上设置一个定时任务,每分钟去 ping 房东家的光猫,没有 ping 通说明就是断电了,也有可能是网线被拔掉了,但概率很小。! ping -c 8 A && ssh B "poweroff" 一行简单的命令就满足了我的需求,

1
2
3
4
5
6
7
8
9
10
#!/bin/sh
echo "start" >> /tmp/power_status
if ! ping -c 32 192.168.1.1
then
sleep 300
ping -c 32 192.168.1.1 && exit 0
sshpass -p "pwd" ssh [email protected] "net rpc shutdown -I 192.168.0.240 -U admin%poweroff"
sshpass -p "pwd" ssh [email protected] "sh -c /suspend_vm.sh"
echo "220v poweroff" >> /tmp/power_status
fi

对于 ESXi 上的虚拟机,还是采用了挂起的方式,将虚拟机的内存状态保存在数据存储的磁盘里,这样重新开启虚拟机后就能恢复到之前的状态,这一点有点像 Windows 的休眠。

1
2
3
4
5
#!/bin/sh
for vm in $(/sbin/vmdumper -l | grep -v Alpine | awk '{print $1}' | sed 's/wid=//g')
do
/sbin/vmdumper ${vm} suspend_vm
done

网管交换机

当我从台式机向 ESXI 里的虚拟机传输文件的时候,发现网络速度最快只能达到 700Mbits/sec ,看来应该是路由器的性能瓶颈,于是想着升级一下网络设备,把 R6300V2 路由器当作 AP 来用,将流量都汇聚到网管交换机上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[  4] local 192.168.0.240 port 50718 connected to 192.168.0.123 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 83.8 MBytes 702 Mbits/sec
[ 4] 1.00-2.00 sec 83.4 MBytes 700 Mbits/sec
[ 4] 2.00-3.00 sec 83.6 MBytes 701 Mbits/sec
[ 4] 3.00-4.00 sec 82.9 MBytes 695 Mbits/sec
[ 4] 4.00-5.00 sec 83.8 MBytes 702 Mbits/sec
[ 4] 5.00-6.00 sec 83.6 MBytes 701 Mbits/sec
[ 4] 6.00-7.00 sec 83.5 MBytes 701 Mbits/sec
[ 4] 7.00-8.00 sec 83.8 MBytes 703 Mbits/sec
[ 4] 8.00-9.00 sec 83.8 MBytes 702 Mbits/sec
[ 4] 9.00-10.00 sec 83.8 MBytes 702 Mbits/sec
[ 4] 10.00-11.00 sec 83.8 MBytes 703 Mbits/sec
[ 4] 11.00-12.00 sec 83.8 MBytes 703 Mbits/sec
[ 4] 12.00-13.00 sec 83.9 MBytes 703 Mbits/sec
[ 4] 13.00-14.00 sec 83.8 MBytes 703 Mbits/sec
[ 4] 14.00-15.00 sec 83.8 MBytes 703 Mbits/sec
[ 4] 15.00-16.00 sec 83.9 MBytes 704 Mbits/sec
[ 4] 16.00-17.00 sec 83.4 MBytes 699 Mbits/sec
[ 4] 17.00-18.00 sec 83.9 MBytes 703 Mbits/sec
[ 4] 18.00-19.00 sec 83.6 MBytes 702 Mbits/sec
[ 4] 19.00-20.00 sec 83.8 MBytes 702 Mbits/sec
[ 4] 20.00-21.00 sec 83.9 MBytes 704 Mbits/sec
[ 4] 21.00-22.00 sec 83.8 MBytes 703 Mbits/sec
[ 4] 22.00-23.00 sec 83.9 MBytes 704 Mbits/sec
[ 4] 23.00-24.00 sec 83.9 MBytes 703 Mbits/sec
[ 4] 24.00-25.00 sec 83.9 MBytes 703 Mbits/sec
[ 4] 25.00-25.20 sec 16.6 MBytes 698 Mbits/sec
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
╭─[email protected] ~
╰─$ qperf 192.168.0.123 -t 30 -vvu tcp_lat udp_lat tcp_bw udp_bw conf
tcp_lat:
latency = 98.7 us
msg_size = 1 bytes
time = 30 sec
timeout = 5 sec
udp_lat:
latency = 98 us
msg_size = 1 bytes
time = 30 sec
timeout = 5 sec
tcp_bw:
bw = 87.9 MB/sec
msg_size = 64 KiB (65,536)
time = 30 sec
timeout = 5 sec
udp_bw:
send_bw = 56.7 MB/sec
recv_bw = 56.7 MB/sec
msg_size = 32 KiB (32,768)
time = 30 sec
timeout = 5 sec
conf:
loc_node = debian
loc_cpu = 16 Cores: AMD Ryzen 7 1700 Eight-Core 3.0GHz
loc_os = Linux 4.4.0-18362
loc_qperf = 0.4.11
rem_node = gateway
rem_cpu = 4 Cores: Intel Core i5-6600T @ 2.70GHz
rem_os = Linux 5.4.0-42-generic
rem_qperf = 0.4.11

准备买 GS108E V2 或者 GS105E V2,

四网口网卡

为了折腾一下网卡直通、端口汇聚、overlay 网络卸载等特性,后面还要添加一块 intel I350 T4 V2 ,闲鱼上的价格也不是很贵。

image-20200822195450798

阵列卡

由于主板的 SATA 接口最大只支持到 2TB ,为了扩展一下存储,只能额外添加一块阵列卡了,由于主板的 PCIe 有限,而且这么大点的机箱最多也就能塞下 1 块 3.5 寸硬盘和 3 块 2.5 寸硬盘,所以找一块入门级的阵列卡就够了,最终花了 50 块钱捡了一块 ServeRAID H1110 SAS/SATA Controller 阵列卡,看来一下手册里的参数,大概也能暂时满足我的需求。

  • Four internal 6 Gbps SAS/SATA ports
  • One x4 mini-SAS internal connector (SFF-8087)
  • 6 Gbps throughput per port
  • Based on LSI SAS2004 6 Gbps RAID on Chip (ROC) controller
  • x4 PCI Express 2.0 host interface
  • Supports RAID 0, 1, 1E, and 10
  • Connects to up to four SAS or SATA drives
  • SAS and SATA drives are supported, but the mixing of SAS and SATA in the same integrated volume is not supported
  • Supports simple-swap SATA and hot-swap SAS and SATA drives
  • Supports up to two integrated volumes
  • Supports up to two global hot-spare drives
  • Supports drive sizes greater than 2 TB for RAID 0, 1E, and 10 (not RAID 1)
  • Fixed stripe size of 64 KB
  • Compliant with Disk Data Format (DDF)
  • S.M.A.R.T. support

后记

懒得写了