summaryrefslogtreecommitdiff
path: root/gemfeed
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-12-02 23:46:49 +0200
committerPaul Buetow <paul@buetow.org>2024-12-02 23:46:49 +0200
commit3de01c850f53fb1581f5c4e9f1c5809f0df10c4c (patch)
tree277e3c1258361d59c5a872efbd71c508f81937d2 /gemfeed
parent642fc8a6ea2e38f6e3a1273e30177678b240e396 (diff)
Update content for html
Diffstat (limited to 'gemfeed')
-rw-r--r--gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html1
-rw-r--r--gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.html1
-rw-r--r--gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html1
-rw-r--r--gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.html1
-rw-r--r--gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html8
-rw-r--r--gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html349
-rw-r--r--gemfeed/DRAFT-f3s-kubernetes-with-freebsd-hardware-setup.html2
-rw-r--r--gemfeed/atom.xml697
-rw-r--r--gemfeed/f3s-kubernetes-with-freebsd-part-2/3beelinks.jpgbin0 -> 244333 bytes
-rw-r--r--gemfeed/f3s-kubernetes-with-freebsd-part-2/f3s-collage1.jpgbin0 -> 76514 bytes
-rw-r--r--gemfeed/f3s-kubernetes-with-freebsd-part-2/f3s-collage2.jpgbin0 -> 105206 bytes
-rw-r--r--gemfeed/f3s-kubernetes-with-freebsd-part-2/switch.jpgbin0 -> 73109 bytes
-rw-r--r--gemfeed/f3s-kubernetes-with-freebsd-part-2/watt.jpgbin0 -> 208816 bytes
-rw-r--r--gemfeed/index.html1
14 files changed, 721 insertions, 340 deletions
diff --git a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html
index 457b8590..54570759 100644
--- a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html
+++ b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html
@@ -416,6 +416,7 @@ Notice: Finished catalog run in 206.09 seconds
<a class='textlink' href='./2024-01-13-one-reason-why-i-love-openbsd.html'>2024-01-13 One reason why I love OpenBSD</a><br />
<a class='textlink' href='./2024-04-01-KISS-high-availability-with-OpenBSD.html'>2024-04-01 KISS high-availability with OpenBSD</a><br />
<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
diff --git a/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.html b/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.html
index 4c2579a0..0c9e8a04 100644
--- a/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.html
+++ b/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.html
@@ -695,6 +695,7 @@ rex commons
<a class='textlink' href='./2024-01-13-one-reason-why-i-love-openbsd.html'>2024-01-13 One reason why I love OpenBSD</a><br />
<a class='textlink' href='./2024-04-01-KISS-high-availability-with-OpenBSD.html'>2024-04-01 KISS high-availability with OpenBSD</a><br />
<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
diff --git a/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html b/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html
index 9f7d8efa..9361dd0e 100644
--- a/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html
+++ b/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html
@@ -73,6 +73,7 @@ http://www.gnu.org/software/src-highlite -->
<a class='textlink' href='./2024-01-13-one-reason-why-i-love-openbsd.html'>2024-01-13 One reason why I love OpenBSD (You are currently reading this)</a><br />
<a class='textlink' href='./2024-04-01-KISS-high-availability-with-OpenBSD.html'>2024-04-01 KISS high-availability with OpenBSD</a><br />
<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
diff --git a/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.html b/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.html
index 6858ee68..c69d8a5e 100644
--- a/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.html
+++ b/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.html
@@ -336,6 +336,7 @@ http://www.gnu.org/software/src-highlite -->
<a class='textlink' href='./2024-01-13-one-reason-why-i-love-openbsd.html'>2024-01-13 One reason why I love OpenBSD</a><br />
<a class='textlink' href='./2024-04-01-KISS-high-availability-with-OpenBSD.html'>2024-04-01 KISS high-availability with OpenBSD (You are currently reading this)</a><br />
<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
diff --git a/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html b/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html
index 334592d6..51c8d51c 100644
--- a/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html
+++ b/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html
@@ -16,7 +16,10 @@
<br />
<span>I will post a new entry every month or so (there are too many other side projects for more frequent updates—I bet you can understand).</span><br />
<br />
+<span>These are all the posts so far:</span><br />
+<br />
<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage (You are currently reading this)</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
<br />
<a href='./f3s-kubernetes-with-freebsd-part-1/f3slogo.png'><img alt='f3s logo' title='f3s logo' src='./f3s-kubernetes-with-freebsd-part-1/f3slogo.png' /></a><br />
<br />
@@ -162,6 +165,10 @@
<br />
<span>What&#39;s your take on self-hosting? Are you planning to move away from managed cloud services? Stay tuned for the second part of this series, where I will likely write about the hardware and the OS setups.</span><br />
<br />
+<span>Read the next post of this series:</span><br />
+<br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
+<br />
<span>Other *BSD-related posts:</span><br />
<br />
<a class='textlink' href='./2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html'>2016-04-09 Jails and ZFS with Puppet on FreeBSD</a><br />
@@ -170,6 +177,7 @@
<a class='textlink' href='./2024-01-13-one-reason-why-i-love-openbsd.html'>2024-01-13 One reason why I love OpenBSD</a><br />
<a class='textlink' href='./2024-04-01-KISS-high-availability-with-OpenBSD.html'>2024-04-01 KISS high-availability with OpenBSD</a><br />
<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage (You are currently reading this)</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
<br />
<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
<br />
diff --git a/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html b/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html
new file mode 100644
index 00000000..8082acde
--- /dev/null
+++ b/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html
@@ -0,0 +1,349 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</title>
+<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
+<link rel="stylesheet" href="../style.css" />
+<link rel="stylesheet" href="style-override.css" />
+</head>
+<body>
+<h1 style='display: inline' id='f3s-kubernetes-with-freebsd---part-2-hardware-and-base-installation'>f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</h1><br />
+<br />
+<span class='quote'>Published at 2024-12-02T23:46:16+02:00</span><br />
+<br />
+<span>This is the second blog post about my f3s series for my self-hosting demands in my home lab. f3s? The "f" stands for FreeBSD, and the "3s" stands for k3s, the Kubernetes distribution I will use on FreeBSD-based physical machines.</span><br />
+<br />
+<span>We set the stage last time; this time, we will set up the hardware for this project. </span><br />
+<br />
+<span>These are all the posts so far:</span><br />
+<br />
+<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation (You are currently reading this)</a><br />
+<br />
+<a href='./f3s-kubernetes-with-freebsd-part-1/f3slogo.png'><img alt='f3s logo' title='f3s logo' src='./f3s-kubernetes-with-freebsd-part-1/f3slogo.png' /></a><br />
+<br />
+<span class='quote'>Logo was generated by ChatGPT.</span><br />
+<br />
+<span>Let&#39;s continue...</span><br />
+<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#f3s-kubernetes-with-freebsd---part-2-hardware-and-base-installation'>f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a></li>
+<li>⇢ <a href='#deciding-on-the-hardware'>Deciding on the hardware</a></li>
+<li>⇢ ⇢ <a href='#not-arm-but-intel-n100-'>Not ARM but Intel N100 </a></li>
+<li>⇢ ⇢ <a href='#beelink-unboxing'>Beelink unboxing</a></li>
+<li>⇢ ⇢ <a href='#network-switch'>Network switch</a></li>
+<li>⇢ <a href='#installing-freebsd'>Installing FreeBSD</a></li>
+<li>⇢ ⇢ <a href='#base-install'>Base install</a></li>
+<li>⇢ ⇢ <a href='#latest-patch-level-and-customizing-etchosts'>Latest patch level and customizing <span class='inlinecode'>/etc/hosts</span></a></li>
+<li>⇢ ⇢ <a href='#additional-packages-after-install'>Additional packages after install</a></li>
+<li>⇢ <a href='#hardware-check'>Hardware check</a></li>
+<li>⇢ ⇢ <a href='#ethernet'>Ethernet</a></li>
+<li>⇢ ⇢ <a href='#ram'>RAM</a></li>
+<li>⇢ ⇢ <a href='#cpus'>CPUs</a></li>
+<li>⇢ ⇢ <a href='#cpu-throttling'>CPU throttling</a></li>
+<li>⇢ <a href='#conclusion'>Conclusion</a></li>
+</ul><br />
+<h2 style='display: inline' id='deciding-on-the-hardware'>Deciding on the hardware</h2><br />
+<br />
+<span>Note that the OpenBSD VMs included in the F3S setup (which will be used later in this blog series for internet ingress) are already there. These are virtual machines that I rent at OpenBSD Amsterdam and Hetzner.</span><br />
+<br />
+<a class='textlink' href='https://openbsd.amsterdam'>https://openbsd.amsterdam</a><br />
+<a class='textlink' href='https://hetzner.cloud'>https://hetzner.cloud</a><br />
+<br />
+<span>This means that the FreeBSD boxes need to be covered, which will later be running k3s in Linux VMs via bhyve hypervisor.</span><br />
+<br />
+<span>I&#39;ve been considering whether to use Raspberry Pis or look for alternatives. It turns out that complete N100-based mini-computers aren&#39;t much more expensive than Raspberry Pi 5s, and they don&#39;t require assembly. Furthermore, I like that they are AMD64 and not ARM-based, which increases compatibility with some applications (e.g., I might want to virtualize Windows (via bhyve) on one of those, though that&#39;s out of scope for this blog series).</span><br />
+<br />
+<h3 style='display: inline' id='not-arm-but-intel-n100-'>Not ARM but Intel N100 </h3><br />
+<br />
+<span>I needed something compact, efficient, and capable enough to handle the demands of a small-scale Kubernetes cluster and preferably something I don&#39;t have to assemble a lot. After researching, I decided on the Beelink S12 Pro with Intel N100 CPUs.</span><br />
+<br />
+<a class='textlink' href='https://www.bee-link.com/products/beelink-mini-s12-pro-n100'>Beelink Min S12 Pro N100 official page</a><br />
+<br />
+<span>The Intel N100 CPUs are built on the "Alder Lake-N" architecture. These chips are designed to balance performance and energy efficiency well. With four cores, they&#39;re more than capable of running multiple containers, even with moderate workloads. Plus, they consume only 6W of power, keeping the electricity bill low and the setup quiet - perfect for 24/7 operation.</span><br />
+<br />
+<a href='./f3s-kubernetes-with-freebsd-part-2/f3s-collage1.jpg'><img alt='Beelink preparation' title='Beelink preparation' src='./f3s-kubernetes-with-freebsd-part-2/f3s-collage1.jpg' /></a><br />
+<br />
+<span>The Beelink comes with the following specs:</span><br />
+<br />
+<ul>
+<li>12th Gen Intel N100 processor, with four cores and four threads, and a maximum frequency of up to 3.4 GHz.</li>
+<li>16 GB of DDR4 RAM, with a maximum (official) size of 16 GB (but people could install 32 GB on it).</li>
+<li>500 GB M.2 SSD, with the option to install a 2nd 2.5 SSD drive (which I want to use later in this blog series).</li>
+<li>GBit ethernet</li>
+<li>Four USB 3.2 Gen2 ports (maybe I want to mount something externally at some point)</li>
+<li>Dimensions and weight: 115*102*39mm, 280g</li>
+<li>Silent cooling system.</li>
+<li>HDMI output (needed only for the initial installation)</li>
+<li>Auto power on via WoL (may make use of it)</li>
+<li>Wi-Fi (not going to use it)</li>
+</ul><br />
+<span>I bought three (3) of them for the cluster I intend to build.</span><br />
+<br />
+<h3 style='display: inline' id='beelink-unboxing'>Beelink unboxing</h3><br />
+<br />
+<span>Unboxing was uneventful. Every Beelink PC came with: </span><br />
+<br />
+<ul>
+<li>An AC power adapter</li>
+<li>An HDMI cable</li>
+<li>A VESA mount with screws (not using it as of now)</li>
+<li>Some manuals</li>
+<li>The pre-assembled Beelink PC itself.</li>
+<li>A "Hello" post card (??)</li>
+</ul><br />
+<span>Overall, I love the small form factor.</span><br />
+<br />
+<h3 style='display: inline' id='network-switch'>Network switch</h3><br />
+<br />
+<span>I went with the TP-Link mini 5-port switch, as I had a spare one available. That switch will be plugged into my wall Ethernet port, which connects directly to my fiber internet router with 100 Mbit/s down and 50 Mbit/s upload speed.</span><br />
+<br />
+<a href='./f3s-kubernetes-with-freebsd-part-2/switch.jpg'><img alt='Switch' title='Switch' src='./f3s-kubernetes-with-freebsd-part-2/switch.jpg' /></a><br />
+<br />
+<h2 style='display: inline' id='installing-freebsd'>Installing FreeBSD</h2><br />
+<br />
+<h3 style='display: inline' id='base-install'>Base install</h3><br />
+<br />
+<span>First, I downloaded the boot-only ISO of the latest FreeBSD release and dumped it on a USB stick on my Fedora laptop:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]~</font><font color="#ff0000">/Downloads</font><font color="#F3E651">%</font><font color="#ff0000"> sudo dd </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#F3E651">=</font><font color="#ff0000">FreeBSD-</font><font color="#bb00ff">14.1</font><font color="#ff0000">-RELEASE-amd</font><font color="#bb00ff">64</font><font color="#ff0000">-bootonly</font><font color="#F3E651">.</font><font color="#ff0000">iso </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#ff0000">of</font><font color="#F3E651">=</font><font color="#ff0000">/dev/sda </font><font color="#ff0000">conv</font><font color="#F3E651">=</font><font color="#ff0000">sync</font>
+</pre>
+<br />
+<span>Next, I plugged the Beelinks (one after another) into my monitor via HDMI (the resolution of the FreeBSD text console seems strangely stretched, as I am using the LG Dual Up monitor), connected Ethernet, an external USB keyboard, and the FreeBSD USB stick, and booted the devices up. With F7, I entered the boot menu and selected the USB stick for the FreeBSD installation.</span><br />
+<br />
+<span>The installation was uneventful. I selected:</span><br />
+<br />
+<ul>
+<li>Guided ZFS on root (pool <span class='inlinecode'>zroot</span>)</li>
+<li>Unencrypted ZFS (I will encrypt separate datasets later; I want it to be able to boot without human interaction)</li>
+<li>Static IP configuration (to ensure that the boxes always have the same IPs, even after switching the router/DHCP server)</li>
+<li>I decided to enable the SSH daemon, NTP server, and NTP time synchronization at boot, and I also enabled powerd for automatic CPU frequency scaling.</li>
+<li>In addition to <span class='inlinecode'>root,</span> I added a personal user, <span class='inlinecode'>paul,</span> whom I placed in the <span class='inlinecode'>wheel</span> group.</li>
+</ul><br />
+<span>After doing all that three times (once for each Beelink PC), I had three ready-to-use FreeBSD boxes! Their hostnames are <span class='inlinecode'>f0</span>, <span class='inlinecode'>f1</span> and <span class='inlinecode'>f2</span>!</span><br />
+<br />
+<a href='./f3s-kubernetes-with-freebsd-part-2/f3s-collage2.jpg'><img alt='Beelink installation' title='Beelink installation' src='./f3s-kubernetes-with-freebsd-part-2/f3s-collage2.jpg' /></a><br />
+<br />
+<h3 style='display: inline' id='latest-patch-level-and-customizing-etchosts'>Latest patch level and customizing <span class='inlinecode'>/etc/hosts</span></h3><br />
+<br />
+<span>After the first boot, I upgraded to the latest FreeBSD patch level as follows:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># freebsd-update fetch</font></i>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># freebsd-update install</font></i>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># freebsd-update reboot</font></i>
+</pre>
+<br />
+<span>I also added the following entries for the three FreeBSD boxes to the <span class='inlinecode'>/etc/hosts</span> file:</span><br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># cat &lt;&lt;END &gt;&gt;/etc/hosts</font></i>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.130</font><font color="#ff0000"> f0 f0</font><font color="#F3E651">.</font><font color="#ff0000">lan f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.131</font><font color="#ff0000"> f1 f1</font><font color="#F3E651">.</font><font color="#ff0000">lan f1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.132</font><font color="#ff0000"> f2 f2</font><font color="#F3E651">.</font><font color="#ff0000">lan f2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">END</font>
+</pre>
+<br />
+<h3 style='display: inline' id='additional-packages-after-install'>Additional packages after install</h3><br />
+<br />
+<span>After that, I installed the following additional packages:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># pkg install helix doas zfs-periodic uptimed</font></i>
+</pre>
+<br />
+<span>Helix? It&#39;s my favourite text editor. I have nothing against <span class='inlinecode'>vi</span> but like <span class='inlinecode'>hx</span> (Helix) more!</span><br />
+<br />
+<span><span class='inlinecode'>doas</span>? It&#39;s a pretty neat (and KISS) replacement for <span class='inlinecode'>sudo</span>. It has far fewer features than <span class='inlinecode'>sudo</span>, which is supposed to make it more secure. Its origin is the OpenBSD project. For <span class='inlinecode'>doas</span>, I accepted the default configuration (where users in the <span class='inlinecode'>wheel</span> group are allowed to run commands as <span class='inlinecode'>root</span>):</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># cp /usr/local/etc/doas.conf.sample /usr/local/etc/doas.conf</font></i>
+</pre>
+<br />
+<span><span class='inlinecode'>zfs-periodic</span> is a nifty tool for automatically creating ZFS snapshots. I decided to go with the following configuration here:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc daily_zfs_snapshot_enable=YES</font></i>
+<font color="#ff0000">daily_zfs_snapshot_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc daily_zfs_snapshot_pools=zroot</font></i>
+<font color="#ff0000">daily_zfs_snapshot_pools</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> zroot</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc daily_zfs_snapshot_keep=7</font></i>
+<font color="#ff0000">daily_zfs_snapshot_keep</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">7</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc weekly_zfs_snapshot_enable=YES</font></i>
+<font color="#ff0000">weekly_zfs_snapshot_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc weekly_zfs_snapshot_pools=zroot</font></i>
+<font color="#ff0000">weekly_zfs_snapshot_pools</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> zroot</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc weekly_zfs_snapshot_keep=5</font></i>
+<font color="#ff0000">weekly_zfs_snapshot_keep</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">5</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc monthly_zfs_snapshot_enable=YES</font></i>
+<font color="#ff0000">monthly_zfs_snapshot_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc monthly_zfs_snapshot_pools=zroot</font></i>
+<font color="#ff0000">monthly_zfs_snapshot_pools</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> zroot</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc weekly_zfs_snapshot_keep=2</font></i>
+<font color="#ff0000">weekly_zfs_snapshot_keep</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">2</font>
+</pre>
+<br />
+<span><span class='inlinecode'>uptimed</span>? I like to track my uptimes. This is how I configured the daemon:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># cp /usr/local/mimecast/etc/uptimed.conf-dist \</font></i>
+<font color="#ff0000"> /usr/local/mimecast/etc/uptimed</font><font color="#F3E651">.</font><font color="#ff0000">conf </font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># hx /usr/local/mimecast/etc/uptimed.conf</font></i>
+</pre>
+<br />
+<span>In the Helix editor session, I changed <span class='inlinecode'>LOG_MAXIMUM_ENTRIES</span> to <span class='inlinecode'>0</span> to keep all uptime entries forever and not cut off at 50 (the default config). After that, I enabled and started <span class='inlinecode'>uptimed</span>:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># service uptimed enable</font></i>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># service uptimed start</font></i>
+</pre>
+<br />
+<span>To check the current uptime stats, I can now run <span class='inlinecode'>uprecords</span>:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000"> root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># uprecords</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># Uptime | System Boot up</font></i>
+<font color="#ff0000">----------------------------</font><font color="#F3E651">+</font><font color="#ff0000">---------------------------------------------------</font>
+<font color="#ff0000">-</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">07</font><font color="#F3E651">:</font><font color="#bb00ff">34</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> FreeBSD </font><font color="#bb00ff">14.1</font><font color="#ff0000">-RELEASE Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
+<font color="#ff0000">----------------------------</font><font color="#F3E651">+</font><font color="#ff0000">---------------------------------------------------</font>
+<font color="#ff0000">NewRec </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">07</font><font color="#F3E651">:</font><font color="#bb00ff">33</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
+<font color="#ff0000"> up </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">07</font><font color="#F3E651">:</font><font color="#bb00ff">34</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
+<font color="#ff0000"> down </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">00</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
+<font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000">up </font><font color="#bb00ff">100.000</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
+</pre>
+<br />
+<h2 style='display: inline' id='hardware-check'>Hardware check</h2><br />
+<br />
+<h3 style='display: inline' id='ethernet'>Ethernet</h3><br />
+<br />
+<span>Works. Nothing eventful, really. It&#39;s a cheap Realtek chip, but it will do what it is supposed to do.</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ifconfig re0</font>
+<font color="#ff0000">re0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">flags</font><font color="#F3E651">=</font><font color="#bb00ff">1008843</font><font color="#F3E651">&lt;</font><font color="#ff0000">UP</font><font color="#F3E651">,</font><font color="#ff0000">BROADCAST</font><font color="#F3E651">,</font><font color="#ff0000">RUNNING</font><font color="#F3E651">,</font><font color="#ff0000">SIMPLEX</font><font color="#F3E651">,</font><font color="#ff0000">MULTICAST</font><font color="#F3E651">,</font><font color="#ff0000">LOWER_UP</font><font color="#F3E651">&gt;</font><font color="#ff0000"> metric </font><font color="#bb00ff">0</font><font color="#ff0000"> mtu </font><font color="#bb00ff">1500</font>
+<font color="#ff0000"> </font><font color="#ff0000">options</font><font color="#F3E651">=</font><font color="#ff0000">8209b</font><font color="#F3E651">&lt;</font><font color="#ff0000">RXCSUM</font><font color="#F3E651">,</font><font color="#ff0000">TXCSUM</font><font color="#F3E651">,</font><font color="#ff0000">VLAN_MTU</font><font color="#F3E651">,</font><font color="#ff0000">VLAN_HWTAGGING</font><font color="#F3E651">,</font><font color="#ff0000">VLAN_HWCSUM</font><font color="#F3E651">,</font><font color="#ff0000">WOL_MAGIC</font><font color="#F3E651">,</font><font color="#ff0000">LINKSTATE</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000"> ether e8</font><font color="#F3E651">:</font><font color="#ff0000">ff</font><font color="#F3E651">:</font><font color="#ff0000">1e</font><font color="#F3E651">:</font><font color="#ff0000">d7</font><font color="#F3E651">:</font><font color="#ff0000">1c</font><font color="#F3E651">:</font><font color="#ff0000">ac</font>
+<font color="#ff0000"> inet </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.130</font><font color="#ff0000"> netmask </font><font color="#bb00ff">0xffffff00</font><font color="#ff0000"> broadcast </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.255</font>
+<font color="#ff0000"> inet6 fe80</font><font color="#F3E651">::</font><font color="#ff0000">eaff</font><font color="#F3E651">:</font><font color="#ff0000">1eff</font><font color="#F3E651">:</font><font color="#ff0000">fed7</font><font color="#F3E651">:</font><font color="#ff0000">1cac</font><font color="#F3E651">%</font><font color="#ff0000">re0 prefixlen </font><font color="#bb00ff">64</font><font color="#ff0000"> scopeid </font><font color="#bb00ff">0x1</font>
+<font color="#ff0000"> inet6 fd22</font><font color="#F3E651">:</font><font color="#ff0000">c702</font><font color="#F3E651">:</font><font color="#ff0000">acb7</font><font color="#F3E651">:</font><font color="#bb00ff">0</font><font color="#F3E651">:</font><font color="#ff0000">eaff</font><font color="#F3E651">:</font><font color="#ff0000">1eff</font><font color="#F3E651">:</font><font color="#ff0000">fed7</font><font color="#F3E651">:</font><font color="#ff0000">1cac prefixlen </font><font color="#bb00ff">64</font><font color="#ff0000"> detached autoconf</font>
+<font color="#ff0000"> inet6 2a01</font><font color="#F3E651">:</font><font color="#ff0000">5a8</font><font color="#F3E651">:</font><font color="#bb00ff">304</font><font color="#F3E651">:</font><font color="#ff0000">1d5c</font><font color="#F3E651">:</font><font color="#ff0000">eaff</font><font color="#F3E651">:</font><font color="#ff0000">1eff</font><font color="#F3E651">:</font><font color="#ff0000">fed7</font><font color="#F3E651">:</font><font color="#ff0000">1cac prefixlen </font><font color="#bb00ff">64</font><font color="#ff0000"> autoconf pltime </font><font color="#bb00ff">10800</font><font color="#ff0000"> vltime </font><font color="#bb00ff">14400</font>
+<font color="#ff0000"> media</font><font color="#F3E651">:</font><font color="#ff0000"> Ethernet autoselect </font><font color="#F3E651">(</font><font color="#ff0000">1000baseT </font><font color="#F3E651">&lt;</font><font color="#ff0000">full-duplex</font><font color="#F3E651">&gt;)</font>
+<font color="#ff0000"> status</font><font color="#F3E651">:</font><font color="#ff0000"> active</font>
+<font color="#ff0000"> nd6 </font><font color="#ff0000">options</font><font color="#F3E651">=</font><font color="#bb00ff">23</font><font color="#F3E651">&lt;</font><font color="#ff0000">PERFORMNUD</font><font color="#F3E651">,</font><font color="#ff0000">ACCEPT_RTADV</font><font color="#F3E651">,</font><font color="#ff0000">AUTO_LINKLOCAL</font><font color="#F3E651">&gt;</font>
+</pre>
+<br />
+<h3 style='display: inline' id='ram'>RAM</h3><br />
+<br />
+<span>All there:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> sysctl hw</font><font color="#F3E651">.</font><font color="#ff0000">physmem</font>
+<font color="#ff0000">hw</font><font color="#F3E651">.</font><font color="#ff0000">physmem</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">16902905856</font>
+
+</pre>
+<br />
+<h3 style='display: inline' id='cpus'>CPUs</h3><br />
+<br />
+<span>Work:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> sysctl dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu </font><font color="#F3E651">|</font><font color="#ff0000"> grep freq</font><font color="#F3E651">:</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">3</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">705</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">2</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">705</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">604</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">604</font>
+</pre>
+<br />
+<h3 style='display: inline' id='cpu-throttling'>CPU throttling</h3><br />
+<br />
+<span>With <span class='inlinecode'>powerd</span> running, CPU freq is dowthrottled when the box isn&#39;t jam-packed. To stress it a bit, I run <span class='inlinecode'>ubench</span> to see the frequencies being unthrottled again:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg install ubench</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> rehash </font><i><font color="#ababab"># For tcsh to find the newly installed command</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ubench </font><font color="#F3E651">&amp;</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> sysctl dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu </font><font color="#F3E651">|</font><font color="#ff0000"> grep freq</font><font color="#F3E651">:</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">3</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2922</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">2</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2922</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2923</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2922</font>
+</pre>
+<br />
+<span>Idle, all three Beelinks plus the switch consumed 26.2W. But with <span class='inlinecode'>ubench</span> stressing all the CPUs, it went up to 38.8W.</span><br />
+<br />
+<a href='./f3s-kubernetes-with-freebsd-part-2/watt.jpg'><img alt='Idle consumption.' title='Idle consumption.' src='./f3s-kubernetes-with-freebsd-part-2/watt.jpg' /></a><br />
+<br />
+<h2 style='display: inline' id='conclusion'>Conclusion</h2><br />
+<br />
+<span>The Beelink S12 Pro with Intel N100 CPUs checks all the boxes for a k3s project: compact, efficient, expandable, and affordable. Its compatibility with both Linux and FreeBSD makes it versatile for other use cases, whether as part of your cluster or as a standalone system. If you’re looking for hardware that punches above its weight for Kubernetes, this little device deserves a spot on your shortlist.</span><br />
+<br />
+<a href='./f3s-kubernetes-with-freebsd-part-2/3beelinks.jpg'><img alt='Beelinks stacked' title='Beelinks stacked' src='./f3s-kubernetes-with-freebsd-part-2/3beelinks.jpg' /></a><br />
+<br />
+<span>To ease cable management, I need to get shorter Ethernet cables. I will place the tower on my shelf, where most of the cables will be hidden (together with a UPS, which will also be added to the setup).</span><br />
+<br />
+<span>What will be covered in the next post of this series? The bhyve/Rocky Linux and WireGuard setup as described in part 1 of this series.</span><br />
+<br />
+<span>Other *BSD-related posts:</span><br />
+<br />
+<a class='textlink' href='./2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html'>2016-04-09 Jails and ZFS with Puppet on FreeBSD</a><br />
+<a class='textlink' href='./2022-07-30-lets-encrypt-with-openbsd-and-rex.html'>2022-07-30 Let&#39;s Encrypt with OpenBSD and Rex</a><br />
+<a class='textlink' href='./2022-10-30-installing-dtail-on-openbsd.html'>2022-10-30 Installing DTail on OpenBSD</a><br />
+<a class='textlink' href='./2024-01-13-one-reason-why-i-love-openbsd.html'>2024-01-13 One reason why I love OpenBSD</a><br />
+<a class='textlink' href='./2024-04-01-KISS-high-availability-with-OpenBSD.html'>2024-04-01 KISS high-availability with OpenBSD</a><br />
+<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation (You are currently reading this)</a><br />
+<br />
+<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
+<br />
+<a class='textlink' href='../'>Back to the main site</a><br />
+<p class="footer">
+Generated by <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.0-</a> |
+served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+<a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+</p>
+</body>
+</html>
diff --git a/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-hardware-setup.html b/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-hardware-setup.html
index 5137d5d8..81683a82 100644
--- a/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-hardware-setup.html
+++ b/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-hardware-setup.html
@@ -17,6 +17,7 @@
<span>I will post a new entry every month or so (there are too many other side projects for more frequent updates—I bet you can understand).</span><br />
<br />
<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
<br />
<a href='./f3s-kubernetes-with-freebsd-part-1/f3slogo.png'><img alt='f3s logo' title='f3s logo' src='./f3s-kubernetes-with-freebsd-part-1/f3slogo.png' /></a><br />
<br />
@@ -45,6 +46,7 @@
<a class='textlink' href='./2024-01-13-one-reason-why-i-love-openbsd.html'>2024-01-13 One reason why I love OpenBSD</a><br />
<a class='textlink' href='./2024-04-01-KISS-high-availability-with-OpenBSD.html'>2024-04-01 KISS high-availability with OpenBSD</a><br />
<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
<br />
<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
<br />
diff --git a/gemfeed/atom.xml b/gemfeed/atom.xml
index 9c639df7..996cc470 100644
--- a/gemfeed/atom.xml
+++ b/gemfeed/atom.xml
@@ -1,12 +1,357 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
- <updated>2024-12-01T12:52:29+02:00</updated>
+ <updated>2024-12-02T23:46:16+02:00</updated>
<title>foo.zone feed</title>
<subtitle>To be in the .zone!</subtitle>
<link href="https://foo.zone/gemfeed/atom.xml" rel="self" />
<link href="https://foo.zone/" />
<id>https://foo.zone/</id>
<entry>
+ <title>f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</title>
+ <link href="https://foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html" />
+ <id>https://foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html</id>
+ <updated>2024-12-02T23:46:16+02:00</updated>
+ <author>
+ <name>Paul Buetow aka snonux</name>
+ <email>paul@dev.buetow.org</email>
+ </author>
+ <summary>This is the second blog post about my f3s series for my self-hosting demands in my home lab. f3s? The 'f' stands for FreeBSD, and the '3s' stands for k3s, the Kubernetes distribution I will use on FreeBSD-based physical machines.</summary>
+ <content type="xhtml">
+ <div xmlns="http://www.w3.org/1999/xhtml">
+ <h1 style='display: inline' id='f3s-kubernetes-with-freebsd---part-2-hardware-and-base-installation'>f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</h1><br />
+<br />
+<span>This is the second blog post about my f3s series for my self-hosting demands in my home lab. f3s? The "f" stands for FreeBSD, and the "3s" stands for k3s, the Kubernetes distribution I will use on FreeBSD-based physical machines.</span><br />
+<br />
+<span>We set the stage last time; this time, we will set up the hardware for this project. </span><br />
+<br />
+<span>These are all the posts so far:</span><br />
+<br />
+<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation (You are currently reading this)</a><br />
+<br />
+<a href='./f3s-kubernetes-with-freebsd-part-1/f3slogo.png'><img alt='f3s logo' title='f3s logo' src='./f3s-kubernetes-with-freebsd-part-1/f3slogo.png' /></a><br />
+<br />
+<span class='quote'>Logo was generated by ChatGPT.</span><br />
+<br />
+<span>Let&#39;s continue...</span><br />
+<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#f3s-kubernetes-with-freebsd---part-2-hardware-and-base-installation'>f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a></li>
+<li>⇢ <a href='#deciding-on-the-hardware'>Deciding on the hardware</a></li>
+<li>⇢ ⇢ <a href='#not-arm-but-intel-n100-'>Not ARM but Intel N100 </a></li>
+<li>⇢ ⇢ <a href='#beelink-unboxing'>Beelink unboxing</a></li>
+<li>⇢ ⇢ <a href='#network-switch'>Network switch</a></li>
+<li>⇢ <a href='#installing-freebsd'>Installing FreeBSD</a></li>
+<li>⇢ ⇢ <a href='#base-install'>Base install</a></li>
+<li>⇢ ⇢ <a href='#latest-patch-level-and-customizing-etchosts'>Latest patch level and customizing <span class='inlinecode'>/etc/hosts</span></a></li>
+<li>⇢ ⇢ <a href='#additional-packages-after-install'>Additional packages after install</a></li>
+<li>⇢ <a href='#hardware-check'>Hardware check</a></li>
+<li>⇢ ⇢ <a href='#ethernet'>Ethernet</a></li>
+<li>⇢ ⇢ <a href='#ram'>RAM</a></li>
+<li>⇢ ⇢ <a href='#cpus'>CPUs</a></li>
+<li>⇢ ⇢ <a href='#cpu-throttling'>CPU throttling</a></li>
+<li>⇢ <a href='#conclusion'>Conclusion</a></li>
+</ul><br />
+<h2 style='display: inline' id='deciding-on-the-hardware'>Deciding on the hardware</h2><br />
+<br />
+<span>Note that the OpenBSD VMs included in the F3S setup (which will be used later in this blog series for internet ingress) are already there. These are virtual machines that I rent at OpenBSD Amsterdam and Hetzner.</span><br />
+<br />
+<a class='textlink' href='https://openbsd.amsterdam'>https://openbsd.amsterdam</a><br />
+<a class='textlink' href='https://hetzner.cloud'>https://hetzner.cloud</a><br />
+<br />
+<span>This means that the FreeBSD boxes need to be covered, which will later be running k3s in Linux VMs via bhyve hypervisor.</span><br />
+<br />
+<span>I&#39;ve been considering whether to use Raspberry Pis or look for alternatives. It turns out that complete N100-based mini-computers aren&#39;t much more expensive than Raspberry Pi 5s, and they don&#39;t require assembly. Furthermore, I like that they are AMD64 and not ARM-based, which increases compatibility with some applications (e.g., I might want to virtualize Windows (via bhyve) on one of those, though that&#39;s out of scope for this blog series).</span><br />
+<br />
+<h3 style='display: inline' id='not-arm-but-intel-n100-'>Not ARM but Intel N100 </h3><br />
+<br />
+<span>I needed something compact, efficient, and capable enough to handle the demands of a small-scale Kubernetes cluster and preferably something I don&#39;t have to assemble a lot. After researching, I decided on the Beelink S12 Pro with Intel N100 CPUs.</span><br />
+<br />
+<a class='textlink' href='https://www.bee-link.com/products/beelink-mini-s12-pro-n100'>Beelink Min S12 Pro N100 official page</a><br />
+<br />
+<span>The Intel N100 CPUs are built on the "Alder Lake-N" architecture. These chips are designed to balance performance and energy efficiency well. With four cores, they&#39;re more than capable of running multiple containers, even with moderate workloads. Plus, they consume only 6W of power, keeping the electricity bill low and the setup quiet - perfect for 24/7 operation.</span><br />
+<br />
+<a href='./f3s-kubernetes-with-freebsd-part-2/f3s-collage1.jpg'><img alt='Beelink preparation' title='Beelink preparation' src='./f3s-kubernetes-with-freebsd-part-2/f3s-collage1.jpg' /></a><br />
+<br />
+<span>The Beelink comes with the following specs:</span><br />
+<br />
+<ul>
+<li>12th Gen Intel N100 processor, with four cores and four threads, and a maximum frequency of up to 3.4 GHz.</li>
+<li>16 GB of DDR4 RAM, with a maximum (official) size of 16 GB (but people could install 32 GB on it).</li>
+<li>500 GB M.2 SSD, with the option to install a 2nd 2.5 SSD drive (which I want to use later in this blog series).</li>
+<li>GBit ethernet</li>
+<li>Four USB 3.2 Gen2 ports (maybe I want to mount something externally at some point)</li>
+<li>Dimensions and weight: 115*102*39mm, 280g</li>
+<li>Silent cooling system.</li>
+<li>HDMI output (needed only for the initial installation)</li>
+<li>Auto power on via WoL (may make use of it)</li>
+<li>Wi-Fi (not going to use it)</li>
+</ul><br />
+<span>I bought three (3) of them for the cluster I intend to build.</span><br />
+<br />
+<h3 style='display: inline' id='beelink-unboxing'>Beelink unboxing</h3><br />
+<br />
+<span>Unboxing was uneventful. Every Beelink PC came with: </span><br />
+<br />
+<ul>
+<li>An AC power adapter</li>
+<li>An HDMI cable</li>
+<li>A VESA mount with screws (not using it as of now)</li>
+<li>Some manuals</li>
+<li>The pre-assembled Beelink PC itself.</li>
+<li>A "Hello" post card (??)</li>
+</ul><br />
+<span>Overall, I love the small form factor.</span><br />
+<br />
+<h3 style='display: inline' id='network-switch'>Network switch</h3><br />
+<br />
+<span>I went with the TP-Link mini 5-port switch, as I had a spare one available. That switch will be plugged into my wall Ethernet port, which connects directly to my fiber internet router with 100 Mbit/s down and 50 Mbit/s upload speed.</span><br />
+<br />
+<a href='./f3s-kubernetes-with-freebsd-part-2/switch.jpg'><img alt='Switch' title='Switch' src='./f3s-kubernetes-with-freebsd-part-2/switch.jpg' /></a><br />
+<br />
+<h2 style='display: inline' id='installing-freebsd'>Installing FreeBSD</h2><br />
+<br />
+<h3 style='display: inline' id='base-install'>Base install</h3><br />
+<br />
+<span>First, I downloaded the boot-only ISO of the latest FreeBSD release and dumped it on a USB stick on my Fedora laptop:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]~</font><font color="#ff0000">/Downloads</font><font color="#F3E651">%</font><font color="#ff0000"> sudo dd </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#F3E651">=</font><font color="#ff0000">FreeBSD-</font><font color="#bb00ff">14.1</font><font color="#ff0000">-RELEASE-amd</font><font color="#bb00ff">64</font><font color="#ff0000">-bootonly</font><font color="#F3E651">.</font><font color="#ff0000">iso </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#ff0000">of</font><font color="#F3E651">=</font><font color="#ff0000">/dev/sda </font><font color="#ff0000">conv</font><font color="#F3E651">=</font><font color="#ff0000">sync</font>
+</pre>
+<br />
+<span>Next, I plugged the Beelinks (one after another) into my monitor via HDMI (the resolution of the FreeBSD text console seems strangely stretched, as I am using the LG Dual Up monitor), connected Ethernet, an external USB keyboard, and the FreeBSD USB stick, and booted the devices up. With F7, I entered the boot menu and selected the USB stick for the FreeBSD installation.</span><br />
+<br />
+<span>The installation was uneventful. I selected:</span><br />
+<br />
+<ul>
+<li>Guided ZFS on root (pool <span class='inlinecode'>zroot</span>)</li>
+<li>Unencrypted ZFS (I will encrypt separate datasets later; I want it to be able to boot without human interaction)</li>
+<li>Static IP configuration (to ensure that the boxes always have the same IPs, even after switching the router/DHCP server)</li>
+<li>I decided to enable the SSH daemon, NTP server, and NTP time synchronization at boot, and I also enabled powerd for automatic CPU frequency scaling.</li>
+<li>In addition to <span class='inlinecode'>root,</span> I added a personal user, <span class='inlinecode'>paul,</span> whom I placed in the <span class='inlinecode'>wheel</span> group.</li>
+</ul><br />
+<span>After doing all that three times (once for each Beelink PC), I had three ready-to-use FreeBSD boxes! Their hostnames are <span class='inlinecode'>f0</span>, <span class='inlinecode'>f1</span> and <span class='inlinecode'>f2</span>!</span><br />
+<br />
+<a href='./f3s-kubernetes-with-freebsd-part-2/f3s-collage2.jpg'><img alt='Beelink installation' title='Beelink installation' src='./f3s-kubernetes-with-freebsd-part-2/f3s-collage2.jpg' /></a><br />
+<br />
+<h3 style='display: inline' id='latest-patch-level-and-customizing-etchosts'>Latest patch level and customizing <span class='inlinecode'>/etc/hosts</span></h3><br />
+<br />
+<span>After the first boot, I upgraded to the latest FreeBSD patch level as follows:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># freebsd-update fetch</font></i>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># freebsd-update install</font></i>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># freebsd-update reboot</font></i>
+</pre>
+<br />
+<span>I also added the following entries for the three FreeBSD boxes to the <span class='inlinecode'>/etc/hosts</span> file:</span><br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># cat &lt;&lt;END &gt;&gt;/etc/hosts</font></i>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.130</font><font color="#ff0000"> f0 f0</font><font color="#F3E651">.</font><font color="#ff0000">lan f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.131</font><font color="#ff0000"> f1 f1</font><font color="#F3E651">.</font><font color="#ff0000">lan f1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.132</font><font color="#ff0000"> f2 f2</font><font color="#F3E651">.</font><font color="#ff0000">lan f2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">END</font>
+</pre>
+<br />
+<h3 style='display: inline' id='additional-packages-after-install'>Additional packages after install</h3><br />
+<br />
+<span>After that, I installed the following additional packages:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># pkg install helix doas zfs-periodic uptimed</font></i>
+</pre>
+<br />
+<span>Helix? It&#39;s my favourite text editor. I have nothing against <span class='inlinecode'>vi</span> but like <span class='inlinecode'>hx</span> (Helix) more!</span><br />
+<br />
+<span><span class='inlinecode'>doas</span>? It&#39;s a pretty neat (and KISS) replacement for <span class='inlinecode'>sudo</span>. It has far fewer features than <span class='inlinecode'>sudo</span>, which is supposed to make it more secure. Its origin is the OpenBSD project. For <span class='inlinecode'>doas</span>, I accepted the default configuration (where users in the <span class='inlinecode'>wheel</span> group are allowed to run commands as <span class='inlinecode'>root</span>):</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># cp /usr/local/etc/doas.conf.sample /usr/local/etc/doas.conf</font></i>
+</pre>
+<br />
+<span><span class='inlinecode'>zfs-periodic</span> is a nifty tool for automatically creating ZFS snapshots. I decided to go with the following configuration here:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc daily_zfs_snapshot_enable=YES</font></i>
+<font color="#ff0000">daily_zfs_snapshot_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc daily_zfs_snapshot_pools=zroot</font></i>
+<font color="#ff0000">daily_zfs_snapshot_pools</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> zroot</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc daily_zfs_snapshot_keep=7</font></i>
+<font color="#ff0000">daily_zfs_snapshot_keep</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">7</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc weekly_zfs_snapshot_enable=YES</font></i>
+<font color="#ff0000">weekly_zfs_snapshot_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc weekly_zfs_snapshot_pools=zroot</font></i>
+<font color="#ff0000">weekly_zfs_snapshot_pools</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> zroot</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc weekly_zfs_snapshot_keep=5</font></i>
+<font color="#ff0000">weekly_zfs_snapshot_keep</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">5</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc monthly_zfs_snapshot_enable=YES</font></i>
+<font color="#ff0000">monthly_zfs_snapshot_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc monthly_zfs_snapshot_pools=zroot</font></i>
+<font color="#ff0000">monthly_zfs_snapshot_pools</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> zroot</font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc weekly_zfs_snapshot_keep=2</font></i>
+<font color="#ff0000">weekly_zfs_snapshot_keep</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">2</font>
+</pre>
+<br />
+<span><span class='inlinecode'>uptimed</span>? I like to track my uptimes. This is how I configured the daemon:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># cp /usr/local/mimecast/etc/uptimed.conf-dist \</font></i>
+<font color="#ff0000"> /usr/local/mimecast/etc/uptimed</font><font color="#F3E651">.</font><font color="#ff0000">conf </font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># hx /usr/local/mimecast/etc/uptimed.conf</font></i>
+</pre>
+<br />
+<span>In the Helix editor session, I changed <span class='inlinecode'>LOG_MAXIMUM_ENTRIES</span> to <span class='inlinecode'>0</span> to keep all uptime entries forever and not cut off at 50 (the default config). After that, I enabled and started <span class='inlinecode'>uptimed</span>:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># service uptimed enable</font></i>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># service uptimed start</font></i>
+</pre>
+<br />
+<span>To check the current uptime stats, I can now run <span class='inlinecode'>uprecords</span>:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000"> root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># uprecords</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># Uptime | System Boot up</font></i>
+<font color="#ff0000">----------------------------</font><font color="#F3E651">+</font><font color="#ff0000">---------------------------------------------------</font>
+<font color="#ff0000">-</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">07</font><font color="#F3E651">:</font><font color="#bb00ff">34</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> FreeBSD </font><font color="#bb00ff">14.1</font><font color="#ff0000">-RELEASE Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
+<font color="#ff0000">----------------------------</font><font color="#F3E651">+</font><font color="#ff0000">---------------------------------------------------</font>
+<font color="#ff0000">NewRec </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">07</font><font color="#F3E651">:</font><font color="#bb00ff">33</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
+<font color="#ff0000"> up </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">07</font><font color="#F3E651">:</font><font color="#bb00ff">34</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
+<font color="#ff0000"> down </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">00</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
+<font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000">up </font><font color="#bb00ff">100.000</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
+</pre>
+<br />
+<h2 style='display: inline' id='hardware-check'>Hardware check</h2><br />
+<br />
+<h3 style='display: inline' id='ethernet'>Ethernet</h3><br />
+<br />
+<span>Works. Nothing eventful, really. It&#39;s a cheap Realtek chip, but it will do what it is supposed to do.</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ifconfig re0</font>
+<font color="#ff0000">re0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">flags</font><font color="#F3E651">=</font><font color="#bb00ff">1008843</font><font color="#F3E651">&lt;</font><font color="#ff0000">UP</font><font color="#F3E651">,</font><font color="#ff0000">BROADCAST</font><font color="#F3E651">,</font><font color="#ff0000">RUNNING</font><font color="#F3E651">,</font><font color="#ff0000">SIMPLEX</font><font color="#F3E651">,</font><font color="#ff0000">MULTICAST</font><font color="#F3E651">,</font><font color="#ff0000">LOWER_UP</font><font color="#F3E651">&gt;</font><font color="#ff0000"> metric </font><font color="#bb00ff">0</font><font color="#ff0000"> mtu </font><font color="#bb00ff">1500</font>
+<font color="#ff0000"> </font><font color="#ff0000">options</font><font color="#F3E651">=</font><font color="#ff0000">8209b</font><font color="#F3E651">&lt;</font><font color="#ff0000">RXCSUM</font><font color="#F3E651">,</font><font color="#ff0000">TXCSUM</font><font color="#F3E651">,</font><font color="#ff0000">VLAN_MTU</font><font color="#F3E651">,</font><font color="#ff0000">VLAN_HWTAGGING</font><font color="#F3E651">,</font><font color="#ff0000">VLAN_HWCSUM</font><font color="#F3E651">,</font><font color="#ff0000">WOL_MAGIC</font><font color="#F3E651">,</font><font color="#ff0000">LINKSTATE</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000"> ether e8</font><font color="#F3E651">:</font><font color="#ff0000">ff</font><font color="#F3E651">:</font><font color="#ff0000">1e</font><font color="#F3E651">:</font><font color="#ff0000">d7</font><font color="#F3E651">:</font><font color="#ff0000">1c</font><font color="#F3E651">:</font><font color="#ff0000">ac</font>
+<font color="#ff0000"> inet </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.130</font><font color="#ff0000"> netmask </font><font color="#bb00ff">0xffffff00</font><font color="#ff0000"> broadcast </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.255</font>
+<font color="#ff0000"> inet6 fe80</font><font color="#F3E651">::</font><font color="#ff0000">eaff</font><font color="#F3E651">:</font><font color="#ff0000">1eff</font><font color="#F3E651">:</font><font color="#ff0000">fed7</font><font color="#F3E651">:</font><font color="#ff0000">1cac</font><font color="#F3E651">%</font><font color="#ff0000">re0 prefixlen </font><font color="#bb00ff">64</font><font color="#ff0000"> scopeid </font><font color="#bb00ff">0x1</font>
+<font color="#ff0000"> inet6 fd22</font><font color="#F3E651">:</font><font color="#ff0000">c702</font><font color="#F3E651">:</font><font color="#ff0000">acb7</font><font color="#F3E651">:</font><font color="#bb00ff">0</font><font color="#F3E651">:</font><font color="#ff0000">eaff</font><font color="#F3E651">:</font><font color="#ff0000">1eff</font><font color="#F3E651">:</font><font color="#ff0000">fed7</font><font color="#F3E651">:</font><font color="#ff0000">1cac prefixlen </font><font color="#bb00ff">64</font><font color="#ff0000"> detached autoconf</font>
+<font color="#ff0000"> inet6 2a01</font><font color="#F3E651">:</font><font color="#ff0000">5a8</font><font color="#F3E651">:</font><font color="#bb00ff">304</font><font color="#F3E651">:</font><font color="#ff0000">1d5c</font><font color="#F3E651">:</font><font color="#ff0000">eaff</font><font color="#F3E651">:</font><font color="#ff0000">1eff</font><font color="#F3E651">:</font><font color="#ff0000">fed7</font><font color="#F3E651">:</font><font color="#ff0000">1cac prefixlen </font><font color="#bb00ff">64</font><font color="#ff0000"> autoconf pltime </font><font color="#bb00ff">10800</font><font color="#ff0000"> vltime </font><font color="#bb00ff">14400</font>
+<font color="#ff0000"> media</font><font color="#F3E651">:</font><font color="#ff0000"> Ethernet autoselect </font><font color="#F3E651">(</font><font color="#ff0000">1000baseT </font><font color="#F3E651">&lt;</font><font color="#ff0000">full-duplex</font><font color="#F3E651">&gt;)</font>
+<font color="#ff0000"> status</font><font color="#F3E651">:</font><font color="#ff0000"> active</font>
+<font color="#ff0000"> nd6 </font><font color="#ff0000">options</font><font color="#F3E651">=</font><font color="#bb00ff">23</font><font color="#F3E651">&lt;</font><font color="#ff0000">PERFORMNUD</font><font color="#F3E651">,</font><font color="#ff0000">ACCEPT_RTADV</font><font color="#F3E651">,</font><font color="#ff0000">AUTO_LINKLOCAL</font><font color="#F3E651">&gt;</font>
+</pre>
+<br />
+<h3 style='display: inline' id='ram'>RAM</h3><br />
+<br />
+<span>All there:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> sysctl hw</font><font color="#F3E651">.</font><font color="#ff0000">physmem</font>
+<font color="#ff0000">hw</font><font color="#F3E651">.</font><font color="#ff0000">physmem</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">16902905856</font>
+
+</pre>
+<br />
+<h3 style='display: inline' id='cpus'>CPUs</h3><br />
+<br />
+<span>Work:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> sysctl dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu </font><font color="#F3E651">|</font><font color="#ff0000"> grep freq</font><font color="#F3E651">:</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">3</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">705</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">2</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">705</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">604</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">604</font>
+</pre>
+<br />
+<h3 style='display: inline' id='cpu-throttling'>CPU throttling</h3><br />
+<br />
+<span>With <span class='inlinecode'>powerd</span> running, CPU freq is dowthrottled when the box isn&#39;t jam-packed. To stress it a bit, I run <span class='inlinecode'>ubench</span> to see the frequencies being unthrottled again:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg install ubench</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> rehash </font><i><font color="#ababab"># For tcsh to find the newly installed command</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ubench </font><font color="#F3E651">&amp;</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> sysctl dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu </font><font color="#F3E651">|</font><font color="#ff0000"> grep freq</font><font color="#F3E651">:</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">3</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2922</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">2</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2922</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2923</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2922</font>
+</pre>
+<br />
+<span>Idle, all three Beelinks plus the switch consumed 26.2W. But with <span class='inlinecode'>ubench</span> stressing all the CPUs, it went up to 38.8W.</span><br />
+<br />
+<a href='./f3s-kubernetes-with-freebsd-part-2/watt.jpg'><img alt='Idle consumption.' title='Idle consumption.' src='./f3s-kubernetes-with-freebsd-part-2/watt.jpg' /></a><br />
+<br />
+<h2 style='display: inline' id='conclusion'>Conclusion</h2><br />
+<br />
+<span>The Beelink S12 Pro with Intel N100 CPUs checks all the boxes for a k3s project: compact, efficient, expandable, and affordable. Its compatibility with both Linux and FreeBSD makes it versatile for other use cases, whether as part of your cluster or as a standalone system. If you’re looking for hardware that punches above its weight for Kubernetes, this little device deserves a spot on your shortlist.</span><br />
+<br />
+<a href='./f3s-kubernetes-with-freebsd-part-2/3beelinks.jpg'><img alt='Beelinks stacked' title='Beelinks stacked' src='./f3s-kubernetes-with-freebsd-part-2/3beelinks.jpg' /></a><br />
+<br />
+<span>To ease cable management, I need to get shorter Ethernet cables. I will place the tower on my shelf, where most of the cables will be hidden (together with a UPS, which will also be added to the setup).</span><br />
+<br />
+<span>What will be covered in the next post of this series? The bhyve/Rocky Linux and WireGuard setup as described in part 1 of this series.</span><br />
+<br />
+<span>Other *BSD-related posts:</span><br />
+<br />
+<a class='textlink' href='./2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html'>2016-04-09 Jails and ZFS with Puppet on FreeBSD</a><br />
+<a class='textlink' href='./2022-07-30-lets-encrypt-with-openbsd-and-rex.html'>2022-07-30 Let&#39;s Encrypt with OpenBSD and Rex</a><br />
+<a class='textlink' href='./2022-10-30-installing-dtail-on-openbsd.html'>2022-10-30 Installing DTail on OpenBSD</a><br />
+<a class='textlink' href='./2024-01-13-one-reason-why-i-love-openbsd.html'>2024-01-13 One reason why I love OpenBSD</a><br />
+<a class='textlink' href='./2024-04-01-KISS-high-availability-with-OpenBSD.html'>2024-04-01 KISS high-availability with OpenBSD</a><br />
+<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation (You are currently reading this)</a><br />
+<br />
+<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
+<br />
+<a class='textlink' href='../'>Back to the main site</a><br />
+ </div>
+ </content>
+ </entry>
+ <entry>
<title>f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</title>
<link href="https://foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html" />
<id>https://foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html</id>
@@ -26,7 +371,10 @@
<br />
<span>I will post a new entry every month or so (there are too many other side projects for more frequent updates—I bet you can understand).</span><br />
<br />
+<span>These are all the posts so far:</span><br />
+<br />
<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage (You are currently reading this)</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
<br />
<a href='./f3s-kubernetes-with-freebsd-part-1/f3slogo.png'><img alt='f3s logo' title='f3s logo' src='./f3s-kubernetes-with-freebsd-part-1/f3slogo.png' /></a><br />
<br />
@@ -172,6 +520,10 @@
<br />
<span>What&#39;s your take on self-hosting? Are you planning to move away from managed cloud services? Stay tuned for the second part of this series, where I will likely write about the hardware and the OS setups.</span><br />
<br />
+<span>Read the next post of this series:</span><br />
+<br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
+<br />
<span>Other *BSD-related posts:</span><br />
<br />
<a class='textlink' href='./2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html'>2016-04-09 Jails and ZFS with Puppet on FreeBSD</a><br />
@@ -180,6 +532,7 @@
<a class='textlink' href='./2024-01-13-one-reason-why-i-love-openbsd.html'>2024-01-13 One reason why I love OpenBSD</a><br />
<a class='textlink' href='./2024-04-01-KISS-high-availability-with-OpenBSD.html'>2024-04-01 KISS high-availability with OpenBSD</a><br />
<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage (You are currently reading this)</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
<br />
<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
<br />
@@ -2647,6 +3000,7 @@ http://www.gnu.org/software/src-highlite -->
<a class='textlink' href='./2024-01-13-one-reason-why-i-love-openbsd.html'>2024-01-13 One reason why I love OpenBSD</a><br />
<a class='textlink' href='./2024-04-01-KISS-high-availability-with-OpenBSD.html'>2024-04-01 KISS high-availability with OpenBSD (You are currently reading this)</a><br />
<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
</div>
@@ -3004,6 +3358,7 @@ http://www.gnu.org/software/src-highlite -->
<a class='textlink' href='./2024-01-13-one-reason-why-i-love-openbsd.html'>2024-01-13 One reason why I love OpenBSD (You are currently reading this)</a><br />
<a class='textlink' href='./2024-04-01-KISS-high-availability-with-OpenBSD.html'>2024-04-01 KISS high-availability with OpenBSD</a><br />
<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
</div>
@@ -7949,6 +8304,7 @@ rex commons
<a class='textlink' href='./2024-01-13-one-reason-why-i-love-openbsd.html'>2024-01-13 One reason why I love OpenBSD</a><br />
<a class='textlink' href='./2024-04-01-KISS-high-availability-with-OpenBSD.html'>2024-04-01 KISS high-availability with OpenBSD</a><br />
<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</a><br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
</div>
@@ -8671,343 +9027,4 @@ learn () {
</div>
</content>
</entry>
- <entry>
- <title>The release of DTail 4.0.0</title>
- <link href="https://foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.html" />
- <id>https://foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.html</id>
- <updated>2022-03-06T18:11:39+00:00</updated>
- <author>
- <name>Paul Buetow aka snonux</name>
- <email>paul@dev.buetow.org</email>
- </author>
- <summary>I have recently released DTail 4.0.0 and this blog post goes through all the new goodies. If you want to jump directly to DTail, do it here (there are nice animated gifs which demonstrates the usage pretty well):</summary>
- <content type="xhtml">
- <div xmlns="http://www.w3.org/1999/xhtml">
- <h1 style='display: inline' id='the-release-of-dtail-400'>The release of DTail 4.0.0</h1><br />
-<br />
-<span class='quote'>Published at 2022-03-06T18:11:39+00:00</span><br />
-<br />
-<span>I have recently released DTail 4.0.0 and this blog post goes through all the new goodies. If you want to jump directly to DTail, do it here (there are nice animated gifs which demonstrates the usage pretty well):</span><br />
-<br />
-<a class='textlink' href='https://dtail.dev'>https://dtail.dev</a><br />
-<br />
-<pre>
- ,_---~~~~~----._
- _,,_,*^____ _____``*g*\"*,
- ____ _____ _ _ / __/ /&#39; ^. / \ ^@q f
- | _ \_ _|_ _(_) | @f | @)) | | @)) l 0 _/
- | | | || |/ _` | | | \`/ \~____ / __ \_____/ \
- | |_| || | (_| | | | | _l__l_ I
- |____/ |_|\__,_|_|_| } [______] I
- ] | | | |
- ] ~ ~ |
- | |
- | |
-</pre>
-<br />
-<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
-<br />
-<ul>
-<li><a href='#the-release-of-dtail-400'>The release of DTail 4.0.0</a></li>
-<li>⇢ <a href='#so-what-s-new-in-400'>So, what&#39;s new in 4.0.0?</a></li>
-<li>⇢ ⇢ <a href='#rewritten-logging'>Rewritten logging</a></li>
-<li>⇢ ⇢ <a href='#configurable-terminal-color-codes'>Configurable terminal color codes</a></li>
-<li>⇢ ⇢ <a href='#serverless-mode'>Serverless mode</a></li>
-<li>⇢ ⇢ <a href='#shorthand-flags'>Shorthand flags</a></li>
-<li>⇢ ⇢ <a href='#spartan-aka-plain-mode'>Spartan (aka plain) mode</a></li>
-<li>⇢ ⇢ <a href='#standard-input-pipe'>Standard input pipe</a></li>
-<li>⇢ ⇢ <a href='#new-command-dtailhealth'>New command dtailhealth</a></li>
-<li>⇢ ⇢ <a href='#improved-documentation'>Improved documentation</a></li>
-<li>⇢ ⇢ <a href='#integration-testing-suite'>Integration testing suite</a></li>
-<li>⇢ ⇢ <a href='#improved-code'>Improved code</a></li>
-<li>⇢ ⇢ <a href='#use-of-memory-pools'>Use of memory pools</a></li>
-<li>⇢ <a href='#what-s-next'>What&#39;s next</a></li>
-</ul><br />
-<h2 style='display: inline' id='so-what-s-new-in-400'>So, what&#39;s new in 4.0.0?</h2><br />
-<br />
-<h3 style='display: inline' id='rewritten-logging'>Rewritten logging</h3><br />
-<br />
-<span>For DTail 4, logging has been completely rewritten. The new package name is "internal/io/dlog". I rewrote the logging because DTail is a special case here: There are logs processed by DTail, there are logs produced by the DTail server itself, there are logs produced by a DTail client itself, there are logs only logged by a DTail client, there are logs only logged by the DTail server, and there are logs logged by both, server and client. There are also different logging levels and outputs involved.</span><br />
-<br />
-<span>As you can imagine, it becomes fairly complex. There is no ready Go off-shelf logging library which suits my needs and the logging code in DTail 3 was just one big source code file with global variables and it wasn&#39;t sustainable to maintain anymore. So why not rewrite it for profit and fun? </span><br />
-<br />
-<span>There&#39;s a are new log level structure now (The log level now can be specified with the "-logLevel" command line flag):</span><br />
-<br />
-<pre>
-// Available log levels.
-const (
- None level = iota
- Fatal level = iota
- Error level = iota
- Warn level = iota
- Info level = iota
- Default level = iota
- Verbose level = iota
- Debug level = iota
- Devel level = iota
- Trace level = iota
- All level = iota
-)
-</pre>
-<br />
-<span>DTail also supports multiple log outputs (e.g. to file or to stdout). More are now easily pluggable with the new logging package. The output can also be "enriched" (default) or "plain" (read more about that further below).</span><br />
-<br />
-<h3 style='display: inline' id='configurable-terminal-color-codes'>Configurable terminal color codes</h3><br />
-<br />
-<span>A complaint I received from the users of DTail 3 were the terminal colors used for the output. Under some circumstances (terminal configuration) it made the output difficult to read so that users defaulted to "--noColor" (disabling colored output completely). I toke it by heart and also rewrote the color handling. It&#39;s now possible to configure the foreground and background colors and an attribute (e.g. dim, bold, ...).</span><br />
-<br />
-<span>The example "dtail.json" configuration file represents the default (now, more reasonable default) color codes used, and it is free to the user to customize them:</span><br />
-<br />
-<pre>
-{
- "Client": {
- "TermColorsEnable": true,
- "TermColors": {
- "Remote": {
- "DelimiterAttr": "Dim",
- "DelimiterBg": "Blue",
- "DelimiterFg": "Cyan",
- "RemoteAttr": "Dim",
- "RemoteBg": "Blue",
- "RemoteFg": "White",
- "CountAttr": "Dim",
- "CountBg": "Blue",
- "CountFg": "White",
- "HostnameAttr": "Bold",
- "HostnameBg": "Blue",
- "HostnameFg": "White",
- "IDAttr": "Dim",
- "IDBg": "Blue",
- "IDFg": "White",
- "StatsOkAttr": "None",
- "StatsOkBg": "Green",
- "StatsOkFg": "Black",
- "StatsWarnAttr": "None",
- "StatsWarnBg": "Red",
- "StatsWarnFg": "White",
- "TextAttr": "None",
- "TextBg": "Black",
- "TextFg": "White"
- },
- "Client": {
- "DelimiterAttr": "Dim",
- "DelimiterBg": "Yellow",
- "DelimiterFg": "Black",
- "ClientAttr": "Dim",
- "ClientBg": "Yellow",
- "ClientFg": "Black",
- "HostnameAttr": "Dim",
- "HostnameBg": "Yellow",
- "HostnameFg": "Black",
- "TextAttr": "None",
- "TextBg": "Black",
- "TextFg": "White"
- },
- "Server": {
- "DelimiterAttr": "AttrDim",
- "DelimiterBg": "BgCyan",
- "DelimiterFg": "FgBlack",
- "ServerAttr": "AttrDim",
- "ServerBg": "BgCyan",
- "ServerFg": "FgBlack",
- "HostnameAttr": "AttrBold",
- "HostnameBg": "BgCyan",
- "HostnameFg": "FgBlack",
- "TextAttr": "AttrNone",
- "TextBg": "BgBlack",
- "TextFg": "FgWhite"
- },
- "Common": {
- "SeverityErrorAttr": "AttrBold",
- "SeverityErrorBg": "BgRed",
- "SeverityErrorFg": "FgWhite",
- "SeverityFatalAttr": "AttrBold",
- "SeverityFatalBg": "BgMagenta",
- "SeverityFatalFg": "FgWhite",
- "SeverityWarnAttr": "AttrBold",
- "SeverityWarnBg": "BgBlack",
- "SeverityWarnFg": "FgWhite"
- },
- "MaprTable": {
- "DataAttr": "AttrNone",
- "DataBg": "BgBlue",
- "DataFg": "FgWhite",
- "DelimiterAttr": "AttrDim",
- "DelimiterBg": "BgBlue",
- "DelimiterFg": "FgWhite",
- "HeaderAttr": "AttrBold",
- "HeaderBg": "BgBlue",
- "HeaderFg": "FgWhite",
- "HeaderDelimiterAttr": "AttrDim",
- "HeaderDelimiterBg": "BgBlue",
- "HeaderDelimiterFg": "FgWhite",
- "HeaderSortKeyAttr": "AttrUnderline",
- "HeaderGroupKeyAttr": "AttrReverse",
- "RawQueryAttr": "AttrDim",
- "RawQueryBg": "BgBlack",
- "RawQueryFg": "FgCyan"
- }
- }
- },
- ...
-}
-</pre>
-<br />
-<span>You notice the different sections - these are different contexts:</span><br />
-<br />
-<ul>
-<li>Remote: Color configuration for all log lines sent remotely from the server to the client. </li>
-<li>Client: Color configuration for all lines produced by a DTail client by itself (e.g. status information).</li>
-<li>Server: Color configuration for all lines produced by the DTail server by itself and sent to the client (e.g. server warnings or errors)</li>
-<li>MaprTable: Color configuration for the map-reduce table output.</li>
-<li>Common: Common color configuration used in various places (e.g. when it&#39;s not clear what&#39;s the current context of a line).</li>
-</ul><br />
-<span>When you do so, make sure that you check your "dtail.json" against the JSON schema file. This is to ensure that you don&#39;t configure an invalid color accidentally (requires "jsonschema" to be installed on your computer). Furthermore, the schema file is also a good reference for all possible colors available:</span><br />
-<br />
-<pre>
-jsonschema -i dtail.json schemas/dtail.schema.json
-</pre>
-<br />
-<h3 style='display: inline' id='serverless-mode'>Serverless mode</h3><br />
-<br />
-<span>All DTail commands can now operate on log files (and other text files) directly without any DTail server running. So there isn&#39;t a need anymore to install a DTail server when you are on the target server already anyway, like the following example shows:</span><br />
-<br />
-<pre>
-% dtail --files /var/log/foo.log
-</pre>
-<br />
-<span>or</span><br />
-<br />
-<pre>
-% dmap --files /var/log/foo.log --query &#39;from TABLE select .... outfile result.csv&#39;
-</pre>
-<br />
-<span>The way it works in Go code is that a connection to a server is managed through an interface and in serverless mode DTail calls through that interface to the server code directly without any TCP/IP and SSH connection made in the background. This means, that the binaries are a bit larger (also ship with the code which normally would be executed by the server) but the increase of binary size is not much.</span><br />
-<br />
-<h3 style='display: inline' id='shorthand-flags'>Shorthand flags</h3><br />
-<br />
-<span>The "--files" from the previous example is now redundant. As a shorthand, It is now possible to do the following instead:</span><br />
-<br />
-<pre>
-% dtail /var/log/foo.log
-</pre>
-<br />
-<span>Of course, this also works with all other DTail client commands (dgrep, dcat, ... etc).</span><br />
-<br />
-<h3 style='display: inline' id='spartan-aka-plain-mode'>Spartan (aka plain) mode</h3><br />
-<br />
-<span>There&#39;s a plain mode, which makes DTail only print out the "plain" text of the files operated on (without any DTail specific enriched output). E.g.:</span><br />
-<br />
-<pre>
-% dcat --plain /etc/passwd &gt; /etc/test
-% diff /etc/test /etc/passwd # Same content, no diff
-</pre>
-<br />
-<span>This might be useful if you wanted to post-process the output. </span><br />
-<br />
-<h3 style='display: inline' id='standard-input-pipe'>Standard input pipe</h3><br />
-<br />
-<span>In serverless mode, you might want to process your data in a pipeline. You can do that now too through an input pipe:</span><br />
-<br />
-<pre>
-% dgrep --plain --regex &#39;somethingspecial&#39; /var/log/foo.log |
- dmap --query &#39;from TABLE select .... outfile result.csv&#39;
-</pre>
-<br />
-<span>Or, use any other "standard" tool:</span><br />
-<br />
-<pre>
-% awk &#39;.....&#39; &lt; /some/file | dtail ....
-</pre>
-<br />
-<h3 style='display: inline' id='new-command-dtailhealth'>New command dtailhealth</h3><br />
-<br />
-<span>Prior to DTail 4, there was a flag for the "dtail" command to check the health of a remote DTail server (for use with monitoring system such as Nagios). That has been moved out to a separate binary to reduce complexity of the "dtail" command. The following checks whether DTail is operational on the current machine (you could also check a remote instance of DTail server, just adjust the server address).</span><br />
-<br />
-<pre>
-% cat check_dtail.sh
-#!/bin/sh
-
-exec /usr/local/bin/dtailhealth --server localhost:2222
-</pre>
-<br />
-<h3 style='display: inline' id='improved-documentation'>Improved documentation</h3><br />
-<br />
-<span>Some features, such as custom log formats and the map-reduce query language, are now documented. Also, the examples have been updated to reflect the new features added. This also includes the new animated example Gifs (plus documentation how they were created).</span><br />
-<br />
-<span>I must admit that not all features are documented yet:</span><br />
-<br />
-<ul>
-<li>Server side scheduled map-reduce queries</li>
-<li>Server side continuous map-reduce queries</li>
-<li>Some more docs about terminal color customization</li>
-<li>Some more docs about log levels</li>
-</ul><br />
-<span>That will be added in one of the future releases. </span><br />
-<br />
-<h3 style='display: inline' id='integration-testing-suite'>Integration testing suite</h3><br />
-<br />
-<span>DTail comes already with some unit tests, but what&#39;s new is a full integration testing suite which covers all common use cases of all the commands (dtail, dcat, dgrep, dmap) with a server backend and also in serverless mode.</span><br />
-<br />
-<span>How are the tests implemented? All integration tests are simply unit tests in the "./integrationtests" folder. They must be explicitly activated with:</span><br />
-<br />
-<pre>
-% export DTAIL_INTEGRATION_TEST_RUN_MODE=yes
-</pre>
-<br />
-<span>Once done, first compile all commands, and then run the integration tests:</span><br />
-<br />
-<pre>
-% make
-.
-.
-.
-% go clean -testcache
-% go test -race -v ./integrationtests
-</pre>
-<br />
-<h3 style='display: inline' id='improved-code'>Improved code</h3><br />
-<br />
-<span>Not that the code quality of DTail has been bad (I have been using Go vet and Go lint for previous releases and will keep using these), but this time I had new tools (such as SonarQube and BlackDuck) in my arsenal to:</span><br />
-<br />
-<ul>
-<li>Reduce the complexity of a couple of functions (splitting code up into several smaller functions)</li>
-<li>Avoid repeating code (this version of DTail doesn&#39;t use Go generics yet, though).</li>
-</ul><br />
-<span>Other than that, a lot of other code has been refactored as I saw fit.</span><br />
-<br />
-<h3 style='display: inline' id='use-of-memory-pools'>Use of memory pools</h3><br />
-<br />
-<span>DTail makes excessive use of string builder and byte buffer objects. For performance reasons, those are now re-used from memory pools.</span><br />
-<br />
-<h2 style='display: inline' id='what-s-next'>What&#39;s next</h2><br />
-<br />
-<span>DTail 5 won&#39;t be released any time soon I guess, but some 4.x.y releases will follow this year fore sure. I can think of:</span><br />
-<br />
-<ul>
-<li>New (but backwards compatible) features which don&#39;t require a new major version bump (some features have been requested at work internally).</li>
-<li>Even more improved documentation.</li>
-<li>Dependency updates.</li>
-</ul><br />
-<span>I use usually DTail at work, but I have recently installed it on my personal OpenBSD machines too. I might write a small tutorial here (and I might also add the rc scripts as examples to one of the next DTail releases).</span><br />
-<br />
-<span>I am a bit busy at the moment with two other pet projects of mine (one internal work-project, and one personal one, the latter you will read about in the next couple of months). If you have ideas (or even a patch), then please don&#39;t hesitate to contact me (either via E-Mail or a request at GitHub).</span><br />
-<br />
-<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
-<br />
-<span>Other related posts are:</span><br />
-<br />
-<a class='textlink' href='./2021-04-22-dtail-the-distributed-log-tail-program.html'>2021-04-22 DTail - The distributed log tail program</a><br />
-<a class='textlink' href='./2022-03-06-the-release-of-dtail-4.0.0.html'>2022-03-06 The release of DTail 4.0.0 (You are currently reading this)</a><br />
-<a class='textlink' href='./2022-10-30-installing-dtail-on-openbsd.html'>2022-10-30 Installing DTail on OpenBSD</a><br />
-<a class='textlink' href='./2023-09-25-dtail-usage-examples.html'>2023-09-25 DTail usage examples</a><br />
-<br />
-<span>Thanks!</span><br />
-<br />
-<span>Paul</span><br />
-<br />
-<a class='textlink' href='../'>Back to the main site</a><br />
- </div>
- </content>
- </entry>
</feed>
diff --git a/gemfeed/f3s-kubernetes-with-freebsd-part-2/3beelinks.jpg b/gemfeed/f3s-kubernetes-with-freebsd-part-2/3beelinks.jpg
new file mode 100644
index 00000000..7da37da7
--- /dev/null
+++ b/gemfeed/f3s-kubernetes-with-freebsd-part-2/3beelinks.jpg
Binary files differ
diff --git a/gemfeed/f3s-kubernetes-with-freebsd-part-2/f3s-collage1.jpg b/gemfeed/f3s-kubernetes-with-freebsd-part-2/f3s-collage1.jpg
new file mode 100644
index 00000000..294eb37d
--- /dev/null
+++ b/gemfeed/f3s-kubernetes-with-freebsd-part-2/f3s-collage1.jpg
Binary files differ
diff --git a/gemfeed/f3s-kubernetes-with-freebsd-part-2/f3s-collage2.jpg b/gemfeed/f3s-kubernetes-with-freebsd-part-2/f3s-collage2.jpg
new file mode 100644
index 00000000..77c4c0bc
--- /dev/null
+++ b/gemfeed/f3s-kubernetes-with-freebsd-part-2/f3s-collage2.jpg
Binary files differ
diff --git a/gemfeed/f3s-kubernetes-with-freebsd-part-2/switch.jpg b/gemfeed/f3s-kubernetes-with-freebsd-part-2/switch.jpg
new file mode 100644
index 00000000..8fe0edeb
--- /dev/null
+++ b/gemfeed/f3s-kubernetes-with-freebsd-part-2/switch.jpg
Binary files differ
diff --git a/gemfeed/f3s-kubernetes-with-freebsd-part-2/watt.jpg b/gemfeed/f3s-kubernetes-with-freebsd-part-2/watt.jpg
new file mode 100644
index 00000000..e79fe68c
--- /dev/null
+++ b/gemfeed/f3s-kubernetes-with-freebsd-part-2/watt.jpg
Binary files differ
diff --git a/gemfeed/index.html b/gemfeed/index.html
index 62314677..dbd261cd 100644
--- a/gemfeed/index.html
+++ b/gemfeed/index.html
@@ -12,6 +12,7 @@
<br />
<h2 style='display: inline' id='to-be-in-the-zone'>To be in the .zone!</h2><br />
<br />
+<a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 - f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br />
<a class='textlink' href='./2024-11-17-f3s-kubernetes-with-freebsd-part-1.html'>2024-11-17 - f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</a><br />
<a class='textlink' href='./2024-10-24-staff-engineer-book-notes.html'>2024-10-24 - &#39;Staff Engineer&#39; book notes</a><br />
<a class='textlink' href='./2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4.html'>2024-10-02 - Gemtexter 3.0.0 - Let&#39;s Gemtext again⁴</a><br />