livinstone.dev / blog

The Blog

Hands-on articles about Kubernetes, Terraform, GitOps, observability, and cloud infrastructure — based on things I've actually built and broken in production.

19 articles published

Writing Kubernetes Runbooks That Actually Get Used During Incidents
Kubernetes Production Handbook — Part 3
KubernetesDevOpsSRE

Writing Kubernetes Runbooks That Actually Get Used During Incidents

Most runbooks are written once, stored somewhere, and never opened again — especially during the incidents they were meant to help with. This article covers how to write Kubernetes runbooks that engineers actually reach for at 2 AM.

2 Jul 20269 min read
Kubernetes Resource Management: Requests, Limits, LimitRanges, and QoS Classes
Kubernetes Production Handbook — Part 2
KubernetesDevOpsPlatform Engineering

Kubernetes Resource Management: Requests, Limits, LimitRanges, and QoS Classes

Resource requests and limits are the single most impactful configuration decision in a Kubernetes cluster. Get them wrong and you get OOMKilled pods, noisy neighbours, unreliable scheduling, and wasted spend. This article explains how to get them right.

17 Jun 202611 min read
Kubernetes Pod Lifecycle: From Scheduling to TerminationFeatured
Kubernetes Production Handbook — Part 1
KubernetesDevOpsPlatform Engineering

Kubernetes Pod Lifecycle: From Scheduling to Termination

Everything that happens between kubectl apply and a running pod — and between a delete command and a clean shutdown. Understanding the full pod lifecycle is what separates engineers who debug Kubernetes quickly from those who guess.

3 Jun 20264 min read
What I Wish I'd Known About Kubernetes Reliability From Day One
Kubernetes Deep Dive — Part 3
KubernetesDevOpsSRE

What I Wish I'd Known About Kubernetes Reliability From Day One

The reliability mindset that took years to develop: how to think about SLOs in a Kubernetes environment, failure modes that repeat, capacity planning in a dynamic system, and the on-call experience that changes how you build everything.

1 May 20264 min read
Full Observability Stack on Kubernetes: Prometheus, Grafana, Loki, and Alertmanager with HelmFeatured
Platform Observability — Part 1
KubernetesObservabilityPrometheus

Full Observability Stack on Kubernetes: Prometheus, Grafana, Loki, and Alertmanager with Helm

A step-by-step guide to deploying a complete observability stack on Kubernetes using Helm — covering metrics with Prometheus, visualisation with Grafana, log aggregation with Loki, and real alerting with Alertmanager.

15 Apr 202610 min read
The Operational Patterns Kubernetes Won't Teach You — But Production WillFeatured
Kubernetes Deep Dive — Part 2
KubernetesDevOpsPlatform Engineering

The Operational Patterns Kubernetes Won't Teach You — But Production Will

Beyond the basics: the operational patterns that only emerge after running Kubernetes in production. Graceful shutdown, pod disruption budgets, anti-affinity rules, namespace strategy, and the kubectl commands that become muscle memory.

18 Mar 20264 min read
Kubernetes RBAC Hardening: From Cluster-Admin to Least PrivilegeFeatured
Kubernetes Security — Part 1
KubernetesSecurityRBAC

Kubernetes RBAC Hardening: From Cluster-Admin to Least Privilege

Most Kubernetes clusters start with everything running as cluster-admin. This article walks through how to progressively harden RBAC — implementing namespace-scoped roles, service account restrictions, and audit logging.

8 Mar 20264 min read
What Years of Using Kubernetes Taught Me That the Documentation Never CouldFeatured
Kubernetes Deep Dive — Part 1
KubernetesDevOpsPlatform Engineering

What Years of Using Kubernetes Taught Me That the Documentation Never Could

Documentation taught me how Kubernetes works. Production taught me why it works the way it does — and why that difference changed how I think about infrastructure.

10 Feb 20267 min read
Why HPA Wasn't Enough: Scaling Kubernetes on ALB Metrics with KEDAFeatured
KubernetesKEDAAWS

Why HPA Wasn't Enough: Scaling Kubernetes on ALB Metrics with KEDA

HPA was watching CPU and memory. The pods were I/O-bound — stuck waiting on a down dependency — so CPU stayed at 45% while 502s piled up. The ALB had the right signal the whole time. We just needed something to read it.

22 Jul 20257 min read

Page 1 of 3