All reading paths

A local platform from zero

Set up language runtimes with version managers, run real Kubernetes clusters locally with Minikube, attach the IDE debugger to a JVM inside a pod, and wire logs, metrics, and traces across services with one correlation ID.

4 entries, 41 min in total, empty Mac → observable cluster.

  1. Step 1 of 4 Java, Python and Node versions on a Mac with SDKMAN, pyenv and nvm SDKMAN, pyenv and nvm install several Java, Python and Node versions side by side. A small file in each project selects the version, and the shell switches to it when you cd into the folder. Tooling note, 8 min
  2. Step 2 of 4 Local Kubernetes on a Mac: Minikube profiles, kubectl contexts and k9s Minikube runs several Kubernetes clusters on one Mac, one profile per project. This note covers installation, profiles with their own CPU and memory, switching between clusters with kubectl contexts, and k9s for daily work. Infrastructure note, 9 min
  3. Step 3 of 4 Remote debugging a Spring Boot service on Kubernetes with JDWP JDWP lets IntelliJ or VS Code attach to the JVM inside a pod through kubectl port-forward. A Kustomize overlay adds the debug flag only in dev and staging. A demo project shows the full setup on Minikube. Infrastructure note, 11 min
  4. Step 4 of 4 One trace ID across Spring Boot, FastAPI and LangChain on Kubernetes with OpenTelemetry and Grafana OpenTelemetry gives every request a trace ID and sends it to every service it calls. The same ID goes into every log line, so one Loki query returns all the logs of a request and links to its trace in Tempo. The demo runs three services on Minikube. Infrastructure essay, 13 min