A miniature Platform-as-a-Service in Go: a CLI (metisctl) and a manifest
generator that compiles a simple metis.yaml into the Kubernetes API objects
needed to run an application. Built to understand what’s load-bearing in Heroku
and Cloud Foundry’s “git push and it runs” abstractions.
Implemented
- A
metis.yamlschema with just enough fields to define an app: name, image, port, replica count. - A Go generator that turns the YAML into
appsv1.Deploymentandcorev1.Serviceobjects via the officialkubernetes-goclient. - A
metisctl deploycommand (built on cobra) that parses the YAML, calls the generator, and applies the resulting objects to whatever clusterkubectlis pointed at. - A sample app (
test-apps/hello-world) with a/metricsendpoint and structured logging, plus aprometheus-values.yamlfor service discovery.
Why bother
Two reasons. First, the gap between “I know how to write a Kubernetes manifest” and “I know what the official Go client expects and how to construct the resource hierarchy from scratch” is bigger than it looks. Going through the client-go path forces you to handle pointer-vs-value semantics, label selectors, and resource versioning explicitly.
Second, this is the abstraction muscle that platform-engineering roles ask you to demonstrate. Most ICs at this seniority can write a Helm chart; fewer can defend why a particular generator pattern produces a Deployment vs a StatefulSet, or what the implications are for rolling updates.