StatefulSet vs Deployment for stateless-with-fragile-upgrade workloads

A decision record for a workload that’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.

May 28, 2026 · 8 min

When Go templates outgrow you: a typed-language alternative for Crossplane compositions

When Crossplane’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.

May 23, 2026 · 6 min

Stable vs. rewritten identity: cross-environment database restore in a stateful platform

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?

May 15, 2026 · 5 min

Tearing down a managed-Kubernetes deployment without leaving a tail

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.

April 28, 2026 · 6 min

Structured JSON logging for a legacy Java app on Kubernetes — without forking the image

How to retrofit machine-parseable JSON logging onto a legacy Java app on Kubernetes — both log4j2 and Tomcat’s JUL — without forking the vendor image, as an opt-in, fail-open, cleanly revertible layer.

April 22, 2026 · 6 min

Use GKE Connect Gateway to protect your private control plane

Reach a private GKE cluster’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.

April 21, 2026 · 2 min

The Crossplane Object that synced green and changed nothing

Everything’s green — Argo CD Synced, Crossplane Ready — but the change never took effect. The trap where Crossplane management policies without Update meet Kubernetes immutability.

April 15, 2026 · 3 min

Why deleting an env var from your GitOps values doesn't remove it from the pod

You delete an env var from your Helm values, Argo CD reports Synced — and it’s still on the pod. Why strategic-merge-patch can’t remove list items, and the Server-Side Apply fix.

April 9, 2026 · 4 min