<?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>/tags/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, 03 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="/tags/kubernetes/index.xml" rel="self" type="application/rss+xml"/><item><title>How I Actually Make Trade-off Calls — Not Just What I Build</title><link>/posts/principal-architecture-tradeoffs/</link><pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate><author>cw@wagner.org.za (Chrisando Wagner)</author><guid>/posts/principal-architecture-tradeoffs/</guid><description>&lt;p&gt;If you&amp;rsquo;ve already read the build logs — the k3s cluster, the storage classes, the failover drill — you know &lt;em&gt;what&lt;/em&gt; I build. This post is about the part that doesn&amp;rsquo;t show up in a &lt;code&gt;terraform apply&lt;/code&gt; output: how I actually decide something, in the moment a plan stops matching reality, and what I do about it afterward.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s a different question than &amp;ldquo;what technology did you pick,&amp;rdquo; and it&amp;rsquo;s the one I think actually separates senior from principal-level work. Anyone competent can execute a plan that goes to schedule. What I&amp;rsquo;m going to walk through is a plan that didn&amp;rsquo;t, twenty minutes into a homelab rebuild, and the small, unglamorous decision that followed it — because that decision is a better sample of how I&amp;rsquo;ll behave on your platform than any tool list is.&lt;/p&gt;</description></item><item><title>What I Build — A Technical Services Profile</title><link>/posts/technical-profile/</link><pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate><author>cw@wagner.org.za (Chrisando Wagner)</author><guid>/posts/technical-profile/</guid><description>&lt;p&gt;If you&amp;rsquo;ve landed here from LinkedIn or a referral, this is the longer answer to &amp;ldquo;what do you actually do?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The short version: I design and build infrastructure, and increasingly I&amp;rsquo;m the one deciding what infrastructure gets built. I have done so for 25 years — across datacentres, managed service environments, banking platforms, and my own homelab — using everything from Windows Server and VMware to OpenStack, Red Hat, and modern cloud-native stacks on Kubernetes. My current role is setting cloud and containerisation strategy for a regulated banking platform: the reference architectures other engineering teams build against, the guardrails that keep a POPIA and PCI-DSS environment audit-ready, and the FinOps governance that keeps cloud spend accountable at group level.&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>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><item><title>Homelab Part 3 - Kubernetes</title><link>/posts/homelab3/</link><pubDate>Mon, 24 Nov 2025 00:00:00 +0000</pubDate><author>cw@wagner.org.za (Chrisando Wagner)</author><guid>/posts/homelab3/</guid><description>&lt;h2 class="relative group"&gt;Kubernetes
&lt;div id="kubernetes" 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="#kubernetes" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;Kubernetes is a popular open-source container orchestration platform that automates the deployment, scaling, and management of containerised applications. It provides a robust and scalable infrastructure for running microservices and containerised applications across multiple nodes.&lt;/p&gt;
&lt;p&gt;Kubernetes is a powerful tool that enables developers to deploy, manage, and scale containerised applications across multiple nodes. It provides a declarative way to define the desired state of the application, and automatically manages the deployment, scaling, and health of the application.&lt;/p&gt;</description></item></channel></rss>