A few months ago, I started using Kubernetes (k8s) at work. For all the jokes about how no one understands it and how it's impossible to set up, I will say it's pretty awesome if you're just deploying to a cluster managed by someone else. Since adopting the k8s infrastructure model, our deployments have become completely declarative. We write JSON files that specify what we need, and k8s manages the particulars of orchestrating startup, status monitoring, etc.
The first complaint I had was that I was writing shell scripts to deploy new docker images and to interface with kubectl. It was hard to parametrize these scripts so they could be shared, and even then, they were hard to read and maintain. I wished I could be using Clojure instead. Enter lumo . Using lumo, I could write a deploy script that uses edn config files to perform a deployment, and I would have the full power of clojure to handle deployment configuration. I also have plans to leverage lumo to creat
Even with lumo in place for cljs based deployments, I still had a problem. Our staging (i.e. Release Candidate) and development (i.e. bleeding edge) deployments were targeting the same k8s cluster (we only have two maintained clusters, one is production, one is non-production). This means that I have to maintain two separate sets of JSON files specifying all of the k8s things we needed, and worse, 90%+ of them were shared. To solve this, I wrote Weaver .