summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--about/resources.html202
-rw-r--r--gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html171
-rw-r--r--gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-8b.html1132
-rw-r--r--gemfeed/atom.xml175
-rw-r--r--index.html2
-rw-r--r--tags/style-override.css0
-rw-r--r--test-tags.html.tmp38
-rw-r--r--test-template-tags.html.tmp38
-rw-r--r--uptime-stats.html90
9 files changed, 1635 insertions, 213 deletions
diff --git a/about/resources.html b/about/resources.html
index 417c5142..ec883081 100644
--- a/about/resources.html
+++ b/about/resources.html
@@ -50,67 +50,67 @@
<span>In random order:</span><br />
<br />
<ul>
-<li>Funktionale Programmierung; Peter Pepper; Springer</li>
-<li>Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press</li>
-<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</li>
-<li>Raku Fundamentals; Moritz Lenz; Apress</li>
-<li>Raku Recipes; J.J. Merelo; Apress</li>
-<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li>
-<li>Polished Ruby Programming; Jeremy Evans; Packt Publishing</li>
-<li>Modern Perl; Chromatic ; Onyx Neon Press</li>
-<li>Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers </li>
-<li>Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson</li>
-<li>DNS and BIND; Cricket Liu; O&#39;Reilly</li>
-<li>100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications</li>
-<li>Effective awk programming; Arnold Robbins; O&#39;Reilly</li>
-<li>The Practise of System and Network Administration; Thomas A. Limoncelli, Christina J. Hogan, Strata R. Chalup; Addison-Wesley Professional Pro Git; Scott Chacon, Ben Straub; Apress</li>
<li>Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O&#39;Reilly</li>
-<li>Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf</li>
-<li>Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications</li>
-<li>The Docker Book; James Turnbull; Kindle</li>
-<li>Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O&#39;Reilly</li>
<li>The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible</li>
-<li>Data Science at the Command Line; Jeroen Janssens; O&#39;Reilly</li>
-<li>Seeking SRE: Conversations About Running Production Systems at Scale; David N. Blank-Edelman; eBook</li>
+<li>Effective awk programming; Arnold Robbins; O&#39;Reilly</li>
+<li>Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O&#39;Reilly</li>
+<li>Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers </li>
+<li>Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt </li>
+<li>Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf</li>
+<li>Leanring eBPF; Liz Rice; O&#39;Reilly</li>
+<li>97 things every SRE should know; Emil Stolarsky, Jaime Woo; O&#39;Reilly</li>
<li>Effective Java; Joshua Bloch; Addison-Wesley Professional</li>
-<li>Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall &amp; Jon Orwant; O&#39;Reilly</li>
+<li>The Practise of System and Network Administration; Thomas A. Limoncelli, Christina J. Hogan, Strata R. Chalup; Addison-Wesley Professional Pro Git; Scott Chacon, Ben Straub; Apress</li>
+<li>Raku Fundamentals; Moritz Lenz; Apress</li>
+<li>C++ Programming Language; Bjarne Stroustrup;</li>
+<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</li>
+<li>100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications</li>
+<li>Java ist auch eine Insel; Christian Ullenboom; </li>
+<li>Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers</li>
<li>Ultimate Go Notebook; Bill Kennedy</li>
-<li>Perl New Features; Joshua McAdams, brian d foy; Perl School</li>
-<li>Higher Order Perl; Mark Dominus; Morgan Kaufmann</li>
-<li>Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook</li>
-<li>Terraform Cookbook; Mikael Krief; Packt Publishing</li>
-<li>Clusterbau mit Linux-HA; Michael Schwartzkopff; O&#39;Reilly</li>
-<li>Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O&#39;Reilly</li>
-<li>The Pragmatic Programmer; David Thomas; Addison-Wesley</li>
<li>Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press</li>
-<li>Developing Games in Java; David Brackeen and others...; New Riders</li>
+<li>Data Science at the Command Line; Jeroen Janssens; O&#39;Reilly</li>
+<li>Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson</li>
<li>DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible</li>
+<li>Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook</li>
+<li>Developing Games in Java; David Brackeen and others...; New Riders</li>
+<li>Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall &amp; Jon Orwant; O&#39;Reilly</li>
+<li>Raku Recipes; J.J. Merelo; Apress</li>
<li>Site Reliability Engineering; How Google runs production systems; O&#39;Reilly</li>
-<li>97 things every SRE should know; Emil Stolarsky, Jaime Woo; O&#39;Reilly</li>
+<li>The Docker Book; James Turnbull; Kindle</li>
+<li>Seeking SRE: Conversations About Running Production Systems at Scale; David N. Blank-Edelman; eBook</li>
+<li>Polished Ruby Programming; Jeremy Evans; Packt Publishing</li>
+<li>Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications</li>
<li>Pro Puppet; James Turnbull, Jeffrey McCune; Apress</li>
-<li>Java ist auch eine Insel; Christian Ullenboom; </li>
+<li>Systemprogrammierung in Go; Frank Müller; dpunkt</li>
+<li>Terraform Cookbook; Mikael Krief; Packt Publishing</li>
+<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li>
+<li>Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O&#39;Reilly</li>
+<li>Higher Order Perl; Mark Dominus; Morgan Kaufmann</li>
+<li>Perl New Features; Joshua McAdams, brian d foy; Perl School</li>
+<li>Funktionale Programmierung; Peter Pepper; Springer</li>
+<li>Modern Perl; Chromatic ; Onyx Neon Press</li>
<li>Concurrency in Go; Katherine Cox-Buday; O&#39;Reilly</li>
-<li>Leanring eBPF; Liz Rice; O&#39;Reilly</li>
-<li>Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers</li>
<li>The Kubernetes Book; Nigel Poulton; Unabridged Audiobook</li>
-<li>C++ Programming Language; Bjarne Stroustrup;</li>
-<li>The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton</li>
-<li>Systemprogrammierung in Go; Frank Müller; dpunkt</li>
-<li>Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt </li>
+<li>DNS and BIND; Cricket Liu; O&#39;Reilly</li>
<li>21st Century C: C Tips from the New School; Ben Klemens; O&#39;Reilly</li>
+<li>Clusterbau mit Linux-HA; Michael Schwartzkopff; O&#39;Reilly</li>
+<li>The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton</li>
+<li>The Pragmatic Programmer; David Thomas; Addison-Wesley</li>
+<li>Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press</li>
</ul><br />
<h2 style='display: inline' id='technical-references'>Technical references</h2><br />
<br />
<span>I didn&#39;t read them from the beginning to the end, but I am using them to look up things. The books are in random order:</span><br />
<br />
<ul>
+<li>Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O&#39;Reilly</li>
<li>Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley</li>
-<li>Go: Design Patterns for Real-World Projects; Mat Ryer; Packt</li>
+<li>Groovy Kurz &amp; Gut; Joerg Staudemeier; O&#39;Reilly</li>
<li>The Linux Programming Interface; Michael Kerrisk; No Starch Press </li>
-<li>Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O&#39;Reilly</li>
<li>Relayd and Httpd Mastery; Michael W Lucas</li>
<li>BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley</li>
-<li>Groovy Kurz &amp; Gut; Joerg Staudemeier; O&#39;Reilly</li>
+<li>Go: Design Patterns for Real-World Projects; Mat Ryer; Packt</li>
<li>Implementing Service Level Objectives; Alex Hidalgo; O&#39;Reilly</li>
</ul><br />
<h2 style='display: inline' id='self-development-and-soft-skills-books'>Self-development and soft-skills books</h2><br />
@@ -118,44 +118,44 @@
<span>In random order:</span><br />
<br />
<ul>
-<li>The Software Engineer&#39;s Guidebook: Navigating senior, tech lead, and staff engineer positions at tech companies and startups; Gergely Orosz; Audiobook </li>
-<li>Psycho-Cybernetics; Maxwell Maltz; Perigee Books</li>
<li>Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook</li>
-<li>The Complete Software Developer&#39;s Career Guide; John Sonmez; Unabridged Audiobook</li>
-<li>Eat That Frog; Brian Tracy</li>
-<li>The Bullet Journal Method; Ryder Carroll; Fourth Estate</li>
-<li>Slow Productivity; Cal Newport; Penguin Random House</li>
+<li>Soft Skills; John Sommez; Manning Publications</li>
+<li>Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press</li>
+<li>Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing</li>
<li>Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook</li>
-<li>The Good Enough Job; Simone Stolzoff; Ebury Edge</li>
-<li>Eat That Frog!; Brian Tracy; Hodder Paperbacks</li>
-<li>The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd</li>
<li>97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook</li>
-<li>The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME)</li>
+<li>The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select</li>
+<li>101 Essays that change the way you think; Brianna Wiest; Audiobook</li>
+<li>Psycho-Cybernetics; Maxwell Maltz; Perigee Books</li>
<li>The Power of Now; Eckhard Tolle; Yellow Kite</li>
-<li>Soft Skills; John Sommez; Manning Publications</li>
-<li>Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne</li>
+<li>Influence without Authority; A. Cohen, D. Bradford; Wiley</li>
+<li>Ultralearning; Anna Laurent; Self-published via Amazon</li>
<li>Solve for Happy; Mo Gawdat (RE-READ 1ST TIME)</li>
-<li>The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select</li>
-<li>The Courage to Be Disliked; Ichiro Kishimi and Fumitake Koga; Audiobook</li>
-<li>Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press</li>
+<li>The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books</li>
<li>Atomic Habits; James Clear; Random House Business</li>
-<li>Never Split the Difference; Chris Voss, Tahl Raz; Random House Business</li>
-<li>Getting Things Done; David Allen</li>
<li>So Good They Can&#39;t Ignore You; Cal Newport; Business Plus</li>
-<li>Ultralearning; Anna Laurent; Self-published via Amazon</li>
-<li>The Joy of Missing Out; Christina Crook; New Society Publishers</li>
-<li>Digital Minimalism; Cal Newport; Portofolio Penguin</li>
-<li>Ultralearning; Scott Young; Thorsons</li>
-<li>Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion</li>
-<li>101 Essays that change the way you think; Brianna Wiest; Audiobook</li>
-<li>Influence without Authority; A. Cohen, D. Bradford; Wiley</li>
<li>Stop starting, start finishing; Arne Roock; Lean-Kanban University </li>
+<li>Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne</li>
+<li>The Joy of Missing Out; Christina Crook; New Society Publishers</li>
<li>The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon &amp; Schuster UK</li>
+<li>Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion</li>
+<li>The Good Enough Job; Simone Stolzoff; Ebury Edge</li>
+<li>Ultralearning; Scott Young; Thorsons</li>
+<li>Digital Minimalism; Cal Newport; Portofolio Penguin</li>
+<li>The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd</li>
+<li>The Software Engineer&#39;s Guidebook: Navigating senior, tech lead, and staff engineer positions at tech companies and startups; Gergely Orosz; Audiobook </li>
<li>Deep Work; Cal Newport; Piatkus</li>
-<li>The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books</li>
-<li>Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing</li>
-<li>Meditation for Mortals, Oliver Burkeman, Audiobook</li>
+<li>Eat That Frog; Brian Tracy</li>
+<li>The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME)</li>
<li>Time Management for System Administrators; Thomas A. Limoncelli; O&#39;Reilly</li>
+<li>Eat That Frog!; Brian Tracy; Hodder Paperbacks</li>
+<li>Getting Things Done; David Allen</li>
+<li>The Bullet Journal Method; Ryder Carroll; Fourth Estate</li>
+<li>The Courage to Be Disliked; Ichiro Kishimi and Fumitake Koga; Audiobook</li>
+<li>Never Split the Difference; Chris Voss, Tahl Raz; Random House Business</li>
+<li>The Complete Software Developer&#39;s Career Guide; John Sonmez; Unabridged Audiobook</li>
+<li>Meditation for Mortals, Oliver Burkeman, Audiobook</li>
+<li>Slow Productivity; Cal Newport; Penguin Random House</li>
</ul><br />
<a class='textlink' href='../notes/index.html'>Here are notes of mine for some of the books</a><br />
<br />
@@ -165,30 +165,30 @@
<br />
<ul>
<li>Algorithms Video Lectures; Robert Sedgewick; O&#39;Reilly Online</li>
-<li>MySQL Deep Dive Workshop; 2-day on-site training</li>
-<li>AWS Immersion Day; Amazon; 1-day interactive online training </li>
+<li>F5 Loadbalancers Training; 2-day on-site training; F5, Inc. </li>
<li>The Ultimate Kubernetes Bootcamp; School of Devops; O&#39;Reilly Online</li>
-<li>Protocol buffers; O&#39;Reilly Online</li>
-<li>The Well-Grounded Rubyist Video Edition; David. A. Black; O&#39;Reilly Online</li>
-<li>Scripting Vim; Damian Conway; O&#39;Reilly Online</li>
-<li>Developing IaC with Terraform (with Live Lessons); O&#39;Reilly Online</li>
-<li>Structure and Interpretation of Computer Programs; Harold Abelson and more...; </li>
-<li>Red Hat Certified System Administrator; Course + certification (Although I had the option, I decided not to take the next course as it is more effective to self learn what I need)</li>
<li>Ultimate Go Programming; Bill Kennedy; O&#39;Reilly Online</li>
-<li>Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training</li>
+<li>Structure and Interpretation of Computer Programs; Harold Abelson and more...; </li>
<li>Apache Tomcat Best Practises; 3-day on-site training</li>
-<li>F5 Loadbalancers Training; 2-day on-site training; F5, Inc. </li>
<li>Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon</li>
+<li>The Well-Grounded Rubyist Video Edition; David. A. Black; O&#39;Reilly Online</li>
+<li>Protocol buffers; O&#39;Reilly Online</li>
+<li>Scripting Vim; Damian Conway; O&#39;Reilly Online</li>
+<li>MySQL Deep Dive Workshop; 2-day on-site training</li>
+<li>Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training</li>
+<li>Red Hat Certified System Administrator; Course + certification (Although I had the option, I decided not to take the next course as it is more effective to self learn what I need)</li>
<li>Functional programming lecture; Remote University of Hagen</li>
+<li>AWS Immersion Day; Amazon; 1-day interactive online training </li>
+<li>Developing IaC with Terraform (with Live Lessons); O&#39;Reilly Online</li>
</ul><br />
<h2 style='display: inline' id='technical-guides'>Technical guides</h2><br />
<br />
<span>These are not whole books, but guides (smaller or larger) which I found very useful. in random order:</span><br />
<br />
<ul>
+<li>Advanced Bash-Scripting Guide </li>
<li>Raku Guide at https://raku.guide </li>
<li>How CPUs work at https://cpu.land</li>
-<li>Advanced Bash-Scripting Guide </li>
</ul><br />
<h2 style='display: inline' id='podcasts'>Podcasts</h2><br />
<br />
@@ -197,32 +197,32 @@
<span>In random order:</span><br />
<br />
<ul>
-<li>Wednesday Wisdom</li>
-<li>Modern Mentor</li>
-<li>The Pragmatic Engineer Podcast</li>
-<li>The Changelog Podcast(s)</li>
-<li>BSD Now [BSD]</li>
-<li>Fork Around And Find Out</li>
-<li>Dev Interrupted</li>
<li>Cup o&#39; Go [Golang]</li>
-<li>Fallthrough [Golang]</li>
+<li>Dev Interrupted</li>
+<li>Fork Around And Find Out</li>
+<li>Maintainable</li>
+<li>BSD Now [BSD]</li>
+<li>The Changelog Podcast(s)</li>
<li>Hidden Brain</li>
+<li>The Pragmatic Engineer Podcast</li>
+<li>Fallthrough [Golang]</li>
<li>The ProdCast (Google SRE Podcast)</li>
-<li>Pratical AI</li>
-<li>Backend Banter</li>
<li>Deep Questions with Cal Newport</li>
-<li>Maintainable</li>
+<li>Backend Banter</li>
+<li>Wednesday Wisdom</li>
+<li>Pratical AI</li>
+<li>Modern Mentor</li>
</ul><br />
<h3 style='display: inline' id='podcasts-i-liked'>Podcasts I liked</h3><br />
<br />
<span>I liked them but am not listening to them anymore. The podcasts have either "finished" (no more episodes) or I stopped listening to them due to time constraints or a shift in my interests.</span><br />
<br />
<ul>
-<li>FLOSS weekly</li>
-<li>Go Time (predecessor of fallthrough)</li>
+<li>Ship It (predecessor of Fork Around And Find Out)</li>
<li>Modern Mentor</li>
<li>CRE: Chaosradio Express [german]</li>
-<li>Ship It (predecessor of Fork Around And Find Out)</li>
+<li>Go Time (predecessor of fallthrough)</li>
+<li>FLOSS weekly</li>
<li>Java Pub House</li>
</ul><br />
<h2 style='display: inline' id='newsletters-i-like'>Newsletters I like</h2><br />
@@ -230,26 +230,26 @@
<span>This is a mix of tech and non-tech newsletters I am subscribed to. In random order:</span><br />
<br />
<ul>
-<li>VK Newsletter</li>
-<li>Register Spill</li>
-<li>Monospace Mentor</li>
<li>Andreas Brandhorst Newsletter (Sci-Fi author)</li>
<li>Applied Go Weekly Newsletter</li>
-<li>The Imperfectionist</li>
-<li>Changelog News</li>
-<li>The Valuable Dev</li>
+<li>Ruby Weekly</li>
+<li>The Pragmatic Engineer</li>
+<li>Register Spill</li>
+<li>VK Newsletter</li>
<li>byteSizeGo</li>
<li>Golang Weekly</li>
-<li>The Pragmatic Engineer</li>
-<li>Ruby Weekly</li>
+<li>Monospace Mentor</li>
+<li>Changelog News</li>
+<li>The Imperfectionist</li>
+<li>The Valuable Dev</li>
</ul><br />
<h2 style='display: inline' id='magazines-i-liked'>Magazines I like(d)</h2><br />
<br />
<span>This is a mix of tech I like(d). I may not be a current subscriber, but now and then, I buy an issue. In random order:</span><br />
<br />
<ul>
-<li>Linux Magazine</li>
<li>LWN (online only)</li>
+<li>Linux Magazine</li>
<li>Linux User</li>
<li>freeX (not published anymore)</li>
</ul><br />
diff --git a/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html b/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html
index 25d807c2..b4ae12dd 100644
--- a/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html
+++ b/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html
@@ -13,7 +13,7 @@
</p>
<h1 style='display: inline' id='f3s-kubernetes-with-freebsd---part-7-k3s-and-first-pod-deployments'>f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments</h1><br />
<br />
-<span class='quote'>Published at 2025-10-02T11:27:19+03:00</span><br />
+<span class='quote'>Published at 2025-10-02T11:27:19+03:00, last updated Tue 30 Dec 10:11:58 EET 2025</span><br />
<br />
<span>This is the seventh blog post about the f3s series for my self-hosting demands in a home lab. f3s? The "f" stands for FreeBSD, and the "3s" stands for k3s, the Kubernetes distribution I use on FreeBSD-based physical machines.</span><br />
<br />
@@ -43,6 +43,8 @@
<li>⇢ ⇢ <a href='#scaling-traefik-for-faster-failover'>Scaling Traefik for faster failover</a></li>
<li>⇢ <a href='#make-it-accessible-from-the-public-internet'>Make it accessible from the public internet</a></li>
<li>⇢ ⇢ <a href='#openbsd-relayd-configuration'>OpenBSD relayd configuration</a></li>
+<li>⇢ ⇢ <a href='#automatic-failover-when-f3s-cluster-is-down'>Automatic failover when f3s cluster is down</a></li>
+<li>⇢ ⇢ <a href='#openbsd-httpd-fallback-configuration'>OpenBSD httpd fallback configuration</a></li>
<li>⇢ <a href='#deploying-the-private-docker-image-registry'>Deploying the private Docker image registry</a></li>
<li>⇢ ⇢ <a href='#prepare-the-nfs-backed-storage'>Prepare the NFS-backed storage</a></li>
<li>⇢ ⇢ <a href='#install-or-upgrade-the-chart'>Install (or upgrade) the chart</a></li>
@@ -672,10 +674,11 @@ table &lt;f3s&gt; {
}
</pre>
<br />
-<span>Inside the <span class='inlinecode'>http protocol "https"</span> block each public hostname gets its Let&#39;s Encrypt certificate and is matched to that backend table. Besides the primary trio, every service-specific hostname (<span class='inlinecode'>anki</span>, <span class='inlinecode'>bag</span>, <span class='inlinecode'>flux</span>, <span class='inlinecode'>audiobookshelf</span>, <span class='inlinecode'>gpodder</span>, <span class='inlinecode'>radicale</span>, <span class='inlinecode'>vault</span>, <span class='inlinecode'>syncthing</span>, <span class='inlinecode'>uprecords</span>) and their <span class='inlinecode'>www</span> / <span class='inlinecode'>standby</span> aliases reuse the same pool so new apps can go live just by publishing an ingress rule, whereas they will all map to a service running in k3s:</span><br />
+<span>Inside the <span class='inlinecode'>http protocol "https"</span> block each public hostname gets its Let&#39;s Encrypt certificate. The protocol configures TLS keypairs for all f3s services and other public endpoints. For f3s hosts specifically, there are no explicit <span class='inlinecode'>forward to</span> rules in the protocol—they use the relay-level failover mechanism described later. Non-f3s hosts get explicit localhost routing to prevent them from trying the f3s backends:</span><br />
<br />
<pre>
http protocol "https" {
+ # TLS certificates for all f3s services
tls keypair f3s.foo.zone
tls keypair www.f3s.foo.zone
tls keypair standby.f3s.foo.zone
@@ -707,36 +710,15 @@ http protocol "https" {
tls keypair www.uprecords.f3s.foo.zone
tls keypair standby.uprecords.f3s.foo.zone
- match request quick header "Host" value "f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "www.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "standby.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "anki.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "www.anki.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "standby.anki.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "bag.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "www.bag.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "standby.bag.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "flux.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "www.flux.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "standby.flux.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "audiobookshelf.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "www.audiobookshelf.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "standby.audiobookshelf.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "gpodder.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "www.gpodder.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "standby.gpodder.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "radicale.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "www.radicale.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "standby.radicale.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "vault.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "www.vault.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "standby.vault.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "syncthing.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "www.syncthing.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "standby.syncthing.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "uprecords.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "www.uprecords.f3s.foo.zone" forward to &lt;f3s&gt;
- match request quick header "Host" value "standby.uprecords.f3s.foo.zone" forward to &lt;f3s&gt;
+ # Explicitly route non-f3s hosts to localhost
+ match request header "Host" value "foo.zone" forward to &lt;localhost&gt;
+ match request header "Host" value "www.foo.zone" forward to &lt;localhost&gt;
+ match request header "Host" value "dtail.dev" forward to &lt;localhost&gt;
+ # ... other non-f3s hosts ...
+
+ # NOTE: f3s hosts have NO match rules here!
+ # They use relay-level failover (f3s -&gt; localhost backup)
+ # See the relay configuration below for automatic failover details
}
</pre>
<br />
@@ -746,18 +728,143 @@ http protocol "https" {
relay "https4" {
listen on 46.23.94.99 port 443 tls
protocol "https"
+ # Primary: f3s cluster (with health checks) - Falls back to localhost when all hosts down
forward to &lt;f3s&gt; port 80 check tcp
+ forward to &lt;localhost&gt; port 8080
}
relay "https6" {
listen on 2a03:6000:6f67:624::99 port 443 tls
protocol "https"
+ # Primary: f3s cluster (with health checks) - Falls back to localhost when all hosts down
forward to &lt;f3s&gt; port 80 check tcp
+ forward to &lt;localhost&gt; port 8080
}
</pre>
<br />
<span>In practice, that means relayd terminates TLS with the correct certificate, keeps the three WireGuard-connected backends in rotation, and ships each request to whichever bhyve VM answers first.</span><br />
<br />
+<h3 style='display: inline' id='automatic-failover-when-f3s-cluster-is-down'>Automatic failover when f3s cluster is down</h3><br />
+<br />
+<span class='quote'>Update: This section was added at Tue 30 Dec 10:11:44 EET 2025</span><br />
+<br />
+<span>One important aspect of this setup is graceful degradation: when all three f3s nodes are unreachable (e.g., during maintenance or a power outage in my LAN), users should see a friendly status page instead of an error message.</span><br />
+<br />
+<span>OpenBSD&#39;s relayd supports automatic failover through its health check mechanism. According to the relayd.conf manual:</span><br />
+<br />
+<span class='quote'>This directive can be specified multiple times - subsequent entries will be used as the backup table if all hosts in the previous table are down.</span><br />
+<br />
+<span>The key is the order of <span class='inlinecode'>forward to</span> statements in the relay configuration. By placing the f3s table first with <span class='inlinecode'>check tcp</span> health checks, followed by localhost as a backup, relayd automatically routes traffic based on backend availability:</span><br />
+<br />
+<span>When f3s cluster is UP:</span><br />
+<br />
+<ul>
+<li>Health checks on port 80 succeed for f3s nodes</li>
+<li>All f3s traffic routes to the Kubernetes cluster</li>
+<li>Localhost backup remains idle</li>
+</ul><br />
+<span>When f3s cluster is DOWN:</span><br />
+<br />
+<ul>
+<li>All health checks fail (nodes unreachable)</li>
+<li>The <span class='inlinecode'>&lt;f3s&gt;</span> table becomes unavailable</li>
+<li>Traffic automatically falls back to <span class='inlinecode'>&lt;localhost&gt;</span> on port 8080</li>
+<li>OpenBSD&#39;s httpd serves a static fallback page</li>
+</ul><br />
+<pre>
+# NEW configuration - supports automatic failover
+http protocol "https" {
+ # Explicitly route non-f3s hosts to localhost
+ match request header "Host" value "foo.zone" forward to &lt;localhost&gt;
+ match request header "Host" value "dtail.dev" forward to &lt;localhost&gt;
+ # ... other non-f3s hosts ...
+
+ # f3s hosts have NO protocol rules - they use relay-level failover
+ # (no match rules for f3s.foo.zone, anki.f3s.foo.zone, etc.)
+}
+
+relay "https4" {
+ # f3s FIRST (with health checks), localhost as BACKUP
+ forward to &lt;f3s&gt; port 80 check tcp
+ forward to &lt;localhost&gt; port 8080
+}
+</pre>
+<br />
+<span>This way, f3s traffic uses the relay&#39;s default behavior: try the first table, fall back to the second when health checks fail.</span><br />
+<br />
+<h3 style='display: inline' id='openbsd-httpd-fallback-configuration'>OpenBSD httpd fallback configuration</h3><br />
+<br />
+<span>The localhost httpd service on port 8080 serves the fallback content from <span class='inlinecode'>/var/www/htdocs/f3s_fallback/</span>. This directory contains a simple HTML page explaining the situation:</span><br />
+<br />
+<pre>
+# OpenBSD httpd.conf
+# Fallback for f3s hosts
+server "f3s.foo.zone" {
+ listen on * port 8080
+ log style forwarded
+ location * {
+ root "/htdocs/f3s_fallback"
+ directory auto index
+ }
+}
+
+server "anki.f3s.foo.zone" {
+ listen on * port 8080
+ log style forwarded
+ location * {
+ root "/htdocs/f3s_fallback"
+ directory auto index
+ }
+}
+
+# ... similar blocks for all f3s hostnames ...
+</pre>
+<br />
+<span>The fallback page itself is straightforward:</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><b><u><font color="#000000">&lt;!DOCTYPE</font></u></b> <b><font color="#000000">html</font></b><b><u><font color="#000000">&gt;</font></u></b>
+<b><u><font color="#000000">&lt;html&gt;</font></u></b>
+<b><u><font color="#000000">&lt;head&gt;</font></u></b>
+ <b><u><font color="#000000">&lt;title&gt;</font></u></b>Server turned off<b><u><font color="#000000">&lt;/title&gt;</font></u></b>
+ <b><u><font color="#000000">&lt;style&gt;</font></u></b>
+ body {
+ font-family: <font color="#808080">sans-serif</font>;
+ text-align: <font color="#808080">center</font>;
+ padding-top: <font color="#808080">50px</font>;
+ }
+ .container {
+ max-width: <font color="#808080">600px</font>;
+ margin: <font color="#808080">0</font> <font color="#808080">auto</font>;
+ }
+ <b><u><font color="#000000">&lt;/style&gt;</font></u></b>
+<b><u><font color="#000000">&lt;/head&gt;</font></u></b>
+<b><u><font color="#000000">&lt;body&gt;</font></u></b>
+ <b><u><font color="#000000">&lt;div</font></u></b> <b><font color="#000000">class</font></b>=<font color="#808080">"container"</font><b><u><font color="#000000">&gt;</font></u></b>
+ <b><u><font color="#000000">&lt;h1&gt;</font></u></b>Server turned off<b><u><font color="#000000">&lt;/h1&gt;</font></u></b>
+ <b><u><font color="#000000">&lt;p&gt;</font></u></b>The servers are all currently turned off.<b><u><font color="#000000">&lt;/p&gt;</font></u></b>
+ <b><u><font color="#000000">&lt;p&gt;</font></u></b>Please try again later.<b><u><font color="#000000">&lt;/p&gt;</font></u></b>
+ <b><u><font color="#000000">&lt;p&gt;</font></u></b>Or email <b><u><font color="#000000">&lt;a</font></u></b> <b><font color="#000000">href</font></b>=<font color="#808080">"mailto:paul@nospam.buetow.org"</font><b><u><font color="#000000">&gt;</font></u></b>paul@nospam.buetow.org<b><u><font color="#000000">&lt;/a&gt;</font></u></b>
+ - so I can turn them back on for you!<b><u><font color="#000000">&lt;/p&gt;</font></u></b>
+ <b><u><font color="#000000">&lt;/div&gt;</font></u></b>
+<b><u><font color="#000000">&lt;/body&gt;</font></u></b>
+<b><u><font color="#000000">&lt;/html&gt;</font></u></b>
+</pre>
+<br />
+<span>This approach provides several benefits:</span><br />
+<br />
+<ul>
+<li>Automatic detection: Health checks run continuously; no manual intervention needed</li>
+<li>Instant fallback: When all f3s nodes go down, the next request automatically routes to localhost</li>
+<li>Transparent recovery: When f3s comes back online, health checks pass and traffic resumes automatically</li>
+<li>User experience: Visitors see a helpful message instead of connection errors</li>
+<li>No DNS changes: The same hostnames work whether f3s is up or down</li>
+</ul><br />
+<span>This fallback mechanism has proven invaluable during maintenance windows and unexpected outages, ensuring that users always get a response even when the home lab is offline.</span><br />
+<br />
<h2 style='display: inline' id='deploying-the-private-docker-image-registry'>Deploying the private Docker image registry</h2><br />
<br />
<span>As not all Docker images I want to deploy are available on public Docker registries and as I also build some of them by myself, there is the need of a private registry. </span><br />
diff --git a/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-8b.html b/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-8b.html
new file mode 100644
index 00000000..d598c631
--- /dev/null
+++ b/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-8b.html
@@ -0,0 +1,1132 @@
+<!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 9: Enabling etcd Metrics</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>
+<p class="header">
+<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-8b.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-8b.gmi">Gemini</a>
+</p>
+<h1 style='display: inline' id='f3s-kubernetes-with-freebsd---part-9-enabling-etcd-metrics'>f3s: Kubernetes with FreeBSD - Part 9: Enabling etcd Metrics</h1><br />
+<br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
+<span>This post covers enabling etcd metrics monitoring for the k3s cluster. The etcd dashboard in Grafana initially showed no data because k3s uses an embedded etcd that doesn&#39;t expose metrics by default.</span><br />
+<br />
+<a class='textlink' href='./2025-12-07-f3s-kubernetes-with-freebsd-part-8.html'>Part 8: Observability</a><br />
+<br />
+<h2 style='display: inline' id='enabling-etcd-metrics-in-k3s'>Enabling etcd metrics in k3s</h2><br />
+<br />
+<span>On each control-plane node (r0, r1, r2), create /etc/rancher/k3s/config.yaml:</span><br />
+<br />
+<pre>
+etcd-expose-metrics: true
+</pre>
+<br />
+<span>Then restart k3s on each node:</span><br />
+<br />
+<pre>
+systemctl restart k3s
+</pre>
+<br />
+<span>After restarting, etcd metrics are available on port 2381:</span><br />
+<br />
+<pre>
+curl http://127.0.0.1:2381/metrics | grep etcd
+</pre>
+<br />
+<h2 style='display: inline' id='configuring-prometheus-to-scrape-etcd'>Configuring Prometheus to scrape etcd</h2><br />
+<br />
+<span>In persistence-values.yaml, enable kubeEtcd with the node IP addresses:</span><br />
+<br />
+<pre>
+kubeEtcd:
+ enabled: true
+ endpoints:
+ - 192.168.1.120
+ - 192.168.1.121
+ - 192.168.1.122
+ service:
+ enabled: true
+ port: 2381
+ targetPort: 2381
+</pre>
+<br />
+<span>Apply the changes:</span><br />
+<br />
+<pre>
+just upgrade
+</pre>
+<br />
+<h2 style='display: inline' id='verifying-etcd-metrics'>Verifying etcd metrics</h2><br />
+<br />
+<span>After the changes, all etcd targets are