<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kubernetes on Chris Wagner</title><link>/categories/kubernetes/</link><description>Recent content in Kubernetes on Chris Wagner</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>cw@wagner.org.za (Chrisando Wagner)</managingEditor><webMaster>cw@wagner.org.za (Chrisando Wagner)</webMaster><copyright>© 2026 Chrisando Wagner</copyright><lastBuildDate>Mon, 31 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="/categories/kubernetes/index.xml" rel="self" type="application/rss+xml"/><item><title>DevOps Is a Culture. Platform Engineering Is a Product Team. That Difference Matters More Than People Admit</title><link>/posts/devops-vs-platform-engineering/</link><pubDate>Mon, 31 Aug 2026 00:00:00 +0000</pubDate><author>cw@wagner.org.za (Chrisando Wagner)</author><guid>/posts/devops-vs-platform-engineering/</guid><description>&lt;p&gt;I covered where platform engineering actually comes from last week — the short version is that it&amp;rsquo;s what happens when &amp;ldquo;you build it, you run it&amp;rdquo; hits an organisation large enough that nobody can hold the whole picture in their head any more. This week I want to sit with a distinction that gets blurred constantly, in job specs, in conference talks, in the way people casually use &amp;ldquo;DevOps team&amp;rdquo; and &amp;ldquo;platform team&amp;rdquo; as if they&amp;rsquo;re the same noun with a rebrand: &lt;strong&gt;they are not the same thing, in kind, not just in degree.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Building an HA k3s Control Plane on Ubuntu 24.04 LTS: Terraform, Ansible, kube-vip, and a Real Failover Drill</title><link>/posts/k3s-enterprise/</link><pubDate>Tue, 28 Jul 2026 00:00:00 +0000</pubDate><author>cw@wagner.org.za (Chrisando Wagner)</author><guid>/posts/k3s-enterprise/</guid><description>&lt;p&gt;This is the latest iteration of my homelab automation: Terraform provisions six Ubuntu 24.04 LTS VMs on Proxmox, Ansible turns three of them into an HA k3s control plane with embedded etcd and a kube-vip floating VIP, and ArgoCD takes over GitOps management of everything above the OS the moment the cluster is up. It&amp;rsquo;s IaC end to end — nothing in this post was clicked into existence, and the two commands that matter (&lt;code&gt;terraform apply&lt;/code&gt;, &lt;code&gt;ansible-playbook site.yml&lt;/code&gt;) are the only manual steps in the whole build.&lt;/p&gt;</description></item><item><title>GitOps Reached Maturity in 2026 — Here's What That Actually Looks Like Running Your Own Blog</title><link>/posts/gitops-maturity/</link><pubDate>Mon, 27 Jul 2026 00:00:00 +0000</pubDate><author>cw@wagner.org.za (Chrisando Wagner)</author><guid>/posts/gitops-maturity/</guid><description>&lt;p&gt;Somewhere in the last year, &amp;ldquo;GitOps&amp;rdquo; quietly stopped being a talk track at KubeCon and started being the thing platform teams assume is already in place before a project even gets a name. Argo and Flux both sit at CNCF graduated status now, the highest maturity tier the foundation hands out, and the conference circuit has moved on from &amp;ldquo;should you adopt GitOps&amp;rdquo; to &amp;ldquo;how do you build a self-service golden path on top of it.&amp;rdquo; That&amp;rsquo;s the industry&amp;rsquo;s definition of maturity: a pattern boring enough that nobody has to argue for it any more.&lt;/p&gt;</description></item><item><title>I Run Kubernetes for a Bank and at Home. Here's When You Shouldn't.</title><link>/posts/kubernetes-overkill/</link><pubDate>Mon, 27 Jul 2026 00:00:00 +0000</pubDate><author>cw@wagner.org.za (Chrisando Wagner)</author><guid>/posts/kubernetes-overkill/</guid><description>&lt;p&gt;Every eighteen months or so, the same argument does a lap of the internet. Someone writes &amp;ldquo;we moved off Kubernetes and cut our infra bill by 60%.&amp;rdquo; A few months later, someone else writes &amp;ldquo;we moved back to Kubernetes and here&amp;rsquo;s why.&amp;rdquo; Both posts get the same engagement, both are right about their own environment, and both get quoted afterwards as if they&amp;rsquo;d settled something universal. Neither side did.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m writing this because I sit on both ends of that argument at the same time, every day, and I don&amp;rsquo;t think either tribe is being honest with the other.&lt;/p&gt;</description></item><item><title>POPIA, PCI-DSS, and My Proxmox Cluster: Bank-Grade Security at Home</title><link>/posts/bank-grade-homelab/</link><pubDate>Mon, 27 Jul 2026 00:00:00 +0000</pubDate><author>cw@wagner.org.za (Chrisando Wagner)</author><guid>/posts/bank-grade-homelab/</guid><description>&lt;p&gt;A recruiter once asked me, half-joking, whether I ran my home network &amp;ldquo;like a bank.&amp;rdquo; I laughed, said no, and then drove home and found I&amp;rsquo;d left a Grafana dashboard exposed on a LoadBalancer IP with no auth in front of it. That was years ago, before the current cluster existed, but the discomfort of that gap never quite left me. My day job is Cloud Architect at a banking group, where POPIA and PCI-DSS aren&amp;rsquo;t abstractions — they&amp;rsquo;re the reason certain designs get rejected in review before they ever reach a pull request. My homelab is not a bank. Nobody&amp;rsquo;s card data lives on it, no regulator will ever audit it, and I will say that plainly and repeatedly in this post so nobody mistakes what follows for a legal claim. What I&amp;rsquo;ve done instead is take the &lt;em&gt;discipline&lt;/em&gt; those regulations instil — because I practise it forty hours a week whether I like it or not — and apply it to four nodes and a Mikrotik router in a room in Johannesburg.&lt;/p&gt;</description></item><item><title>Progressive Delivery with Kargo: Warehouses, Freight, and Blue-Green Promotions</title><link>/posts/kargo-progressive-delivery/</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><author>cw@wagner.org.za (Chrisando Wagner)</author><guid>/posts/kargo-progressive-delivery/</guid><description>&lt;p&gt;&lt;a
href="../../posts/blog-routing"&gt;How This Blog Is Served&lt;/a&gt;
walked through the full path from &lt;code&gt;git push&lt;/code&gt; to a served page, touching every layer along the way. This post stays in one place: &lt;strong&gt;Kargo&lt;/strong&gt;, the piece that sits between &amp;ldquo;CI built a new image&amp;rdquo; and &amp;ldquo;ArgoCD is told to deploy it.&amp;rdquo; It&amp;rsquo;s the part of the pipeline most likely to look like magic from the outside, so this is a proper look at what it&amp;rsquo;s actually doing — plus a couple of real gotchas hit while getting auto-promotion working correctly.&lt;/p&gt;</description></item><item><title>How This Blog Is Served — Kubernetes, Gateway API, and a Full GitOps Pipeline</title><link>/posts/blog-routing/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate><author>cw@wagner.org.za (Chrisando Wagner)</author><guid>/posts/blog-routing/</guid><description>&lt;p&gt;This blog runs on a self-hosted k3s cluster, served through a Cloudflare proxy, routed via the Kubernetes Gateway API, and deployed using a fully automated GitOps pipeline. This post walks through exactly how a &lt;code&gt;git push&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt; makes it to your browser — from webhook to blue-green promotion.&lt;/p&gt;
&lt;p&gt;Source: &lt;a
href="https://git.wagner.org.za/cw/blog"
target="_blank"
&gt;git.wagner.org.za/cw/blog&lt;/a&gt;
&lt;/p&gt;
&lt;h2 class="relative group"&gt;The Full Picture
&lt;div id="the-full-picture" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"&gt;
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#the-full-picture" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;Before diving into each layer, here is the end-to-end flow:&lt;/p&gt;</description></item><item><title>Homelab Part 4 - k3s Automation</title><link>/posts/k3s-automation/</link><pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate><author>cw@wagner.org.za (Chrisando Wagner)</author><guid>/posts/k3s-automation/</guid><description>&lt;p&gt;In &lt;a
href="../../posts/homelab3"&gt;Part 3&lt;/a&gt;
we deployed k3s manually — great for understanding what each piece does, but not something you want to repeat. This post automates the entire thing: Terraform provisions the VMs, Ansible configures them and installs k3s + Cilium, and ArgoCD bootstraps itself and takes over GitOps management of the full cluster stack.&lt;/p&gt;
&lt;p&gt;Source: &lt;a
href="https://git.wagner.org.za/homelab/k3s-proxmox-automation.git"
target="_blank"
&gt;git.wagner.org.za/homelab/k3s-proxmox-automation&lt;/a&gt;
&lt;/p&gt;
&lt;h2 class="relative group"&gt;Architecture
&lt;div id="architecture" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"&gt;
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#architecture" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;┌──────────────────────────────────────────────────────────────────────────────┐
│ Proxmox Host │
│ │
│ ┌─────────────────┐ ┌───────────────┐ ┌───────────────┐ ┌────────────┐ │
│ │ k3s-controller │ │ k3s-worker-01 │ │ k3s-worker-02 │ │k3s-worker │ │
│ │ 172.16.10.1 │ │ 172.16.10.2 │ │ 172.16.10.3 │ │172.16.10.4 │ │
│ │ 8 cores / 16 GB │ │ 16c / 32 GB │ │ 16c / 32 GB │ │16c / 32 GB │ │
│ │ vda: 200 GB │ │ vda: 200 GB │ │ vda: 200 GB │ │vda: 200 GB │ │
│ │ │ │ vdb: 512 GB │ │ vdb: 512 GB │ │vdb: 512 GB │ │
│ │ k3s server │ │ vdc: 512 GB │ │ vdc: 512 GB │ │vdc: 512 GB │ │
│ │ Cilium / ArgoCD │ │ k3s agent │ │ k3s agent │ │k3s agent │ │
│ └────────┬────────┘ └──────┬────────┘ └──────┬────────┘ └─────┬──────┘ │
│ └───────────────-──┴──────────────────┴────────────-────┘ │
└──────────────────────────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;div class="mermaid"&gt;
graph TB
subgraph Proxmox["Proxmox Host"]
C["&lt;b&gt;k3s-controller-01&lt;/b&gt;&lt;br/&gt;172.16.10.1&lt;br/&gt;8c / 16 GB&lt;br/&gt;vda: 200 GB OS&lt;br/&gt;─────────────&lt;br/&gt;k3s server&lt;br/&gt;Cilium · ArgoCD"]
W1["&lt;b&gt;k3s-worker-01&lt;/b&gt;&lt;br/&gt;172.16.10.2&lt;br/&gt;16c / 32 GB&lt;br/&gt;vda: 200 GB OS&lt;br/&gt;vdb: 512 GB DirectPV&lt;br/&gt;vdc: 512 GB Longhorn&lt;br/&gt;─────────────&lt;br/&gt;k3s agent"]
W2["&lt;b&gt;k3s-worker-02&lt;/b&gt;&lt;br/&gt;172.16.10.3&lt;br/&gt;16c / 32 GB&lt;br/&gt;vda: 200 GB OS&lt;br/&gt;vdb: 512 GB DirectPV&lt;br/&gt;vdc: 512 GB Longhorn&lt;br/&gt;─────────────&lt;br/&gt;k3s agent"]
W3["&lt;b&gt;k3s-worker-03&lt;/b&gt;&lt;br/&gt;172.16.10.4&lt;br/&gt;16c / 32 GB&lt;br/&gt;vda: 200 GB OS&lt;br/&gt;vdb: 512 GB DirectPV&lt;br/&gt;vdc: 512 GB Longhorn&lt;br/&gt;─────────────&lt;br/&gt;k3s agent"]
end
C --&gt;|k3s API :6443| W1
C --&gt;|k3s API :6443| W2
C --&gt;|k3s API :6443| W3
C &amp; W1 &amp; W2 &amp; W3 --&gt;|eBGP AS 65000| R["Router&lt;br/&gt;172.16.10.254"]
R --&gt;|advertises LB pool&lt;br/&gt;172.16.1.0/24| NET["Network"]
&lt;/div&gt;
&lt;p&gt;Each worker gets three disks:&lt;/p&gt;</description></item><item><title>Kairos — Immutable Kubernetes OS</title><link>/posts/kairos/</link><pubDate>Tue, 30 Dec 2025 00:00:00 +0000</pubDate><author>cw@wagner.org.za (Chrisando Wagner)</author><guid>/posts/kairos/</guid><description>&lt;h2 class="relative group"&gt;Kairos
&lt;div id="kairos" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"&gt;
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#kairos" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;Kairos is a cloud-native Linux meta-distribution for running Kubernetes. It brings the power of the public cloud to your on-premises environment. &lt;a
href="https://kairos.io/"
target="_blank"
&gt;https://kairos.io/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Kairos is a Cloud Native Computing Foundation &lt;a
href="https://cncf.io/"
target="_blank"
&gt;CNCF&lt;/a&gt;
sandbox project.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Architecture
&lt;div id="architecture" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"&gt;
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#architecture" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;Kairos is designed to be a lightweight, secure, and scalable solution for deploying Kubernetes clusters. It uses a combination of containerized components and a lightweight operating system to provide a highly available and fault-tolerant platform.&lt;/p&gt;</description></item></channel></rss>