aboutsummaryrefslogtreecommitdiff
path: root/post/framework-server-p2.typ
blob: 06d3b958e044a5ae608a9f9b51285b92370f6498 (plain)
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#import "/global/common.typ": *

#let doc = [
My process of converting my Framework server back into a laptop.

My wife needs an upgrade from her 2015 MacBook Pro, but shelling out a cool
\$1600 + tax for one of the shiny new _M_ MacBooks for the 16GB variant hardly
seems an ideal proposition now that Apple has relinquished consideration of its
customers who would prefer to amortize upgrades over the lifespan of a machine.
It seems that leaving the Mac platform is our only consumer-friendly option,
which avoids fighting a losing battle with Apple w.r.t. upgradability.

#quote(block: true)[Framework has entered the chat.]

Meanwhile, Framework seems to have upheld its promise of providing a path to
long-term upgradability for its products. The new Ryzen mainboards being
compatible with my original Framework 13 (2021) is an example of this. So at
this point, I'm far more inclined to commit to the Framework ecosystem for my
wife (and probably myself) than Apple.

Other than the initial non-trivial pain of migrating her from macOS to Windows,
she should have a substantially better user-experience running all of the Adobe
crapware she wants on my old Framework.

*The only problem is that my entire home-lab currently
#pagelink("post/framework-server")[runs on my Framework].*

Time to go shopping!

= The Pledge

We'll be using second-hand equipment as much as possible. After all, the point
of all this is to avoid spending \$1600 on a new laptop. So we should be well
under that to make it worthwhile.

I picked these up from eBay:

#fig("framework-server-p2/server-front.webp", alt: "server front")
#fig("framework-server-p2/ethernet.webp", alt: "ethernet adapter")

#table(
    columns: 2,
    [Part], [Price (shipped)],
    [HP Z240 Workstation Intel Xeon 3.4GHz 16G RAM 180G SSD Nvidia K620], [\$150],
    [Mellanox ConnectX-2 PCIe x8 10Gbe SFP+ network card], [\$23],
)

#quote(block: true)[
    My Framework currently has 32GB of memory, and while this is much less, it
    will still be okay with my current utilization for my current workload.
]

One nice thing about this case is that it would be possible to rack-mount this
workstation sideways on a standard rack shelf if I decided to go that route in
the future.

Also, I don't presently have 10Gb networking equipment at home to plug anything
into that network card, but I'm getting it now for future-proofing.

IPMI would have been nice-to-have, but I decided that for this price, and the
bonus of that Nvidia K620 was too good to pass up! This is an immediate upgrade
from my current integrated Iris GPU on my Framework server.

#fig("framework-server-p2/server-inside.webp", alt: "server inside")

All of my home-lab VMs, and LXC containers run within Proxmox. So I set up a
fresh Proxmox here.

Fortunately for me, `lspci` showed all the hardware on the first go. But to use
(pass-through) the Nvidia GPU in my guests, I need to first set up the Proxmox
host. See my git repo for what I did to make this work.

= The Turn

To make the migration of our services _less painful_, we utilize Proxmox's
migration features. We just need to make sure our nodes are part of a cluster.

*Create the cluster on the old node.* Then, from the new node, we *join* the
existing cluster.

#quote(block: true)[
    Proxmox 8 will not let a node with existing guests join a cluster.
]

= The Prestige

Now it really is as easy as selecting a VM or an LXC container, hitting the
Migrate button, and watching your guest fly away to the new node! For guests
with large OS disks, it takes a little longer to copy over since my network is
slow. Eventually, I will use Ceph-backed VM storage to make this a
zero-downtime op.

In a few minutes, I could knock out all of my services. Refer to my gitlab
project to see how I handled the Nvidia K60 pass-through to my Nextcloud AIO
instance and Plex guests.

Here's what my "rack" looks like now:

#fig("framework-server-p2/current-lab.webp", alt: "current lab")

Once everything was back online, I powered down the old Framework server and
re-installed it back onto its laptop chassis, bought a W10 license, and
finished the rest of the installation.
]