<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Kubernetes on Allen Ziegenfus</title><link>https://allenz.net/tags/kubernetes/</link><description>Recent content in Kubernetes on Allen Ziegenfus</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 28 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://allenz.net/tags/kubernetes/index.xml" rel="self" type="application/rss+xml"/><item><title>StatefulSet vs Deployment for stateless-with-fragile-upgrade workloads</title><link>https://allenz.net/writing/statefulset-vs-deployment-for-stateless-with-fragile-upgrade-workloads/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/statefulset-vs-deployment-for-stateless-with-fragile-upgrade-workloads/</guid><description>A decision record for a workload that&amp;rsquo;s operationally stateless but has a fragile single-instance upgrade: StatefulSet vs Deployment, with live operational evidence and the case for Deployment plus a startup lock.</description></item><item><title>When Go templates outgrow you: a typed-language alternative for Crossplane compositions</title><link>https://allenz.net/writing/when-go-templates-outgrow-you-a-typed-language-alternative-for-crossplane-compositions/</link><pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/when-go-templates-outgrow-you-a-typed-language-alternative-for-crossplane-compositions/</guid><description>When Crossplane&amp;rsquo;s Go-template compositions outgrow you — no types, no tests, global scope — KCL offers a typed, testable alternative. The multi-step pipeline architecture, and the bugs only end-to-end validation catches.</description></item><item><title>Stable vs. rewritten identity: cross-environment database restore in a stateful platform</title><link>https://allenz.net/writing/stable-vs.-rewritten-identity-cross-environment-database-restore-in-a-stateful-platform/</link><pubDate>Fri, 15 May 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/stable-vs.-rewritten-identity-cross-environment-database-restore-in-a-stateful-platform/</guid><description>When a platform bakes an environment-derived identity into its database on first boot, restoring across environments crash-loops on a mismatch. The fix is a product question: stabilize the identity, or rewrite it after restore?</description></item><item><title>Tearing down a managed-Kubernetes deployment without leaving a tail</title><link>https://allenz.net/writing/tearing-down-a-managed-kubernetes-deployment-without-leaving-a-tail/</link><pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/tearing-down-a-managed-kubernetes-deployment-without-leaving-a-tail/</guid><description>A field guide to deleting a GKE or EKS deployment cleanly when the cluster, the in-cluster GitOps/Crossplane layer, and Terraform all disagree about who owns cleanup — orphans, deletion order, and the stuck cases.</description></item><item><title>Structured JSON logging for a legacy Java app on Kubernetes — without forking the image</title><link>https://allenz.net/writing/structured-json-logging-for-a-legacy-java-app-on-kubernetes-without-forking-the-image/</link><pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/structured-json-logging-for-a-legacy-java-app-on-kubernetes-without-forking-the-image/</guid><description>How to retrofit machine-parseable JSON logging onto a legacy Java app on Kubernetes — both log4j2 and Tomcat&amp;rsquo;s JUL — without forking the vendor image, as an opt-in, fail-open, cleanly revertible layer.</description></item><item><title>Use GKE Connect Gateway to protect your private control plane</title><link>https://allenz.net/writing/use-gke-connect-gateway-to-protect-your-private-control-plane/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/use-gke-connect-gateway-to-protect-your-private-control-plane/</guid><description>Reach a private GKE cluster&amp;rsquo;s API server without a bastion or authorized-networks — using the GKE-native Connect Gateway, with GCP IAM outside the gateway and Kubernetes RBAC inside.</description></item><item><title>The Crossplane Object that synced green and changed nothing</title><link>https://allenz.net/writing/the-crossplane-object-that-synced-green-and-changed-nothing/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/the-crossplane-object-that-synced-green-and-changed-nothing/</guid><description>Everything&amp;rsquo;s green — Argo CD Synced, Crossplane Ready — but the change never took effect. The trap where Crossplane management policies without Update meet Kubernetes immutability.</description></item><item><title>Why deleting an env var from your GitOps values doesn't remove it from the pod</title><link>https://allenz.net/writing/why-deleting-an-env-var-from-your-gitops-values-doesnt-remove-it-from-the-pod/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/why-deleting-an-env-var-from-your-gitops-values-doesnt-remove-it-from-the-pod/</guid><description>You delete an env var from your Helm values, Argo CD reports Synced — and it&amp;rsquo;s still on the pod. Why strategic-merge-patch can&amp;rsquo;t remove list items, and the Server-Side Apply fix.</description></item></channel></rss>