-
New node who dis? DNS Issues and Calico Failures on a resurrected Node
A while back, I had a somewhat soft node failure due to Calico not allowing the same node to come up under a different IP address.
-
Handling your first dead Hetzner hard drive
Wondering what happens when a hard drive you're using on a Hetzner dedicated server fails? Wonder no longer.
-
Using Baserow to power the landing page for NimbusWS
I used Baserow (https://baserow.io) as the backend for a tiny landing page built for NimbusWS (https://nimbusws.com). Yak shaving aside, building with Baserow was quicker, easier, and much easier to manage/administer than other solutions I might have chosen in the past.
-
Bare metal k8s storage: OpenEBS ZFS LocalPV + Rancher Longhorn
I recently reworked my storage setup in pursuit of both production and flexibility. Looking at the F/OSS space led me to OpenEBS ZFS LocalPV with Longhorn on top, and here's why.
-
How and why Haskell is better (than your favorite $LANGUAGE)
A quick list of features which Haskell benefits from that your language probably doesn't
-
Ansible tip: Variables from inventory file
How to use variables from your inventory file, once and for all
-
Automating k0s cluster backup with Ansible and SystemD
A quick and simple guide to automating your k0s cluster backup with ansible and systemd. You can probably guess the code you're about to read.
-
Sometimes the problem is DNS (on Hetzner)
If you're running on Hetzner, you might want to update your DNS settings to use some other resolvers. This can problem can manifest if you're trying to resolve DNS names that resolve to your own machines *from inside your own machines*.
-
So you need to wait for some Kubernetes resources?
Want to wait for some Kubernetes resources and don't want to write a full reconciliation loop/operator? Here's how to hack it.
-
The Deployment Spectrum
A quick writeup on the 'deployment spectrum' and it's history, as I see it.
-
Wicked Landing Gear
I stood on the shoulders of the giants over at wickedtemplates (https://www.wickedtemplates.com) who open sourced wickedblocks (https://blocks.wickedtemplates.com/) and built their tailwind templates into individual components powered by lit-html, which is now called Lit (https://lit.dev/)
-
Novice Arch Pitfall: watch out for kernel mismatches (after system updates)
Watch out for kernel version mismatches after system updates (i.e. updates of the 'linux' package) -- spooky behavior can occur if you're not careful
-
Level 1 Automated K8S Deployments With GitLab CI
You may not need Flux/ArgoCD or any fancy automated reconciliation loop deployment process just yet! Plain old CI runners work quite well for simple automated deployments (this approach powers this blog right now!).
-
Postgres Tip: Covering with primary key indices
Some quick code (PG migrations) to enable converting an auto-generated postgres primary key index to a covering index
-
Paxosmon 2: The Paxos Journey Continues
A few more Paxos papers to take a gander at -- Quorum reads, Compartmentalization, Matchmaking and Pigs. The Paxos family of consensus protocols (and their papers) are as colorful as they ever were.
-
Years later, REST-ish Services in Haskell Part 4
Part 4 of a series on how I write REST-ish web services in Haskell with a dash of robustness
-
Setting Up SES With Pulumi
A step by step guide on how to set up SES with Pulumi
-
Stuffing both SSH and HTTPS on port 443 with stunnel, sslh, and Traefik
A small exploration and guide (with repo) into exposing SSH to a container in a Pod over port 443 (which is normally used for HTTPS).
-
K8s storage provider benchmarks round 2, part 5
I finish up the benchmarking process, and share the results. If you want to find what I actually end up using, the answer is in here!
-
K8s storage provider benchmarks round 2, part 4
I describe in detail the YAML and Makefile scripts that power the fio and pgbench based tests that will run on every storage provider I managed to set up