Blog
Thoughts on engineering, design, and building great products.
Resource Requests/Limits and Autoscaling (HPA)
Every pod has to state how much CPU/RAM it wants — that's how the scheduler places pods correctly and the cluster doesn't fall over because one pod hogs everything. Once declared, the HorizontalPodAutoscaler raises and lowers replica count with load. This article generates real load and watches HPA scale from 1 up to many pods.
Health Checks: Liveness and Readiness Probes
How does Kubernetes know a 'Running' pod is actually healthy and ready to take traffic? Through probes. A liveness probe restarts a hung container; a readiness probe keeps traffic away from a pod that isn't ready. This article demos both with deliberately broken pods and watches K8s react.
Ingress: Routing HTTP Into the Cluster
NodePort gives each service a weird port — no good when you have many services. Ingress is a single HTTP entry point, routing by domain and path to the right service, with TLS. This article: enable minikube's ingress addon, write an Ingress rule, and test Host-based routing.
Storage: Volumes, PV, PVC and StorageClass
Data inside a pod evaporates with the pod — no good for a database or user files. Kubernetes separates the 'storage request' (PVC) from the 'real disk' (PV), with StorageClass for dynamic provisioning. This article proves data outlives the pod with a delete-then-recreate experiment.
ConfigMap and Secret: Separating Configuration from the Image
The same image must run in dev, staging, production — meaning configuration cannot be baked into the image. ConfigMap holds ordinary configuration, Secret holds sensitive data. This article: creating and injecting them into a pod via environment variables and files, with an important warning about 'a Secret is just base64'.
Namespaces, Labels and Selectors
Two foundational organizing mechanisms in Kubernetes: namespaces split the cluster into separate compartments, while labels/selectors are how you tag and select resources — the very 'glue' that Deployment and Service use to find pods. This article makes both clear with real examples.
Service: A Stable Address and Load Balancing
Pods come and go, IPs change constantly — so how do you call them? A Service gives you a stable address in front of a group of pods and load-balances automatically. This article: how ClusterIP, NodePort and LoadBalancer differ, how internal DNS lets you call a service by name, and kube-proxy behind it all.